答案1
你看到复制过程以这种方式发生的原因是,写入 USB 驱动器异步。
当你复制文件时,它实际上会将其复制到 USB 驱动器的缓冲区中,该缓冲区位于计算机的 RAM 中。复制的第一部分非常快,因为它只是进入缓冲区。数据是酡从缓冲区到 USB 驱动器的速度要慢得多。一旦缓冲区填满,它必须等待部分数据刷新到磁盘,然后才能将更多数据放入缓冲区,因此复制速度会减慢,实际上与 USB 驱动器的速度相同。一旦所有文件都放入缓冲区,文件似乎已被复制。但是,并非所有数据都已从缓冲区刷新到 USB 磁盘本身。一些复制程序只是返回并让刷新在后台继续。有些会等到所有数据都刷新完毕,这就是为什么它会在一段时间内保持 100% 的速度。
您可以将磁盘切换到同步模式,这意味着所有数据都会立即写入 USB 驱动器,而无需使用缓冲区。这会给人一种数据传输更顺畅的印象,但实际上可能会导致整体速度降低。
如果您从命令行手动安装磁盘,则可以添加-o sync
。
如果您使用 fstab 挂载它,则可以添加该sync
选项。
如果您依赖 Ubuntu 在 GUI 中访问它时为您安装它,您可以在安装后从命令行修改安装选项:
sudo mount -o remount -o sync /media/yourname/diskname
答案2
您不必太担心。
也许您的 USB 闪存盘“质量较差”。
有关时间的对话框输出具有误导性。
其他复制工具可能有不同的输出行为,
但它们不会提高 USB 驱动器的写入速度。
最重要的是,复制动作最终成功了。
您可以做的是优化磁盘的输入/输出调度程序。
安装gksu
(如果尚未安装)以gedit
root 身份编辑文件:
sudo apt-get install gksu
现在针对各种磁盘类型优化所有正在运行的进程的优先级:
gksudo gedit /etc/udev/rules.d/60-schedulers.rules
将以下行粘贴到此空文件中,然后保存文件:
# set cfq scheduler for rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"
# set deadline scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"
所做的更改将在操作系统重新启动后生效。
另外...Ubuntu 存储库中还提供了备用复制解决方案:
sudo apt-get install dirdiff
现在从终端启动该工具来比较或复制文件和文件夹:
dirdiff
dirdiff
是图形用户界面最多diff
可以处理 5 棵树。它显示一个主窗口,其中列出了树之间不同的文件,并用彩色方块表示版本的相对年龄。菜单允许您在另一个窗口中显示任何两个版本之间的差异。另一个菜单允许您将文件和文件夹从一棵树复制到另一棵树。
摘要:最相关的是 USB 磁盘的质量及其写入速度能力!
答案3
问题很可能是在文件完全写入目标驱动器之前就被完全读取并存储在内存中。
这并不意味着要准确回答这个问题,但是pv
对于大文件,可以从命令行使用一种解决方法:
sudo add-apt-repository universe && sudo apt-get update && sudo apt-get install pv
每当需要复制大文件时:
pv /path/to/big_file >/media/username/usb/big_file
需要注意的是,在管道中使用时,这会遭受类似的不必要的缓冲问题;如果是这种情况,解决方法是将传输速率限制为略高于目标驱动器的写入速度:
[...] | pv -L 10M >/media/username/usb/big_file # Limits the transfer rate to 10 MB/s
答案4
dd if=INPUT_FILE_PATH of=OUTPUT_FILE_PATH bs=$(( 64 * 1024 * 1024 )) oflag=sync
这将从您的if
文件中读取数据并以 64MiB 的块写入of
文件,并等到每个块都写出后再开始下一个块。您使用的实用程序很可能只是将文件读入内存,然后将其发送到磁盘(并且无法确定它一次执行多少字节)。但是写入缓存可以位于 USB 加密狗本身中……因此,您获得的每秒 60MiB 的速度是通过 USB 连接到加密狗内部缓存的传输速率。但除非它是 USB3 加密狗,否则这不太可能。USB2 的吞吐量不足以处理每秒 60MiB。