并行文件复制

我有一个需要在Linux系统上复制的文件列表 – 每个文件的大小在10到100GB之间。

我只想复制到本地文件系统。 有没有办法做到这一点并行 – 多个进程负责复制文件 – 以一种简单的方式?

我可以轻松地编写一个multithreading程序来做到这一点,但我很想知道是否有一个低级别的Linux方法来做到这一点。

如果你的系统没有被丢弃(例如,文件可能在caching中),那么GNU Parallel http://www.gnu.org/software/parallel/可能适用于你:

find . -print0 | parallel -0 cp {} destdir 

这将运行9个并发的cp。

Pro:阅读很简单。

Con:GNU并行在大多数系统上不是标准的,所以你可能需要安装它。

观看介绍video了解更多信息: http : //www.youtube.com/watch?v = OpaiGYxkSuQ

有一个非常简单的原因,没有低级别的机制:这样做会破坏您的系统性能。 随着拼盘驱动器的每个写将争夺头的位置,导致大量的I / O等待。 使用固态硬盘,这将最终导致一个或多个系统总线饱和,从而导致其他问题。

如前所述,这是一个可怕的想法。 但我相信每个人都应该能够实施自己的可怕计划,所以…

for FILE in *;do cp $FILE <destination> &;done

星号可以用你的文件的正则expression式replace,或者如果你把它们全部放在文本文件中,可以用$(cat <listfile>) 。 &符在后台启动一个命令,所以循环将继续,产生更多的副本。

如前所述,这将完全消灭你的IO。 所以…我真的不会推荐这样做。

– 克里斯托弗·卡雷尔

唯一的答案,不会垃圾你的机器的响应不完全是一个“副本”,但它是非常快的。 如果你不会在新的或旧的位置编辑文件,那么一个硬链接就好像是一个副本,而且(只)如果你在同一个文件系统上,它们被创build得非常非常快。

看看cp -l ,看看它是否适合你。

这是一个分布式/并行和分散的文件复制工具,将文件分块并复制所有的块并行。 如果你有一个支持多个stream的SSD或者多个磁头的设置,它可能只会帮助你。

https://github.com/hpc/dcp