如何将Linux移动到另一个分区?

我需要制作一个正在运行的linux系统的副本(包含在/中,并且在/ mnt / sdb5中准备好了新的目录)似乎在/ dev中包含了大量的硬链接,软链接和特殊文件; cpio处理这个工作,而不应用额外的魔法?

目前已知的保障措施:

  • 直到复制被认为是可引导的,并且使用root=/dev/sdb5 ,才去除/修改正在运行的系统; 在删除之前,请进行完整的分区备份
  • 将使用cpio分别对每个根目录进行归档,从而将其从LiveCD环境中解压缩,从而不会损害捐助者的分区

但是,不要因为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隐藏起来了。 我推荐以下程序:

  1. mkdir /tmp/dev
  2. mount --move /dev /tmp/dev
  3. 使用上述命令之一复制/dev/mnt/sdb5
  4. mount --move /tmp/dev /dev
  5. 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一个新的分区来填充额外的空间,并依靠符号链接来移动目录。 (我确定也有调整分区大小的工具,但我没有使用它们。)