如何快速复制900,000个文件?


9

我需要将包括900,000个总计约30 GB的微小文件的数据复制到Windows计算机。但是,它需要能够在一个半小时内完成复制和设置,而且由于文件数量惊人,复制USB硬盘可能需要5个多小时。是否有更好/更快的方式来处理此问题,例如进行某种块复制?谢谢


8
对于将单个非SSD磁盘中的任何基于文件的副本来说,这将是一个非常积极的目标。仅枚举所有文件并处理许多文件的文件系统条目和元数据需要花费大量时间。
afrazier 2011年

5
您是否可以仅卸下硬盘驱动器并将其放置在目的地?这将是最快的速度,通过主板背板传输。
iTom 2011年


想看到这个问题的博客?通过在Meta上回答或投票来提供帮助。
塔玛拉·威斯曼

Answers:


7

对于大量文件,最好创建tar存档,以便减少要处理的文件。如果您使用的是USB 2.0外部硬盘驱动器,则应该使用USB 3.0,eSATA或快速局域网。

您的源操作系统是什么?如果两个操作系统都是Linux,则可以通过tar,gzip和ssh将文件通过管道传输到目标计算机。您也可以在Windows上安装cygwin,以获得Windows的这种功能。

更新:
使用Tar和SSH改善SCP速度 ”一文描述了通过ssh发送tar内容所需的命令。


tar仍然会一一读取所有文件。
Tomas Andrle 2011年

是的,但是您只能这样做一次,并且不会因处理单个文件而延迟其他命令(如scp)。如果文件可以保存在目标计算机上的tar归档中,那么您还可以节省编写一个文件而不是很多文件的时间。
dabest1 2011年

我认为USB连接是瓶颈。因此,按照@arcyqwerty的建议拍摄驱动器的原始图像似乎对我来说是最好的解决方案。我很想知道一些实际结果,也许我完全错了!
Tomas Andrle 2011年

1
@TomA-以我的经验,处理许多小文件时,硬盘驱动器是瓶颈。读取的每个文件都需要先对分配位图进行搜索,然后再进行一次对实际文件内容的搜索。结果,硬盘驱动器将大部分时间都花在寻找硬盘上,而实际读取文件的时间却很少。
假名称

2
例如,对于1K文件,我的千兆局域网的速度约为1-5 MBps。对于大文件(每个千兆字节),我的速度约为80-90 MBps。这都是关于顺序读取的。
假名称

8

如果可以从USB接口中将硬盘驱动器卸下并插入SATA / ATA,则可以将其安装在目标计算机中。正如其他人所指出的,您将获得更快的传输速度。对于复制,假设您使用Windows,我将做一个简单的ROBOCOPY。尽管还有其他选择,但它的速度与您真正希望的一样快。

ROBOCOPY /E /B /MT 'source' 'destination'

虽然我会尽量避免压缩所有这些文件,但压缩和移动的时间很有可能超过仅移动文件的时间。

*为robocopy添加了/ MT选项。在多线程环境中,它可以极大地加快传输速度。


/MT帮助当地的单一磁盘传输,或造成大规模的磁盘颠簸?在服务器之间复制大型共享文件很常见,但是由于通过网络进行访问,以及由于RAID阵列提高了IOPS,它们通常都增加了延迟。
afrazier 2011年

我不能在这方面发表过多评论。我每天晚上都使用robocopy备份我的所有VS项目,尽管它仅值10GB。由于不会复制已存在的文件,因此只需要一点时间。我在几个月前确实找到了这些Robocopy基准测试:demartek.com/Reports_Free/…–
Lee Harrison

以我的经验,如果驱动器机箱中的USB到SATA适配器支持本机命令队列,那么/ MT开关将大大提高性能。
longneck 2011年

6

您可以尝试拍摄整个文件夹/驱动器的图像

在Linux系统上,您可以dd用来获取文件系统的原始副本并将其复制为单个大文件。

要将映像提取到Windows,您可能需要安装cygwin或能够处理dd映像的程序。


那是票。
Tomas Andrle 2011年

3

将源文件安装在要设置的计算机中的磁盘上,然后将磁盘转移到磁盘。忘记USB。甚至通过有线传输(将机器联网)也要比USB更快(假设USB 2.0和1Gbps NIC)。如果这是重复发生的事件,请查看复制。


3

rsyncz选项一起使用。

-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
rsync不会为本地传输(或通过LAN压缩)压缩。而且,这没有任何好处,因为真正的问题是读取文件而不是通过有线发送文件所花费的时间(因为读取的每个文件最少需要两次查找操作)。
假名称

@FakeName +1您是对的,阅读后我明白了。我已经更新了答案。
2011年

1

您正在快速接近硬盘的限制。实际上,使用当前的商品驱动器,不可能通过每个文件的复制操作来节省传输时间。

假设每个文件需要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上做到这一点。

你想做什么?


TeX在为其他人工作吗?它似乎没有呈现给我。
假名称

0

尝试使用7zip将文件仅存档到一个文件中。如果可能,请使用与笔记本电脑临时连接的WLAN。


1
甚至更好的是,直接以太网连接,最好是gig-e
Journeyman Geek

0

与@arcyqwery的答案相关,您可以压缩它,同时将其转换为一个大文件。这样可以加快处理过程。

使用诸如TeraCopy之类的程序可能也值得,因为它通常比默认的Windows复制性能快。您应该在类似情况下进行测试以进行检查。


0

我有一个类似的情况。我关闭了防病毒功能,复制速度从3MB / s更改为12MB / s。

在此处输入图片说明

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.