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

Nan*_*nne 24 boot rsync ubuntu ubuntu-12.04

我有一个系统作为服务器运行,但硬盘驱动器出现故障。虽然所有重要数据都在 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}
Run Code Online (Sandbox Code Playgroud)

(我跳过了更多的目录,例如我安装的raid 等)

选项在哪里:

-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
Run Code Online (Sandbox Code Playgroud)

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

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


如何修复启动?
然后我的计划是/在我的 fstab 中更改 UUID (仍然需要谷歌如何找到 uuid),并做一些魔术,以便系统实际上从新磁盘启动

我是忘记了什么还是我计划了一些特别愚蠢的事情?

bpa*_*ker 18

您可以使用该blkid命令获取所有块设备的 UUID 。(你想要一个只说 UUID,而不是 PARTUUID 的)

我使用的 rsync 选项是 -avhPHAXx。

我不认为 -v 或 --progress 会加速任何事情,除非你在一个非常慢的控制台/tty 上。

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

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

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


tee*_*s99 12

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

我用了

sudo rsync -ahPHAXx --delete --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found} / /mnt
Run Code Online (Sandbox Code Playgroud)

然后我/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
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这仅适用于 MBR 格式的磁盘。 (2认同)