如何使用 rsync 将正在运行的系统克隆到新硬盘?

如何使用 rsync 将正在运行的系统克隆到新硬盘?

我有一个作为服务器运行的系统,但有一个硬​​盘出现故障。虽然所有重要数据都放在 RAID 上并备份了,但我没有系统本身的映像。没有特别的需要,因为我当然可以进行安装,但我仍然想先尝试进行热复制,然后再进行恢复。我知道这个过程有一些缺点,但我认为作为首选尝试它并没有太多缺点。

  • 操作系统:Ubuntu 12.04.4 LTS
  • 无头
  • 我不希望安装太多新软件,因为磁盘已经出现故障:)
  • 系统正在运行。我担心停止它会增加磁盘无法恢复的可能性。这意味着 dd 可能出问题了?
  • 新磁盘的大小与旧磁盘不一样(它是旧磁盘的两倍),这进一步使 dd 问题复杂化。

我的想法是

  • 在系统中热插拔新驱动器
  • 建立文件系统
  • 将其挂载到 /mnt/somedir
  • rsync 文件
  • 一些 fstab 魔法
  • 一些启动魔法

我仍有疑问:

什么是好的 rsync 命令? 我计划:

rsync -aAXx  / /mnt/somedir/ 
   --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found}

(我跳过了一些目录,例如我安装的突袭等等)

其中选项为:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-A, --acls                  preserve ACLs (implies -p)
-X, --xattrs                preserve extended attributes
-x, --one-file-system       don't cross filesystem boundaries

我特意跳过了 -H、-v 和 --progress 以加快进程。
这对 Ubuntu 有用吗?我不确定 Ubuntu 是否使用任何硬链接,但我认为我不需要这个选项,对吗?

运行完此程序后,我可以重新启动(也许使用实时 USB 驱动器)并重新运行 rsync(如果旧磁盘仍可启动)。我想这会修复任何不可读/更改的文件,因为系统正在运行。


如何修复启动问题?
然后我的计划是更改/fstab 中的 UUID(仍然需要谷歌搜索如何找到 uuid),然后做一些神奇的事情,以便系统真正从新磁盘启动

我是不是忘记了什么事情,或者计划了什么特别愚蠢的事情?

答案1

您可以使用以下命令获取所有块设备的 UUID blkid。(您需要的是只显示 UUID 而不是 PARTUUID 的那个)

我使用的 rsync 选项是 -avhPHAXx。

我认为 -v 或 --progress 不会加快任何速度,除非您使用非常慢的控制台/tty。

使用 -x 消除了所有排除的需要,假设它们都在不同的文件系统上(在我的系统上,除了 lost+found 之外的所有文件系统都在)。

据我所知,唯一一个使用硬链接的常用程序(至少在我的系统上)是git,所以我添加了 -H 选项。我认为不使用 -H 的唯一问题是它会占用更多空间。

至于引导加载程序,如果您使用的是带 MBR 的 GRUB2,那么我使用的命令是grub-install /dev/sda(将 sda 替换为适合您的正确驱动器)。这应该使新驱动器可启动。如果您使用的是不同的引导加载程序或 UEFI,那么我会在 Google 上查找如何让新驱动器正确启动。只需记住,新驱动器上的 /boot 需要与当前位于同一分区上(假设您也没有使用 /boot 的 UUID),否则您将需要相应地修改 fstab。

答案2

我刚刚成功地做到了这一点(经过几次尝试)。

我用了

sudo rsync -ahPHAXx --delete --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found} / /mnt

然后我重置了/mnt/etc/fstab启动分区的文件我的交换空间。

然后我需要重置 GRUB

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
sudo grub-install --recheck /dev/sdX
sudo update-grub

答案3

不要尝试修复此驱动器的启动问题;我的建议是:

  1. 插入驱动器另一台机器而不是冒险对出现故障的机器进行热插拔。
  2. rsync您的非系统文件迁移到新磁盘。
  3. 在单独的硬盘上,创建启动盘、最小根目录和交换区。安装与要从故障硬盘克隆的操作系统相同的操作系统。
  4. 从这个新磁盘启动(最好在一台单独的机器上,如果您不能冒目标主机停机的风险,否则您可以使用此磁盘启动目标主机)。
  5. 将步骤 #2 中的磁盘添加到此新系统,并设置正确的挂载点。现在您有了系统驱动器的克隆。您可以(可选)将分区复制到此新磁盘,但我的建议是将该磁盘作为启动操作系统的最低要求。正如您所意识到的,主分区上的东西太多会使恢复变得困难。请确保正确复制网络配置,因为您的服务器是无头的。
  6. 只需用这对新磁盘替换有问题的系统上的驱动器(如果您选择在步骤4中不首先启动目标)。
  7. 重启。

答案4

我花了很多时间在 Centos Freepbx 发行版上进行 rsync 并有一个可启动的新磁盘,最后在修复 fstab 和 grub UUID 后它不起作用。

让它发挥作用的最后一步是

dd if=/dev/sda of=/tmp/mbrsda.bak bs=512 count=1
dd if=/tmp/mbrsda.bak of=/dev/sdb bs=446 count=1
grub

当您处于 Grub CLI 中时(即在grub>提示符下):

device (hd0) /dev/sda
device (hd1) /dev/sdb
root (hd0,0) 
setup (hd0) 
root (hd1,0)
setup (hd1)
quit

按下enter,您现在就可以关机,移除旧磁盘并使用新磁盘启动。

相关内容