所以在这个故事在 GNU coreutils ML 上,有人使用 cp 复制了 4.3 亿个文件,需要保留硬链接,并且只是勉强10天后就完成了。
最大的问题是,为了保留硬链接,cp 必须保留已复制文件的哈希表,该哈希表在最后占用了 17GB 内存,并且导致系统在交换时崩溃。
是否有一些实用程序可以更好地处理该任务?
答案1
如果tar
或rsync
解决方案失败并且该目录是文件系统的根目录,您可以使用旧的dump/restore
备份实用程序(是的,仍然有效)。
dump
无需通过内核文件系统接口即可复制文件系统特征,因此速度相当快。
不方便的是dump
复制时对源文件系统所做的修改是敏感的。因此,最好在开始复制之前卸载文件系统或重新挂载它以只读方式或停止任何可以访问它的应用程序。如果您尊重该条件,则副本是可靠的。
根据文件系统类型,dump
命令名称可以更改,例如,您可以使用xfsdump
XFS 的命令名称。
以下命令与示例类似tar
:
dump 0uf - /dev/sdaX | (cd /target && restore rf -)
数字为增量复制级别;0
表示进行完整复制。
答案2
我记得 rsync 给我带来了一些问题;我不确定这些是硬链接还是设备文件还是其他什么。从那时起我就用
tar -cv $(ls) | ( cd /mnt; tar xv )
这将从 复制所有文件。到/mnt。我的整个故事可以在这里找到:http://www.linuxintro.org/wiki/Cloning#file-by-file_copy_2