我需要将包括900,000个总计约30 GB的微小文件的数据复制到Windows计算机。但是,它需要能够在一个半小时内完成复制和设置,而且由于文件数量惊人,复制USB硬盘可能需要5个多小时。是否有更好/更快的方式来处理此问题,例如进行某种块复制?谢谢
我需要将包括900,000个总计约30 GB的微小文件的数据复制到Windows计算机。但是,它需要能够在一个半小时内完成复制和设置,而且由于文件数量惊人,复制USB硬盘可能需要5个多小时。是否有更好/更快的方式来处理此问题,例如进行某种块复制?谢谢
Answers:
对于大量文件,最好创建tar存档,以便减少要处理的文件。如果您使用的是USB 2.0外部硬盘驱动器,则应该使用USB 3.0,eSATA或快速局域网。
您的源操作系统是什么?如果两个操作系统都是Linux,则可以通过tar,gzip和ssh将文件通过管道传输到目标计算机。您也可以在Windows上安装cygwin,以获得Windows的这种功能。
更新:
“ 使用Tar和SSH改善SCP速度 ”一文描述了通过ssh发送tar内容所需的命令。
如果可以从USB接口中将硬盘驱动器卸下并插入SATA / ATA,则可以将其安装在目标计算机中。正如其他人所指出的,您将获得更快的传输速度。对于复制,假设您使用Windows,我将做一个简单的ROBOCOPY。尽管还有其他选择,但它的速度与您真正希望的一样快。
ROBOCOPY /E /B /MT 'source' 'destination'
虽然我会尽量避免压缩所有这些文件,但压缩和移动的时间很有可能超过仅移动文件的时间。
*为robocopy添加了/ MT选项。在多线程环境中,它可以极大地加快传输速度。
/MT
帮助当地的单一磁盘传输,或造成大规模的磁盘颠簸?在服务器之间复制大型共享文件很常见,但是由于通过网络进行访问,以及由于RAID阵列提高了IOPS,它们通常都增加了延迟。
您可以尝试拍摄整个文件夹/驱动器的图像
在Linux系统上,您可以dd
用来获取文件系统的原始副本并将其复制为单个大文件。
要将映像提取到Windows,您可能需要安装cygwin或能够处理dd
映像的程序。
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发表评论。
您正在快速接近硬盘的限制。实际上,使用当前的商品驱动器,不可能通过每个文件的复制操作来节省传输时间。
假设每个文件需要1个HD寻道,并且寻道时间为7毫秒(这有点理想化,实际上,每个文件将需要2个寻道,除非将卷位图缓存在ram中),充其量您最多可以管理142个文件/秒( \ $ \ frac {1000} {7} = 142.8 ... \ $)。
使用OP规范(30 GB,900,000个文件),每个文件〜33K(\ $ \ frac {30,000,000k} {900,000} =〜33.3 ... \ $。33KB * 142 = 4.68 MBps。
以5 MBps的速度传输30 GB 的最短时间约为1小时40分钟(\ $ \ frac {30,000} {5} = = 6,000 \ $秒。\ $ \ frac {6,000} {60} = 100 \ $分钟或1:40小时)
因此,不可能达到高于〜5 MBPS的速度,而这是理想的驱动器(更少的查找操作。这是每个文件一个查找。实际上,是两个)。您完全受到磁盘性能的限制。
获得更好性能的唯一方法是依次复制整个文件系统和分区。dd
可以在linux上做到这一点。
你想做什么?