对于将/ home轻松转移到另一个磁盘,我cp -a认为这是一种极其缓慢的方法。应该知道一种更有效的方法来完成任务。我已将/ home挂载为逻辑卷,但是目标磁盘不是LVM系统
noatimemount选项以减少不必要的写入,特别是对源文件系统的写入。
对于将/ home轻松转移到另一个磁盘,我cp -a认为这是一种极其缓慢的方法。应该知道一种更有效的方法来完成任务。我已将/ home挂载为逻辑卷,但是目标磁盘不是LVM系统
noatimemount选项以减少不必要的写入,特别是对源文件系统的写入。
Answers:
尝试tar,pax,cpio,与一些缓冲。
(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文件系统的共同特征,我们也必须考虑:
然后,如果考虑使用ext4大多数Linux文件系统,则必须考虑:
SELinux)并非所有的工具支持所有这些,或当他们这样做,您必须启用它明确地像--sparse,--acls...选项rsync,tar...和复制到不同的文件系统时,你必须考虑,他们没有的情况下支持相同的功能集。
您可能还需要考虑文件系统本身的属性,例如UUID,为根保留的空间,fsck频率,日志记录行为,目录格式...
然后是更复杂的文件系统,您无法通过复制文件来真正复制数据。例如,考虑一下zfs或btrfs何时可以拍摄子卷的快照并将其分支……...它们将具有自己的专用工具来复制数据。
如果要确保复制所有内容,则块设备(或在可能的情况下至少分配的块)的逐字节复制通常是最安全的。但是请注意UUID冲突问题,这意味着您正在复制到更大的对象上(尽管您可以在复制之前调整源快照的大小)。
--acls选择将ACL存储到档案中。而且,如果像这样的外星人(某种)工具bsdtar比(基本上)本地工具更好地处理它,我会感到惊讶
tar为Linux( ,star,bsdtar),tar我不知道那的GNU tar是任何比别人更好。GNU工具的选择通常比技术更具政治性(例如参见bash)。
--acls
我建议使用rsync,例如:
rsync -av --progress --stats dest orig
或者,以压缩方式传输:
rsync -avz --progress --stats dest orig
rsync通常慢了很多比cp或tar|tar
rsync最有效是因为您已经在目标卷上部分获得了源数据,因为它只会传输丢失/更改的数据。我不会将其用于快速的“第一份副本”。
cp很慢,其他方法也会很慢。除非不是面向文件的复制