我需要制作一个正在运行的linux系统的副本(包含在/中,并且在/ mnt / sdb5中准备好了新的目录)似乎在/ dev中包含了大量的硬链接,软链接和特殊文件; cpio处理这个工作,而不应用额外的魔法?
目前已知的保障措施:
root=/dev/sdb5 ,才去除/修改正在运行的系统; 在删除之前,请进行完整的分区备份。 但是,不要因为cpio错过了一些标志而耽误了权限/节点types/软链接或硬链接而浪费时间。
使用哪个工具/哪些水下岩石可以避免?
回答关于cpio的实际问题:这些是我将用于cpio的标志:
find / -xdev -depth \! -path ./lost+found -print0 | cpio --pass-through --null --dot --make-directories --unconditional --preserve-modification-time --sparse /mnt/sdb5
当然,既然你不是通过networking复制的,我只需要使用cp :
cp --archive --sparse=always --verbose --one-file-system --target-directory=/mnt/sdb5 /
如果你想多次复制, rsync是其恢复function的更好select。 (它也像cp一样处理ACL和扩展属性,可以像cpio一样在networking上工作,所以这是最有用的select,除了在本地执行第一个副本,我更喜欢使用cp 。
rsync --archive --inplace --hard-links --acls --xattrs --devices --specials --one-file-system --8-bit-output --human-readable --progress / /mnt/sdb5
不要忘记复制/boot和/dev !
/boot很容易,只需复制它。 但是现在/dev已经被udev隐藏起来了。 我推荐以下程序:
mkdir /tmp/dev mount --move /dev /tmp/dev /dev到/mnt/sdb5 mount --move /tmp/dev /dev rmdir /tmp/dev 正如@Klox提到的,当复制相同大小的分区时,我同意使用dd 。
但是当你想把磁盘复制到不同大小的分区时,我宁愿使用rsync 。 挂载新的分区(比方说,/ mnt / new)和:
# rsync -a --exclude=/proc --exclude=/dev --exclude=/sys / /mnt/new
对于符号链接没有附加的魔力,也不需要live CD(单用户/ init 1就可以)。
dd最佳变体是使用partimage ,它将只复制分区的已使用部分,使大型未使用分区的复制变得更为方便。
注意重要的警告:
Partimage不支持新的Ubuntu安装默认的Ext4。
System Rescue CD发行版中包含一个方便的副本。
在硬盘之间移动Linux安装时,我总是从Live CD启动,并使用dd复制整个分区。 我认识到,这并不涉及磁盘大小的变化(不可避免的是新磁盘更大,这简化了事情),但我喜欢这个技术,正是因为你关心使用cpio的原因:有些东西可能会出错。 使用dd技术,它是全部或者没有:新的磁盘启动,一切都是一样的,或者磁盘不启动。 以后出现潜伏的问题不存在风险。
当然,现在的问题是分区不能填满新的磁盘,但我宁愿只是创build一个新的分区来填充额外的空间,并依靠符号链接来移动目录。 (我确定也有调整分区大小的工具,但我没有使用它们。)