系统备份

来自 ArchWiki

系统备份是 备份操作系统、文件和系统特定的有用/必要数据的过程。[它] 主要确保不仅系统中的用户数据被保存,而且系统的状态或运行状况也被保存。这有助于将系统恢复到上次保存的状态以及所有选定的备份数据。[1]

使用 Btrfs 快照

参见 Btrfs#快照, #快照和_/boot_分区, 和 Snapper

使用 LVM 快照

参见 LVM#快照, 使用 LVM 创建根文件系统快照, 和 #快照和_/boot_分区

使用 rsync

参见 rsync#作为备份工具

使用 tar

参见 使用 tar 进行完整系统备份

使用 SquashFS

参见 使用 SquashFS 进行完整系统备份

注意: SquashFS 不支持 ACL

可启动备份

在文件系统损坏或更新破坏系统的情况下,拥有可启动备份可能很有用。备份也可以用作更新的测试平台,启用 testing 仓库等。如果您将系统转移到不同的分区或驱动器,并且想要启动它,那么过程就像更新备份的 /etc/fstab 和引导加载程序的配置文件一样简单。

本节假设您已将系统备份到另一个驱动器或分区,您当前的引导加载程序工作正常,并且您也想从备份启动。

更新 fstab

无需重启,通过注释掉或删除任何现有条目来编辑备份的 fstab。为包含备份的分区添加一个条目,如这里的示例所示

/dev/sdaX    /             ext4      defaults                 0   1

记住使用正确的设备名称和文件系统类型。

更新引导加载程序的配置文件

对于 Syslinux,您需要做的就是复制当前条目,除了指向不同的驱动器或分区。

提示: 除了编辑 syslinux.cfg,您还可以在启动期间临时编辑菜单。当菜单出现时,按下 Tab 键并更改相关条目。分区从一开始计数,驱动器从零开始计数。

对于 GRUB,建议您自动重新生成主配置文件。如果您想将所有 GRUB 文件全新安装到 /boot 以外的位置,例如 /mnt/newroot/boot,请使用 --boot-directory 标志。

还要验证 /boot/grub/grub.cfg 中的新菜单项。确保 UUID 与新分区匹配,否则它可能仍然启动旧系统。使用 lsblk 查找分区的 UUID

$ lsblk -no NAME,UUID /dev/sdXY

其中 /dev/sdXY 是所需的分区(例如 /dev/sdb3)。要列出 GRUB 认为可以启动的分区的 UUID,请使用 grep

# grep UUID= /boot/grub/grub.cfg

首次启动

重启计算机并在引导加载程序中选择正确的条目。这将首次加载系统。所有外围设备都应被检测到,并且 / 中的空文件夹将被填充。

现在您可以重新编辑 /etc/fstab 以添加先前删除的分区和挂载点。

快照和 /boot 分区

如果您的文件系统支持快照(例如,LVMBtrfs),这些快照很可能排除 /boot 分区或 ESP

您可以使用 pacman hook 在内核更新时自动将 boot 分区复制到 root 分区 (确保 hook 文件归 root 所有)

/etc/pacman.d/hooks/55-bootbackup_pre.hook
[Trigger]
Operation = Upgrade
Operation = Install
Operation = Remove
Type = Path
Target = usr/lib/modules/*/vmlinuz

[Action]
Depends = rsync
Description = Backing up pre /boot...
When = PreTransaction
Exec = /usr/bin/bash -c 'rsync -a --mkpath --delete /boot/ "/.bootbackup/$(date +%Y_%m_%d_%H.%M.%S)_pre"/'
/etc/pacman.d/hooks/95-bootbackup_post.hook
[Trigger]
Operation = Upgrade
Operation = Install
Operation = Remove
Type = Path
Target = usr/lib/modules/*/vmlinuz

[Action]
Depends = rsync
Description = Backing up post /boot...
When = PostTransaction
Exec = /usr/bin/bash -c 'rsync -a --mkpath --delete /boot/ "/.bootbackup/$(date +%Y_%m_%d_%H.%M.%S)_post"/'