有没有什么好用的复制文件的工具?

有没有什么好用的复制文件的工具?

复制对话框卡在还剩 0 秒的位置......

每当我尝试将大文件复制到我的 USB 闪存盘(任何格式)时,它总是在最后一刻停止。它在很久

我搜索了询问 Ubuntu对于类似的帖子和有很多,但没有一个能给出好的解决方案。

那么...有没有其他的复制工具万亿拷贝在 Windows 上?

或者我可以做些什么修复?

在此处输入图片描述

答案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(如果尚未安装)以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图形用户界面最多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。

相关内容