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


22

我有一个作为服务器运行的系统,该服务器的硬盘驱动器有故障。尽管所有重要数据都存储在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),并做一些魔术,使系统实际上从新磁盘启动

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

Answers:


16

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

我使用的rsync选项是-avhPHAXx。

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

使用-x消除了所有排除的需要,前提是它们全部位于不同的文件系统上(在我的系统上,除lost + found外,所有除外)。

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

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


我不敢担心我将它们放在单独的系统上,所以排除似乎是谨慎的。我正在阅读有关-v速度的文章,所以我不确定该怎么做;)。Git是一个好点,我敢肯定/ home可以做到这一点!
Nanne 2014年

1
好吧,/ proc,/ sys和最有可能的/ dev绝对是与/不同的文件系统/挂载点,因此,当您使用-x时,绝对没有理由排除这些文件系统/挂载点。如果您不确定根文件系统中是否包含什么,只需运行mount即可进行检查。其中的任何内容都无需手动排除。
bparker 2014年

我不确定如何以及为什么,但是无论如何排除是错误的。他们实际上是我干的,不知道为什么。(嗯,我从一个半随机的地方复制了格式,所以这可能是原因吗?)。无论如何,根据您的建议将-x牢牢固定在适当的位置上,我并不担心太多,唯一的事情是发生了一些不重要的事情(例如,旧的备份)也被“保存”了。
Nanne 2014年

这节省了我的a $$。我在Linode上克隆了12GB以上的系统,以使用全新的节点。5年后,此方法仍然有效。多谢你们!
geeth,

因此,在对准备好接受克隆的克隆文件系统进行分区时,应该在我保持根分区不同步的同时为我的根分区设置启动标志,还是在将克隆驱动器投入生产之前进行设置。否则,我会假设克隆的驱动器是可启动的,这并不是真正需要的。在我的情况下,我的克隆驱动器是单独服务器上的磁盘。Rsync用于使它与产品保持一致。
NZ Dev

11

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

我用了

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

请注意,这仅适用于MBR格式化的磁盘。
Teque

2

不要尝试使用该驱动器修复启动;我的建议:

  1. 插入另一台计算机上的驱动器,而不用冒险在发生故障的计算机上进行热交换。
  2. rsync 您的非系统文件跨到新磁盘。
  3. 在单独的硬盘上,创建引导,最小根目录和交换。安装要从故障硬盘克隆的同一操作系统。
  4. 从此新磁盘引导(如果您不能冒险在目标主机上停机,则最好在单独的计算机上引导,否则可以使用此磁盘引导目标主机)。
  5. 使用正确的安装点,将步骤2中的磁盘添加到该新系统中。现在,您有了系统驱动器的克隆。您可以(可选)将分区复制到该新磁盘上,但是我的建议是将磁盘保留为引导操作系统的最低要求。正如您已经认识到的那样,主分区上有太多东西使恢复变得困难。确保服务器无头时正确复制网络配置。
  6. 只需用这个新的磁盘对替换故障系统上的驱动器(如果您在步骤4中选择不启动目标服务器)。
  7. 重启。

我会冒着停机的风险,因为它不是必需的服务器。我打算使用热插拔(基本上是热添加),因为该副本会快得多。我认为应该不会有太多的风险,因为我们正在谈论SATA(至少是II)。除此之外,建议使用额外的启动磁盘的原因是什么?这会使某些已经安装的软件,homedir等复杂化吗?听起来我想避免做更多的工作:D
Nanne14年

它是我在生产中使用的;我将/ home,/ etc,/ var,/ usr和/ opt挂载在外部磁盘上(实际上是在LVM上),将/和/ boot挂载在单独的磁盘上。这样,当主磁盘出现故障时,我不必担心,我只用交换它而不会影响我的服务:)最初需要一点工作,但从长远来看可以节省您的时间。尤其是当分区上的空间用完并且需要添加到卷而不停机的情况下。
Burhan Khalid 2014年

虽然您提出了一个好要点,但这不是我目前有的要求,也不需要:)。系统中还有其他几张光盘(大约7张),我必须在; D处画线。因此,操作系统目前无需拆分。我的意思是:我同意系统是好的,只是我现在不想要的东西;D。因此,如果我将所有内容都保留在1个磁盘上,那么我在外部复制的事实将使其变得非常缓慢,不是吗?
Nanne 2014年

取决于您与外部设备的接口,通过以太网应该更快,通过USB 2更快,在USB 3上更快。这样做不会很慢-当然,不要复制正在写入的目录(例如/ tmp,无论如何您都不需要)或写入管道的任何位置。
2014年

0

我花了很多时间在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,您现在可以关闭,删除旧磁盘并使用新磁盘启动。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.