Linux 系统恢复流程优化策略

1次阅读

90%的“无法启动”只需1–2个命令修复:先用live usb运行lsblk -f比对uuid与/etc/fstab、grub.cfg;/boot完整则chroot后执行grub2-mkconfig;initramfs缺模块需dracut –force –regenerate-all。

Linux 系统恢复流程优化策略

系统崩溃后怎么快速判断该走哪条恢复路径

别一上来就重装,90% 的“无法启动”其实只需要 1–2 个命令就能救回来。关键看 systemd 是否能接管、/boot/etc/fstab 是否完整、以及根文件系统能否被挂载。

常见错误现象:Kernel panic - not syncing: VFS: Unable to mount root fs,说明内核找到了,但找不到根分区;dracut: FATAL: No root device "UUID=..." found,多半是 initramfs 没包含对应驱动或 UUID 写错了;Failed to start default target 则大概率是 systemd 配置或服务依赖崩了。

  • 先用 Live USB 启动,lsblk -f 看分区结构和实际 UUID,和 /etc/fstab/boot/grub2/grub.cfg 里写的比对
  • 如果 /boot 完整但内核不加载,用 chroot 进去后执行 grub2-mkconfig -o /boot/grub2/grub.cfg 重生成配置
  • 如果 initramfs 缺模块(比如 RAID/LVM/加密卷),必须用 dracut --force --regenerate-all 重建,不能只靠 update-initramfs(那是 debian/ubuntu 的)

chroot 失败的三个高频原因和绕过方法

chroot 不是万能钥匙,它卡住往往意味着底层环境没对齐,而不是操作错了。

使用场景:你已经挂载了原系统的 //proc/sys/dev,但 chroot /mnt 报错或进去了却找不到命令。

  • chroot: failed to run command '/bin/bash': No such file or Directory —— 实际是 /lib64/ld-linux-x86-64.so.2 缺失或架构不匹配,检查 file /bin/bash 和当前 Live 环境是否同为 x86_64
  • 进去了但 systemctlConnection refused —— 忘了 mount --bind /proc /mnt/proc 等,缺任意一个伪文件系统都会让 systemd 启动失败
  • 进去了命令能跑,但 grub2-install 提示 cannot find a GRUB drive for /dev/sda —— Live 环境没加载 dm-modraid1 模块,先 modprobe dm-mod 再试

GRUB 引导修复时最容易写错的两个配置项

不是所有 GRUB 错误都要重装 GRUB,很多只是配置项指向了不存在的设备或内核参数写崩了。

性能 / 兼容性影响:错误的 root= 参数会导致内核根本找不到根设备;漏掉 rd.lvm.lv=cryptdevice= 会让 initramfs 卡在解密/激活阶段,看起来像“黑屏不动”。

  • root=UUID=... 必须和 blkid 输出完全一致,大小写、短横线一个都不能错;用 root=LABEL=ROOT 更稳妥,但得确保 e2labelxfs_admin -L 真设置了标签
  • rd.md.uuid=rd.lvm.vg= 必须和 mdadm --detail --scanvgs -o vg_uuid,vg_name 输出严格对应,多一个空格或少一个点都会让 dracut 跳过识别
  • 加密卷要同时写 rd.luks.name=xxxrd.luks.uuid=yyy,且 yyy 必须是 cryptsetup luksDump /dev/sdX1 | grep UUID 的值,不是 blkid 输出的

备份 initramfs 和 grub.cfg 哪些文件才算真正可恢复

只备份 /boot/vmlinuz-*/boot/initramfs-*.img 是不够的,它们本身不带设备识别逻辑,全靠 initramfs 里打包的内容和 grub.cfg 的参数驱动。

容易踩的坑:有人定期 rsync /boot,但忘了 initramfs 是构建产物,每次内核更新、驱动变动、LVM/RAID 配置变更都必须重新生成,否则备份的是“过期快照”。

  • 必须存一份可执行的恢复脚本,至少包含:chroot /mnt dracut --force --regenerate-allchroot /mnt grub2-install /dev/sdachroot /mnt grub2-mkconfig -o /boot/grub2/grub.cfg
  • 每次系统更新后,用 lsinitrd /boot/initramfs-$(uname -r).img | grep -E "(lvm|raid|crypto)" 确认关键模块已打入,别等出事才查
  • GRUB 配置备份不能只留 grub.cfg,还要存 /etc/default/grub —— 因为 grub2-mkconfig 是靠它生成的,丢了就只能手动拼参数

最麻烦的不是恢复动作本身,而是你得在出问题前就知道哪些 UUID、LV 名、加密卷名是动态生成的,没法硬编码。这些名字一旦变,所有备份的配置就失效。

text=ZqhQzanResources