您不想使用 dd。那是为了处理 1 个文件或流,而不是在整个文件系统上。
rsync 旨在做你想做的事,但正如之前的海报所说,正如我的测试所示,它不是最快的。那是因为它是为了做这样的事情:“好的,我正在查看文件 A。文件 A 是否在目的地?如果是,它是更新的、旧的还是相同的?” 等等。 rsync 有点复杂,因为它意味着要运行不止一次......正如名字所说,它用于同步两个位置。
为了做您想做的事情,我发现 tar 副本快速、简单且可靠。Tar 知道硬链接。Tar 了解设备。Tar 可以处理您在文件系统中遇到的几乎所有情况(除了非常长的路径,而且,如果您不使用 Gnu tar,您可能需要小心将 / 放在路径名的开头)。
无论如何,在过去的 20 年里,我通过这样做取得了 99.98% 的成功:
cd /我的/源;tar cf - 子目录 | (cd /destination/path; tar xf -)
...您要复制的子目录将显示在 /destination/path 中。
如果您想查看您的进度,您可以在该字符串的后半部分使用“xvf”而不是“xf”。
...我 0.02% 的失败来自非常长的文件路径... :-(
Tar 不保证文件完整性。也就是说,只要您没有看到任何错误消息,我就发现它非常可靠。它将正确保留权限和所有权。