Linux 灾备演练与应急恢复实践

1次阅读

灾备演练前必须验证/boot、/boot/efi和/的真实挂载状态,否则90%会卡在initramfs;rsync –delete需谨慎使用,务必–dry-run并排除/var/log/**等目录;chroot中须挂载proc/sys/dev/efi且用env -i避免环境污染;grub2修复需核对efibootmgr路径、secure boot模块及efi/boot/bootx64.efi优先级。

Linux 灾备演练与应急恢复实践

灾备演练前必须验证的 3 个挂载点状态

不检查 /boot/boot/efi/ 的实际挂载状态,直接跑恢复脚本,90% 会卡在 initramfs 里出不来。常见现象是系统重启后停在 dracut: 提示符,或者报 Failed to mount /boot: No such file or Directory

实操建议:

  • findmnt -D 查真实设备路径,别信 /etc/fstab 里写的 UUID —— 镜像克隆后 UUID 可能未更新
  • 检查 lsblk -f 输出中 /boot/efi 是否真的挂载了 FAT32 分区,UEFI 系统漏这步,grub-install 会静默失败
  • 确认 mount | grep " / " 返回的是根分区本身,不是某个子目录 bind mount,否则 chroot 环境里 rpm -ivhapt install 会写错位置

rsync 做增量备份时 –delete 的危险边界

rsync --delete 在灾备场景下不是“删多余文件”,而是“删所有不在源里的东西”——包括你手动加的 /etc/grub.d/40_custom、临时解压的内核模块、甚至 /var/log 里还没轮转完的日志。

实操建议:

  • 永远用 --dry-run 先跑一遍,再用 grep "deleting" 过滤输出,重点关注 /etc/boot/var/lib 下的变动
  • 排除列表必须显式加 --exclude='/var/log/**' --exclude='/tmp/**' --exclude='/proc/**'*** 更可靠,避免漏掉深层子目录
  • 如果目标端是 LVM 快照卷,--delete 会触发大量元数据写入,可能撑爆快照空间,建议改用 --delete-after 并监控 lvs 输出

应急恢复时 chroot 环境里 systemd 启动失败的典型原因

进 chroot 后执行 systemctl start sshdFailed to connect to bus: No such file or directory,不是服务没装,是 dbus 和 cgroup 没就位。

实操建议:

  • 先运行 mount -t proc /proc /mnt/procmount -t sysfs /sys /mnt/sysmount -o bind /dev /mnt/dev,缺任意一个,systemd 就起不来
  • UEFI 系统必须额外挂载 /mnt/boot/efi,否则 systemctl reboot 会 fallback 到 BIOS 模式,后续启动失败
  • 不要用 chroot /mnt /bin/bash 然后手动 source profile —— 改用 chroot /mnt /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash,避免 host 环境变量污染

GRUB2 修复后仍无法引导的 EFI 路径陷阱

执行完 grub2-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=centos,重启还是进不了系统,大概率是 /boot/efi/EFI/centos/grubx64.efi 文件存在但 efibootmgr -v 显示启动项指向了 EFIredhatshimx64.efi 这类旧路径。

实操建议:

  • efibootmgr -v | grep -A1 "Boot000." 看当前生效的启动项完整路径,注意大小写和反斜杠方向(UEFI 固件认 不认 /
  • 如果原系统用 Secure Boot,grub2-install 必须带 --modules="tpm" 且确保 /boot/efi/EFI/centos/MokManager.efi 存在,否则第一次启动会卡在 MOK 管理界面
  • 别依赖 grub2-mkconfig -o /boot/grub2/grub.cfg 自动发现内核 —— 手动检查 ls /boot/vmlinuz-*ls /boot/initramfs-*.img,cfg 里 kernel 行必须严格匹配真实文件名,多一个空格或少一个破折号都进不了 initramfs

真正卡住恢复的,往往不是命令没敲对,而是 /boot/efi 目录下那个被忽略的 EFI/BOOT/BOOTX64.EFI 文件 —— 它可能比你新装的 centos 目录优先级更高,而且不会出现在 efibootmgr 列表里。

text=ZqhQzanResources