You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何对整个硬盘及分区表做完整增量可搜索备份?UEFI环境实现方法

当然有办法!UEFI时代虽然多了个EFI分区,但整套备份逻辑其实和MBR时代一脉相承,只是需要多照顾几个关键点而已。我给你梳理一套既完整支持增量、又能直接搜索的方案:

一、先搞定分区表与引导核心备份

UEFI用的是GPT分区表,不像MBR只存开头63扇区,GPT有主分区表+备份分区表的冗余设计,所以备份要更严谨:

  • 备份GPT分区表:用sgdisk工具(比dd更靠谱的GPT管理工具),执行:
    sgdisk --backup=/path/to/your-gpt-backup.gpt /dev/sda
    
    这个文件很小(只有1KB左右),一定要存到安全的外部存储里。
  • 额外备份GPT备份头:GPT的备份分区表存在硬盘最后34个扇区,如果开头的主分区表损坏,这个备份头能救场,命令:
    dd if=/dev/sda of=/path/to/gpt-backup-header.img bs=512 count=34 skip=$(( $(blockdev --getsz /dev/sda) - 34 ))
    
  • 备份EFI分区:EFI分区是FAT32格式,里面存的是UEFI引导文件,用rsync做增量备份最方便(比dd镜像省空间,而且文件可直接查看):
    rsync -avh --delete /boot/efi/ /path/to/efi-backup-directory/
    
    要是你偏好镜像备份,也可以用dd if=/dev/sda1 of=/path/to/efi.img bs=512,但rsync更适合长期增量维护。
二、主分区(/)的增量可搜索备份

这部分和MBR时代的rsync逻辑几乎一样,只是优化了参数保证完整性:

  • 基础增量备份命令:
    rsync -avhAX --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /path/to/root-backup/
    
    解释下关键参数:
    • -A 保留文件ACL权限,-X 保留扩展属性
    • --delete 同步删除备份目录里已在源目录删除的文件,保证备份和当前系统一致
    • --exclude 排除虚拟文件系统和临时目录,这些内容完全没必要备份
  • 版本化增量备份(更方便回滚与搜索):
    --link-dest参数让新备份硬链接到上一次的备份文件,这样只有变化的文件会占用新空间,每个备份都是完整的系统视图,还能直接搜索:
    # 假设上次备份目录是 /path/to/root-backup-20240501
    rsync -avhAX --delete --link-dest=/path/to/root-backup-20240501 --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /path/to/root-backup-$(date +%Y%m%d)
    
    之后你可以直接在/path/to/root-backup-20240502里用findgrep搜索文件,和在本地系统里操作完全一样。
三、Swap分区的处理

Swap分区里存的是临时内存交换数据,重启就清空了,完全不需要备份。但你需要记录它的UUID,方便恢复时重新创建:

  • 记录Swap UUID:
    blkid /dev/sda3 | grep UUID
    
    把输出里的UUID记下来,恢复时用mkswap /dev/sda3创建新swap,再修改/etc/fstab把UUID设回原来的值就行。
四、恢复操作的关键步骤

如果哪天系统挂了,按这个顺序恢复:

  1. 恢复GPT分区表:先运行sgdisk --load-backup=/path/to/your-gpt-backup.gpt /dev/sda,要是主分区表损坏,先恢复备份头:
    dd if=/path/to/gpt-backup-header.img of=/dev/sda bs=512 count=34 seek=$(( $(blockdev --getsz /dev/sda) - 34 ))
    
  2. 恢复EFI分区:如果是rsync备份,直接挂载新的EFI分区后同步:
    mount /dev/sda1 /mnt/efi
    rsync -avh /path/to/efi-backup-directory/ /mnt/efi/
    
    镜像备份的话就用dd if=/path/to/efi.img of=/dev/sda1 bs=512
  3. 恢复主分区:挂载新的根分区后同步备份:
    mount /dev/sda2 /mnt/root
    rsync -avhAX /path/to/root-backup/ /mnt/root/
    
  4. 修复引导:挂载EFI和根分区后,重新安装GRUB(以x86_64架构为例):
    mount --bind /dev /mnt/root/dev
    mount --bind /proc /mnt/root/proc
    mount --bind /sys /mnt/root/sys
    chroot /mnt/root
    grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
    update-grub
    exit
    
  5. 重建Swap分区:按照之前记录的UUID创建swap,更新/etc/fstab
一些实用小贴士
  • 定期验证备份:比如把备份的根分区挂载到本地,检查关键文件(比如/etc/passwd/boot/vmlinuz)是否完整,测试分区表恢复是否正常。
  • 自动化备份:把这些命令写成脚本,用cron定时运行,比如每周日凌晨2点自动做增量备份,省得手动操作。
  • 可搜索性保障:因为rsync备份的是真实的文件系统结构,所以你可以直接用系统自带的搜索工具(比如findrg)在备份目录里查找文件,和本地系统毫无区别。

内容的提问来源于stack exchange,提问作者Mephisto

火山引擎 最新活动