答案1
这不仅仅发生在你身上 :-) 问题在于 Linux 的工作方式以及 Ubuntu 为你提供的默认设置。文件复制工具正在读取源文件的一部分,然后将其写入目标,并在每次完成写入时更新进度条。但是,为了加快速度,Linux 会获取要写入的数据并立即通知程序已写入,同时在后台执行工作。Linux 允许为此目的使用一定比例的系统内存,而如今的内存大小通常大于整个文件,因此程序可能会认为它已经写入了所有内容,而实际上复制才刚刚开始。但是,当程序尝试关闭文件时,Linux 会让它等待操作完成。(否则程序可能会尝试对写入一半的文件执行某些操作。)
当将大文件写入速度较慢的设备(如 USB)时,最常看到这种情况,但它也会在其他情况下出现,并使其看起来像是计算机被锁定了。
我“修复”这个问题的方法是告诉 Linux 缓冲更少的数据。这样,应用程序就不会比实际进度快太多。这涉及更改内核参数,这是高级用户应该小心处理的事情。您需要将“ ”添加vm.dirty_bytes=15000000
到/etc/sysctl.conf
:
echo vm.dirty_bytes=15000000 | sudo tee -a /etc/sysctl.conf
然后重新启动。
这会将缓冲区大小设置为 15 MB,这是我选择的数字,大致相当于“半秒钟写入快速 USB2 设备”。您可以根据需要选择更大(或更小,但可能不会太小)的值。
此设置的缺点是高吞吐量操作可能会运行得更慢,例如同时运行大量文件复制。它还可能导致笔记本电脑驱动器更频繁地退出睡眠模式。
答案2
我在 Ubuntu 19.10 上遇到了同样的问题,使用的是 16GB Kingston G4 USB 3.0 闪存盘。文件 gnome 应用程序永远卡在进度的末尾,你无法弹出 USB。我正在复制 1.2 GB 大小的电影文件。
解决方案就是将 U 盘格式化为 NTFS 文件系统,而不是 FAT。当我这样做时,一切都正常。
答案3
我遇到了同样的问题,我使用dd
一个非常小的bs
值的命令解决了这个问题,这样300
可以给出大约 5MB/s 的传输速率。
bs 值取决于您的 USB 驱动器的速度,因此您需要进行一些测试。考虑使用它iotop
来监控 IO。
例子:
dd if=source of=/usb/destination bs=300 status=progress