灾备演练前必须验证/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优先级。

灾备演练前必须验证的 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 -ivh或apt 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 sshd 报 Failed to connect to bus: No such file or directory,不是服务没装,是 dbus 和 cgroup 没就位。
实操建议:
- 先运行
mount -t proc /proc /mnt/proc、mount -t sysfs /sys /mnt/sys、mount -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 列表里。