cp -a的更快替代品


9

对于将/ home轻松转移到另一个磁盘,我cp -a认为这是一种极其缓慢的方法。应该知道一种更有效的方法来完成任务。我已将/ home挂载为逻辑卷,但是目标磁盘不是LVM系统


4
如果cp很慢,其他方法也会很慢。除非不是面向文件的复制
雏菊,

尝试诊断您的瓶颈,这取决于您的特定设置。您可能要尝试使用noatimemount选项以减少不必要的写入,特别是对源文件系统的写入。
Elias Torres Arroyo 2013年

Answers:


16

尝试tarpaxcpio,与一些缓冲。

(cd /home && bsdtar cf - .) |
  pv -trab -B 500M |
  (cd /dest && bsdtar xpSf -)

我建议bsdtar不要这样做,tar因为至少在某些Linux发行版中tar是GNU tar,与bsdtar(from libarchive)相反,它不处理保留扩展属性或ACL或linux属性。

pv最多可缓冲500M的数据,因此可以更好地适应两个文件系统上读写速度的波动(尽管实际上,您的磁盘可能会慢一些,而另一个磁盘和OS的回写机制会像好,这样可能不会有太大的不同)。较旧的版本pv不支持-a(用于平均速度报告),您可以pv -B 200M在那里单独使用。

在任何情况下,它们都不会受到的限制cp,即按顺序进行读取写入。在这里,我们有两个tar同时工作,因此一个可以读取一个FS,而另一个忙于等待另一个FS完成写入。

对于ext4,如果要复制到至少与源大小一样大的分区上,请参见clone2fs,其工作方式类似于ntfsclone,即仅按顺序复制分配的块,因此轮转存储可能将是最有效的。

partclone将其推广到一些不同的文件系统。

现在,克隆文件系统时要考虑一些注意事项。

克隆将复制所有目录,文件及其内容...以及其他所有内容。现在,其他所有内容因文件系统而异。即使仅考虑传统Unix文件系统的共同特征,我们也必须考虑:

  • 链接:符号链接和硬链接。有时,我们必须考虑如何处理绝对符号链接或指向要克隆的文件系统/目录之外的符号链接
  • 上次修改,访问和更改时间:使用文件系统API(cp,tar,rsync ...)只能复制前两个
  • 稀疏:您有2TB稀疏文件,这是一个VM磁盘映像,仅占用3GB磁盘空间,其余的稀疏文件,如果进行天真复制,则会填满目标驱动器。

然后,如果考虑使用ext4大多数Linux文件系统,则必须考虑:

  • ACL和其他扩展属性(如用于的属性SELinux
  • Linux属性,如不可变或仅附加标志

并非所有的工具支持所有这些,或当他们这样做,您必须启用它明确地像--sparse--acls...选项rsynctar...和复制到不同的文件系统时,你必须考虑,他们没有的情况下支持相同的功能集。

您可能还需要考虑文件系统本身的属性,例如UUID,为根保留的空间,fsck频率,日志记录行为,目录格式...

然后是更复杂的文件系统,您无法通过复制文件来真正复制数据。例如,考虑一下zfsbtrfs何时可以拍摄子卷的快照并将其分支……...它们将具有自己的专用工具来复制数据。

如果要确保复制所有内容,则块设备(或在可能的情况下至少分配的块)的逐字节复制通常是最安全的。但是请注意UUID冲突问题,这意味着您正在复制到更大的对象上(尽管您可以在复制之前调整源快照的大小)。


1
GNU tar可以--acls选择将ACL存储到档案中。而且,如果像这样的外星人(某种)工具bsdtar比(基本上)本地工具更好地处理它,我会感到惊讶
。– vonbrand

@vonbrand。您的tar必须为此进行了修补(我认为RedHat为ACL的GNU tar提供了补丁),因为最新版本的GNU tar不支持该选项。存在许多的实现tar为Linux( ,starbsdtar),tar我不知道那的GNU tar是任何比别人更好。GNU工具的选择通常比技术更具政治性(例如参见bash)。
斯特凡Chazelas

1
使用GNU工具可能是一个政治选择,但这仍然是默认选择。而且因为它们很多比其它更受欢迎,也更开发商(和其他)在他们身后的人力。
vonbrand

谢谢,下一次我将使用pv和tar而不是cp
Yurij73

@StéphaneChazelas当前GNU tar 确实支持--acls
Ploni

4

我建议使用rsync,例如:

rsync -av --progress --stats dest orig

或者,以压缩方式传输:

rsync -avz --progress --stats dest orig

1
rsync通常慢了很多比cptar|tar
斯特凡Chazelas

感谢您提供此信息:)但我从未将这两个方法进行比较...
VictorAurélio2013年


我不太相信那篇文章。我经常使用rsync,定期复制速度为130-170 MB /秒。
laebshade

9
rsync最有效是因为您已经在目标卷上部分获得了源数据,因为它只会传输丢失/更改的数据。我不会将其用于快速的“第一份副本”。
Totor
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.