我预期的事件顺序如下:
备份大部分根目录
sudo rsync -aAXv --delete --exclude={/dev/*,/proc/*,/sys/*,/mnt/*,/media/*} / /BACKUP
反转过程
sudo rsync -aAXv --delete --exclude={/dev/*,/proc/*,/sys/*,/mnt/*,/media/*} /BACKUP /
我很紧张尝试第二部分而不首先进行一些健全性检查,因此这篇文章。输出--dry-run
看起来都不错,但仍然想先检查一下
答案1
对于使用 rsync 的完整系统备份恢复,我已成功使用:
备份命令:
sudo rsync -aHAXS --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /* /backup
我还添加了-H
硬链接。我强烈建议你使用它。并且-S
,如果您的文件稀疏。我有很多用于虚拟机的。
为了恢复,我使用了 live cd/usb,安装了空的、新格式化的即将-/磁盘,/mnt
然后,
恢复命令:
sudo rsync -aHAXS --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /backup/* /mnt
照顾好即将到来的/etc/fstab
(/mnt/etc/fstab
),也看看grub.cfg
,重新启动,一切顺利。
关于排除,lost+found
在某些文件系统中不可用,例如XFS,因此如果使用此类文件系统,则可以省略;如果包含在内的话也没有什么坏处。
答案2
最好的健全性检查实际上是从备份启动。
这是 100% 确定的唯一方法,通过真实测试!
据我所知,您无法从根目录内的文件夹执行此操作。 (实际上,我使用的目标是“根树内的文件夹”,但在 /media/$USER/RootBackup 处,它实际上是另一个文件系统。)您甚至不需要恢复备份即可立即使用它,以防您处于快点,如果发生了不好的事情,只需从备份启动,然后再恢复!
使用rsync
,您可以在需要时随时更新根的备份,速度相当快。每次在 ubuntu 20.04 上更新内核和其他核心包之前我都会这样做。
观察:如果您也使用 LVM,我放弃了 LVM 快照作为极其缓慢的选项。
我正在使用这个命令:
sudo rsync -axHAXv --delete-excluded / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /media/$USER/RootBackup/
我随后运行它几次以确保没有更改重要文件。
--delete-excluded 的重要性是真正保持同步(相同)。
我还单独备份/boot,因为它是安装在那里的另一个分区,其中:
sudo rsync -axHAXv --delete-excluded /boot/ --exclude=/lost+found /media/$USER/RootBackup/boot/
第一次运行它后,执行以下操作:
grub-update
但是它在这里无法正常工作,它一直指向LVM设备,而不是我创建的新文件系统,所以我这样做了:
mount |grep RootBackup #copy the device name, ex.: sdb4
ls /dev/disk/by-uuid/ -l |grep sdb4 # copy the UUID ex.: 4e97fe69-93ae-4e6a-a2cc-3406cb21176c
grub-update
现在将新的menuentry从grub.cfg复制到/boot/grub/custom.cfg(我这里使用gpt,您可能不需要这个,只需根据需要复制并修改生成的menuentry ):
menuentry 'RootBackup by UUID' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'osproberfailed-manualadjustment-gnulinux-simple-4e97fe69-93ae-4e6a-a2cc-3406cb21176c' {
insmod part_gpt
insmod ext2
set root='hd3,gpt13'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd3,gpt13 --hint-efi=hd3,gpt13 --hint-baremetal=ahci3,gpt13 4e97fe69-93ae-4e6a-a2cc-3406cb21176c
else
search --no-floppy --fs-uuid --set=root 4e97fe69-93ae-4e6a-a2cc-3406cb21176c
fi
linux /boot/vmlinuz root=UUID=4e97fe69-93ae-4e6a-a2cc-3406cb21176c ro quiet splash $vt_handoff debug --verbose
initrd /boot/initrd.img
}
观察:自动生成菜单项后需要的重要修改grub-update
是:
- 授予正确的 UUID 已设置。请注意,
search
命令linux
使用相同的 UUID,因为整个备份最终位于单个分区中。 - vmlinuz 和 initrd 必须在“/boot/”中搜索,并且使用自动符号链接不需要维护
- linux 命令必须使用,
root=UUID=...
因为 /dev/sdb4 随机更改为 sdc4 并且不可靠 - 不要使用 PARTUUID,因为它不起作用。
要恢复,请从备份启动,因此源路径将为 /,但目标路径将是您必须安装的其他路径。
以防万一您没有运行主根备份过程太长时间:
- 从工作备份根启动
- 创造来自主根 FS 的第二个备份
- 将工作备份根恢复到主根 FS 上
- 从主根 FS 启动
- 一旦发现某些内容丢失或错误,请从刚刚创建的第二个备份中获取所需内容。
我希望你能像我现在在台式电脑上一样平静,不间断,并且需要通过关键更新来更新核心系统文件! :)