对于将/ home轻松转移到另一个磁盘,我cp -a
认为这是一种极其缓慢的方法。应该知道一种更有效的方法来完成任务。我已将/ home挂载为逻辑卷,但是目标磁盘不是LVM系统
noatime
mount选项以减少不必要的写入,特别是对源文件系统的写入。
对于将/ home轻松转移到另一个磁盘,我cp -a
认为这是一种极其缓慢的方法。应该知道一种更有效的方法来完成任务。我已将/ home挂载为逻辑卷,但是目标磁盘不是LVM系统
noatime
mount选项以减少不必要的写入,特别是对源文件系统的写入。
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
很慢,其他方法也会很慢。除非不是面向文件的复制