![如何快速复制90万个文件?](https://linux22.com/image/1297748/%E5%A6%82%E4%BD%95%E5%BF%AB%E9%80%9F%E5%A4%8D%E5%88%B690%E4%B8%87%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我需要将一些数据复制到 Windows 计算机,这些数据包括 900,000 个小文件,总计约 30 GB。但是,需要能够在一个半小时内完成复制和设置,而从 USB 硬盘复制可能需要 5 个小时以上,主要是因为文件数量太多。有没有更好/更快的方法来处理这个问题,比如进行某种块复制?谢谢
答案1
如果文件数量很多,最好创建 tar 存档,这样处理的文件就少了。如果您使用的是 USB 2.0 外部硬盘,则应考虑使用 USB 3.0、eSATA 或使用快速本地网络。
您的源操作系统是什么?如果您的两个操作系统都是 Linux,则可以通过 tar、gzip 和 ssh 将文件传输到目标计算机。您可以在 Windows 上安装 cygwin,以便在 Windows 上也能获得此类功能。
更新:
“使用 Tar 和 SSH 提高 SCP 速度“帖子描述了通过 ssh 发送 tar 内容所需的命令。
答案2
如果硬盘可以从 USB 接口移除并连接到 SATA/ATA,我会将其安装在目标计算机上。正如其他人所说,您将获得更快的传输速度。对于复制,假设您使用的是 Windows,我会执行简单的 ROBOCOPY。它的速度几乎是您真正希望的一样快,尽管还有其他选择。
ROBOCOPY /E /B /MT 'source' 'destination'
我会尽量避免压缩所有这些文件,因为压缩和移动的时间很可能会超过简单移动文件的时间。
*为 robocopy 添加了 /MT 选项。当您处于多线程环境中时,它可以大大加快传输速度。
答案3
您可以尝试拍摄整个文件夹/驱动器的图像
在 Linux 系统上,您可以使用dd
获取文件系统的原始副本并将其复制为单个大文件。
要将图像提取到 Windows,您可能需要安装 cygwin 或能够处理dd
图像的程序。
答案4
rsync
与选项一起使用z
。
-z, --compress compress file data during the transfer
--compress-level=NUM explicitly set compression level
--skip-compress=LIST skip compressing files with suffix in LIST
这将提高网络传输速度。因此,对于你的情况来说,这很可能没什么用。
读了更多内容后,我意识到,在将数据从一个本地硬盘复制到另一个本地硬盘时,我们不应该使用“-z”标志,这会增加开销。感谢@FakeName 的评论。