Gnome、nautilus 将文件复制到 USB 停止在 100% 或接近

45 linux usb nautilus clipboard

我以前也遇到过类似的问题,但我不记得我是如何解决的。

当我尝试使用 FAT 将某些内容复制到 USB 记忆棒时,它会在接近尾声时停止,有时是 100%。当然,当我将记忆棒转移到其他地方时,它不包含完整的文件。(文件是一部电影!)

我试图用 mount -o flush 挂载设备,但我遇到了同样的问题。

另外,我确实用新的 FAT 分区格式化了 U 盘...

知道我感冒了吗?

ps 我相信它与操作系统无关,这是 Debian,我相信从 SSD 驱动器应对不会让它卡住。

dat*_*ess 59

发生这种情况的原因是程序说“写这个数据”,Linux内核将它复制到一个内存缓冲区中,该缓冲区排队等待进入磁盘,然后说“好的,完成”。所以程序认为它已经复制了所有内容。然后程序关闭文件,但内核突然让它等待缓冲区被推送到磁盘。

因此,不幸的是,该程序无法告诉您刷新缓冲区需要多长时间,因为它不知道。

如果您想尝试一些高级用户的技巧,您可以通过将内核参数设置为vm.dirty_bytes类似15000000(15 MB)来减小 Linux 使用的缓冲区的大小。这意味着应用程序在其实际进度之前不能获得超过 15MB。(您可以随时更改内核参数,sudo sysctl vm.dirty_bytes=15000000但让它们在重新启动后保持不变需要更改配置文件,例如/etc/sysctl.conf可能特定于您的发行版。)

一个副作用是,使用此设置,您的计算机可能具有较低的数据写入吞吐量,但总的来说,我发现看到一个程序在写入大量数据时运行了很长时间而不是混淆了程序似乎完成了它的工作,但系统在内核执行实际工作时严重滞后。dirty_bytes当可用内存不足并运行突然写入大量数据的程序时,设置为一个相当小的值还有助于防止系统变得无响应。

但是,不要设置太小!我使用 15MB 作为粗略估计内核可以在 1/4 秒或更短的时间内将缓冲区刷新到普通硬盘驱动器。它使我的系统不会感到“滞后”。

  • Linux noob 在这里,有人可以发布如何更改 <dirty_bytes> 值吗? (2认同)
  • 这类似于 https://unix.stackexchange.com/questions/107703/why-is-my-pc-freezing-while-im-copying-a-file-to-a-pendrive/107722#107722 ---应该已经修复了,但相信我,事实并非如此。我不得不将它添加到 Ubuntu 18.04 以停止表现有趣...... (2认同)
  • 也适用于 Fedora 30。即使在现代 Linux 发行版中,我也很惊讶地看到这种愚蠢的行为。 (2认同)

小智 5

虽然迟到了,但我用来将大文件复制到 USB 记忆棒的解决方法是rsync.

我总是成功使用的基本语法如下:

rsync -avh /home/user/Documents /media/user/myusbstick
Run Code Online (Sandbox Code Playgroud)

警告:如果您想复制整个文档文件夹,请使用语法即可。但如果您只想复制文件而不复制文件夹,则必须添加斜杠。像这样:

rsync -avh /home/user/Documents/ /media/user/myusbstick
Run Code Online (Sandbox Code Playgroud)

当然如果你想复制文件:

rsync -avh /home/user/Documents/file1 /media/user/myusbstick
Run Code Online (Sandbox Code Playgroud)

对于多个文件

rsync -avh /home/user/Documents/file1 /home/user/Documents/file2 /media/user/myusbstick
Run Code Online (Sandbox Code Playgroud)

该语法适用于您要复制的任何文件夹/文件。

我知道这不是真正的解决方案,但这是避免恼人问题的一种简单而安全的方法。

  • 欢迎来到该网站,并感谢您的贡献。您可能需要建议使用“--progress”选项来大致相当于图形工具上的进度条。 (3认同)