end*_*ias 6 sync fstab udisks udev copy
我在旧的 Dell Optiplex 760 机器上运行 Ubuntu 20.04,将文件复制到 USB 闪存驱动器时的传输速度比应有的速度慢得多,此外,在传输程序结束时(我已经尝试复制文件with nautilus, cp, dd, rsync) 即使在整个文件传输到 USB 驱动器后也会挂起 - 这种挂起使得脚本文件传输变得困难,因为在传输程序返回 0 之前无法继续执行。我检查了文件大小,甚至做了一个md5sum校验和检查文件的完整性,发现文件已被正确复制且完好无损,但在 100% 的文件传输后,传输程序仍会挂起约 5 分钟。
我认为问题可能是设备被识别为 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: Bus=06 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 59 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P:供应商=0781 ProdID=5567 Rev=01.26 S:制造商=SanDisk S:产品=克鲁泽刀片 S:序列号=200530450005728000EF C:#Ifs= 1 Cfg#= 1 Atr=80 MxPwr=200mA I: If#=0x0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
这表明使用的 USB 版本没有任何问题。我检查了周围,其他人发现了一些与以字节为单位的设置vm.dirty_bytes和vm.dirty_background_bytes配置有关的解决方法。这并没有提高传输速度,但传输程序现在允许更小的缓冲区大小和 100% 停止后的挥之不去。sysctl$((15*1024*1024))
在同一台机器上运行 Windows 7 时 - 使用相同的闪存驱动器,我可以以 7-8MBps 的平均速度持续传输。然而,当我重新启动并切换回 Ubuntu 时,USB 闪存驱动器的平均传输速率永远不会超过 2MBps。
下一个明显的解决方案可能与sync安装驱动器时使用的安装选项有关。我检查了我的/etv/fstab文件,它只有与我的 HDD 相关的条目 - 列出了 SATA 和 USB 连接的驱动器。但是,我的闪存驱动器都没有列在那里。我过去常常udiskctl --mount -b /dev/sdXX挂载我的 USB 驱动器 - 或者nautiluts为我自动挂载它们 - 并且不知道如何检查是否sync是挂载选项。
如何检查是否sync已启用,如果是,如何禁用它Ubuntu 20.04?
当我要对外部设备进行大量写入时,我会使用hdparm. 这是我的方法:
fdisk:
sudo fdisk -l
Run Code Online (Sandbox Code Playgroud)
sudo hdparm -W 0 /dev/sdX
Run Code Online (Sandbox Code Playgroud)
注意:一定要替换成sdX合适的值。笔记:
-K选项hdparm,但我没有看到这会提高写入吞吐量什么时候完成?
例如,当 Nautilus 告诉您传输完成时,通常情况并非如此(尤其是在驱动器已安装的情况下async),Nautilus“已完成”提示与实际写入过程结束之间存在显着差异。
系统监视器 gnome shell 扩展将很好地补充 Nautilus 的复制,让您实时关注实际的写入过程;包括 USB 设备。
关于 fstab:
该/etc/fstab文件通常只包含您希望在每次系统启动时自动安装的驱动器/分区。
由于您只是偶尔使用 USB 驱动器,通常您不希望在 fstab 中使用它。
关于sync:
您对sync挂载选项的看法是正确的:它令人难以置信地减慢了速度(ext4在这方面,我只有文件系统的经验,我可以证明减慢速度。)
安装:
我建议不要使用udiskctl(文档)(因为我不太了解它)(也因为找出它的论点对您来说并非微不足道)
相反,我建议使用mount命令(文档),您可以清楚地说明您的async选择。(尽管值得注意的是 async mount 是mount默认行为,所以通常不需要说明(仅当您想更加确定时)。
作为准备,创建一个挂载点,例如:
sudo mkdir /mnt/mystuff
sudo chown YOURUSERNAME:YOURUSERNAME /mnt/mystuff
Run Code Online (Sandbox Code Playgroud)
进而:
sudo mount -o async /dev/sdXX /mnt/mystuff
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
853 次 |
| 最近记录: |