有没有好的文件复制工具?


8

复制对话停留在距离0秒的地方...

每当我尝试将大文件复制到USB随身碟(任何格式)时,它总是在最后一刻停止。它经过很长时间才完成

我在Ask Ubuntu上搜索了类似的帖子,并获得了很多,但没有一个有很好的解决方案。

因此... Windows上是否有其他替代工具,如Teracopy

还是我可以做任何修复?

在此处输入图片说明


也请让我知道什么样的文件,我应该上传以供参考
西弗勒斯企鹅

2
不太确定,但我强烈认为您的问题与USB写缓存有关。搜索有关如何禁用该功能的帖子。整个复制过程看起来会慢一些,但是当看起来完成时应该真正完成。
字节指挥官

@ByteCommander慢一点,您是指实际速度吗?
西弗勒斯·图克斯

2
我不太熟悉该主题,但是缓存只是将要写入USB设备的数据保留在内存中,然后在认为总线或设备不那么忙碌或者可以优化方式时将其稍后写入将数据块保存在一起...这不会提高实际的物理写入速度(速度),对您而言它看起来更快,因为一旦所有要写入的数据都在高速缓存中,复制过程就会报告完成。但是仍然需要更多时间将缓存写入设备。无论如何,您都无法在写入缓存之前立即将其拔下
Byte Commander

是的,实际的复制速度将是相同的(可能稍慢一些,因为缓冲区使不太可能有片刻什么都没有写到磁盘上,但是在轻负载的系统上没有那么多),但是出现了进度对话框会更准确。
hobbs's

Answers:


6

您不必为此担心太多。
也许您的USB笔式驱动器的质量较低。
关于时间的对话框输出具有误导性。

其他复制工具可能具有不同的输出行为,
但不会提高USB驱动器的写入速度。
最重要的是,复制操作最终成功。

您可以做的是优化磁盘的输入/输出调度程序。

安装gksu(如果尚未安装)以geditroot用户身份编辑文件:

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是一个GUIdiff最多可以处理5棵树。它显示了一个主窗口,其中包含树之间不同的文件列表,并带有彩色正方形指示版本的相对年龄。菜单允许您在另一个窗口中显示任何两个版本之间的差异。另一个菜单允许您将文件和文件夹从一棵树复制到另一棵树。

简介:最重要的是USB磁盘的质量及其写入速度功能!


7

之所以看到复制正在发生,是因为写入USB驱动器是异步的

当您复制文件时,它实际上会将其复制到USB驱动器的缓冲区中,该缓冲区位于计算机的RAM中。复制的第一部分非常快,因为它只是进入缓冲区。数据已刷新从缓冲区到USB驱动器的速度要慢得多。缓冲区填满后,它必须等待一些数据刷新到磁盘,然后才能将其放入缓冲区中,因此副本的速度会减慢,从而有效地降低了USB驱动器的速度。将所有文件放入缓冲区后,似乎文件已被复制。但是,并非所有数据都已从缓冲区刷新到USB磁盘本身。一些复制程序只是返回并让冲洗在后台进行。有些人会等到所有数据都被刷新后,这就是为什么它将在一段时间内保持100%的状态的原因。

您可以将磁盘切换为同步模式,这意味着无需使用缓冲区就可以将所有数据立即写入USB驱动器。这会给人以更平滑的数据传输的印象,但实际上可能最终会导致速度的整体下降。

如果从命令行手动安装磁盘,则可以添加-o sync

如果使用fstab挂载它,则可以添加该sync选项。

如果您在GUI中访问Ubuntu时依赖于Ubuntu来安装它,则可以在安装后从命令行修改安装选项:

sudo mount -o remount -o sync /media/yourname/diskname

2
这是的答案。
kos

2

问题可能是在将文件完全写入目标驱动器之前,已将其完全读取并存储在内存中。

这并不意味着要确切地回答问题,但是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


0
dd if=INPUT_FILE_PATH of=OUTPUT_FILE_PATH bs=$(( 64 * 1024 * 1024 )) oflag=sync

这将从您的if文件中读取并以of64MiB块的形式写入文件,然后等到每个块被写出后再开始下一个。您正在使用的实用程序很可能只是将文件读入内存,然后将其发送到磁盘(并且不会告诉您一次执行多少字节)。但是,写缓存可以位于usb加密狗本身中。...因此,您获得的每秒60MiB的速度是usb连接到加密狗内部缓存的传输速率。除非它是USB3加密狗,否则不太可能。USB2的吞吐量不足以每秒处理60MiB。


0

不需要以上所有。当传输显示向左显示0%时,只需打开一个终端窗口,然后sync在手册页中键入sync命令即可刷新文件系统缓冲区,但是当然它只会刷新您有权访问的缓冲区。如果要全部冲洗sudo sync

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.