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

kag*_*san 10 linux backup cpio

我需要制作一个正在运行的 linux 系统的副本,它(包含在 / 中,而新位置在 /mnt/sdb5 中)似乎在 /dev 中包含了大量的硬链接、软链接和特殊文件;会在cpio不应用额外魔法的情况下处理这项工作吗?

目前已知的保护措施:

  • 不会删除/修改正在运行的系统,直到副本被认为可启动并使用root=/dev/sdb5;在删除之前,请进行完整的分区备份。
  • 将使用 cpio 分别对每个根目录进行归档,从而将其从 LiveCD 环境中解压,这样捐赠者分区就不会受到损害

但是,仍然不会因为 cpio 错过了一些标志并削弱了权限/节点类型/软链接或硬链接而浪费时间。

使用哪种工具/要避开哪些水下岩石?

Ted*_*ddy 12

回答有关cpio以下的实际问题:这些是我将用于的标志cpio

find / -xdev -depth \! -path ./lost+found -print0 | cpio --pass-through --null --dot --make-directories --unconditional --preserve-modification-time --sparse /mnt/sdb5
Run Code Online (Sandbox Code Playgroud)

当然,由于您不是通过网络复制,我将只使用cp

cp --archive --sparse=always --verbose --one-file-system --target-directory=/mnt/sdb5 /
Run Code Online (Sandbox Code Playgroud)

而如果你希望能够多次复制rsync,它的恢复能力是一个更好的选择。(它也像 一样cp处理 ACL 和扩展属性,并且可以像 一样选择性地在网络上工作cpio。所以它是最有用的选项,除了在本地进行第一个副本,我更喜欢使用cp。)

rsync --archive --inplace --hard-links --acls --xattrs --devices --specials --one-file-system --8-bit-output --human-readable --progress / /mnt/sdb5
Run Code Online (Sandbox Code Playgroud)

不要忘记复制/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


Tor*_*ian 6

正如@Klox 提到的,在复制相同大小的分区时,我同意使用dd.

但是,当您想将磁盘复制到不同大小的不同分区时,我宁愿使用rsync. 挂载新分区(比方说,/mnt/new)并:

# rsync -a --exclude=/proc --exclude=/dev --exclude=/sys / /mnt/new
Run Code Online (Sandbox Code Playgroud)

符号链接没有额外的魔法,也不需要实时 cd(单用户 / init 1 就可以了)。