移动大量文件的最快方法?


8

我必须移动大约320,000个文件,80,000个文件夹(仅100 Gb)的数据。一些文件的大小> 1GB,但大多数文件的大小小于1kB。

我已经看过最快的文件复制方法,但是我不确定这些文件的实用性如何,我的问题不是纯粹的传输速度,而是Windows能够以多快的速度处理320,000个文件的IO。

您认为使用xcopy,robocopy,teracopy或fastcopy会带来速度优势吗?

我们花了很长时间(超过12个小时)才将它们复制一次(使用robocopy),而我讨厌不得不再次这样做。我该怎么做才能加快速度?

这些东西在USB 2.0外置驱动器上。

Answers:


9

robocopy之类的东西将是您最好的选择。首先,USB驱动器无法处理大量的IO。

我已经使用robocopy在USB驱动器中来回推送了数百万个小文件。这需要时间,但可以完成工作。


3

正如mrdenny所说,Robocopy最好,部分原因是它的鲁棒性。如果您确定要移动的文件是否干净,我可以提供的最佳建议是确保在移动文件时禁用防病毒软件。您确实不希望扫描所有这些文件的开销。


1

显然有比这里提到的所有方法更快的方法。更快,但灵活性更低:-) 如果将文件放在单独的分区上,则可以将整个分区复制到目标磁盘。

我不熟悉用于此工作的任何免费Windows工具(具有VSS支持的工具将是完美的),但是可以肯定的是,您可以从Ghost CD或Partition Magic CD引导,或引导Linux独立CD。在Linux中,您只是dd分区,或者ntfsclone恰好是NTFS分区。


0

如果您是我,则可以将外部硬盘驱动器更改为Firewire,其速度传输比USB2快得多。

我认为也许将文件打包到单个“ tar”中,然后再传输文件将节省一些时间。因为它减少了I / O时间,因为与1千个文件相比,您仅复制1个巨型文件,因此它消耗的资源也更少(在复制阶段)。或者,您可以将tar流直接传送到USB驱动器。


是的,我知道单个tar方法肯定会产生结果,但是不确定构建单个文件是否需要大量时间。
in.spite

Firewire不错,但eSATA也可以更快。
Chopper3

0

我发现复制大量文件的最有效方法是先将它们流式传输到ISO文件中,然后再复制ISO。这样,通过发出复制文件所需的数千个命令,磁盘就不必担心。

当然,这取决于您的目录结构。我很幸运地以4.7GB的间隔创建了一个新目录,因此它使创建VBScript自动化过程变得更加容易。


我不遵循你的逻辑。要创建ISO,需要将所有这些文件读取并写入ISO。然后读取ISO以提取文件,最后将它们写入目标位置。这比一次读写它们有效率吗?
约翰·加迪尼尔

VBSCript,C#或其他脚本语言中的任何示例代码?
Kiquenet 2011年

@JohnGardeniers Lewis押注,通过网络复制小文件所花费的时间比将它们放入ISO然后传输该文件所花费的时间要大得多。它确实取决于您的特定环境,但听起来似乎并不直观,但传输一个合并的文件而不是数千个小文件可能会更快。
太阳

0

如果先将源文件打包到单个存档(tar,或压缩为zip等)中,然后通过网络传输存档,然后在以下位置解压缩存档,则几乎可以肯定,传输顺序的整体性能会更好。目的地。

请不要忘记,当您通过网络传输档案时,与简单的SMB文件副本相比,使用ftp(或其他面向文件的传输协议)会更好。

使用上面的过程,我通常在多个地理上分开的数据中心(美国,欧洲和亚洲)之间转移大约60GB的应用程序目录(带有大约50,000-75,000个文件)。一次传输一个文件与通过FTP传输压缩存档之间的差异要快10到40倍。

Rsync在这里也可以成为您的朋友(就像在许多其他文件传输方案中一样)。

如果您愿意接受商业选择,那么基于UDP的二进制流解决方案可以将位推入多个UDP流中,那么这可能对您很有价值。看看http://www.filecatalyst.com/


0

另一种选择是使用内置跟踪器或启用DHT的Bittorrent。客户端会将所有文件分组在一起(使用2MB或更大(如果可用))。在接收端,当文件被写入硬盘驱动器时,您将收到大块的文件。这有助于将您的小文件合并为2MB的块,您可以获得更好的传输速率,

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.