写入 USB 闪存盘时写入速度较慢

写入 USB 闪存盘时写入速度较慢

我在一台旧的戴尔 Optiplex 760 机顶盒上运行 Ubuntu 20.04,将文件复制到 USB 闪存驱动器时的传输速度比应有的速度慢得多,此外,在传输结束时,传输程序(我尝试使用、、、复制文件)nautilus即使整个文件已传输到 USB 驱动器后也会挂起——这种挂起使脚本文件传输变得困难,因为在传输程序返回 0 之前,执行无法继续。我检查了文件大小,甚至做了校验和来检查文件的完整性,发现文件已被正确复制并且完好无损,然而在文件传输了 100% 之后,传输程序仍挂起大约 5 分钟。cpddrsyncmd5sum

我认为问题可能是设备被识别为 USB-1.0 设备。我检查了 的输出lsusb并将其与 的输出进行交叉引用usb-devices,发现闪存驱动器始终被识别为具有 USB2.0 速度,即 480Mbps - 因此 USB 版本没有问题。

用户@box:~$ lsusb

总线 006 设备 059:ID 0781:​​5567 SanDisk Corp. Cruzer Blade
总线 006 设备 001:ID 1d6b:0002 Linux Foundation 2.0 根集线器
总线 008 设备 001:ID 1d6b:0001 Linux Foundation 1.1 根集线器
总线 007 设备 001:ID 1d6b:0001 Linux Foundation 1.1 根集线器
总线 005 设备 001:ID 1d6b:0001 Linux Foundation 1.1 根集线器
总线 003 设备 001:ID 1d6b:0001 Linux Foundation 1.1 根集线器
总线 004 设备 002:ID 10f1:1a19 Importek USB 2.0 摄像头
总线 004 设备 001:ID 1d6b:0002 Linux Foundation 2.0 根集线器
总线 002 设备 001:ID 1d6b:0001 Linux Foundation 1.1 根集线器
总线 001 设备 001:ID 1d6b:0001 Linux Foundation 1.1 根集线器

usb-devices输出的相关部分

T:总线=06 Lev=01 Prnt=01 端口=00 Cnt=01 设备编号= 59 Spd=480 MxCh= 0
D:Ver=2.00 Cls=00(>ifc)Sub=00 Prot=00 MxPS=64 #Cfgs=1
P:供应商=0781 产品 ID=5567 修订版本=01.26
S:制造商 = SanDisk
S:产品=Cruzer Blade
S:序列号=200530450005728000EF
C:#Ifs= 1 Cfg#= 1 Atr=80 MxPwr=200mA
我:如果#=0x0 Alt= 0 #EPs= 2 Cls=08(存储) Sub=06 Prot=50 驱动程序=usb-storage

这表明所采用的 USB 版本没有任何问题。我检查了一下,其他人也找到了一些与设置vm.dirty_bytesvm.dirty_background_bytes配置sysctl字节有关的解决方法$((15*1024*1024))。这并没有提高传输速度,但现在允许传输程序使用更小的缓冲区大小,并且 100% 之后的延迟已经停止。

在同一台机器上使用 Windows 7 时 - 使用相同的闪存驱动器,我可以持续以 7-8MBps 的平均速度进行传输。但是,当我重新启动并切换回 Ubuntu 时,USB 闪存驱动器的平均传输速率从未超过 2MBps。

sync下一个明显的解决方案可能与安装驱动器时使用的安装选项有关。我检查了我的/etv/fstab文件,它只包含与我的硬盘驱动器相关的条目 - 列出了 SATA 和 USB 连接的驱动器。但是,我的闪存驱动器都没有列在那里。我用它udiskctl --mount -b /dev/sdXX来安装我的 USB 驱动器 - 或者nautiluts自动安装它们 - 我不知道如何检查它是否sync是一个安装选项。

我如何检查是否sync已启用,如果已启用,我如何禁用它Ubuntu 20.04

答案1

当我需要对外部设备进行大量写入操作时,我会使用 禁用该设备的写入缓存hdparm。以下是我操作的方法:

  1. 打开终端
  2. 使用以下命令确定设备名称fdisk
    sudo fdisk -l
    
  3. 禁用设备的写缓存:
    sudo hdparm -W 0 /dev/sdX
    
    笔记:确保sdX用适当的值替换。

笔记:

  • 此设置在重启后不再保留
  • 这可能会使机器在文件复制过程中出现“冻结”
  • 传输速度通常约为理论总线吞吐量的 70%(基于经验)
  • 有些人建议使用-K中的选项hdparm,但我没有看到这能提高写入吞吐量

答案2

什麼時候完成?

例如,当 Nautilus 告诉您传输完成时,这通常不是真的(特别是在驱动器已安装的情况下async),Nautilus 的“完成”提示和实际写入过程的结束之间存在显著差异。

系统监视器 gnome shell 扩展将很好地补充使用 Nautilus 进行复制,让您可以实时关注实际的写入过程;包括 USB 设备。

关于 fstab:

/etc/fstab文件通常只包含您希望在每次系统启动时自动安装的驱动器/分区。

由于您只是偶尔使用 USB 驱动器,因此通常您不希望它出现在您的 fstab 中。

关于sync

您对syncmount 选项的说法是正确的:它会使速度变得非常慢(我ext4在这方面只对文件系统有经验,我可以证明速度确实会变慢。)

安装:

我建议不要使用udiskctl文档)(因为我不太了解它)(而且因为找出它的参数对你来说并不容易)

相反,我建议使用mount命令(文档),您可以清楚地说明您的async选择。(但值得注意的是,异步挂载是mount的默认行为,因此通常不需要说明(只有当您想额外的当然)。)

作为准备,创建一个挂载点,例如:

sudo mkdir /mnt/mystuff
sudo chown YOURUSERNAME:YOURUSERNAME /mnt/mystuff

进而:

sudo mount -o async /dev/sdXX /mnt/mystuff

相关内容