igozhang

——

    系统引导修复

    本文档针对 系统启动失败 场景,分别说明 Ubuntu 20.04、CentOS 7.9、Rocky Linux 9.3 的引导修复流程。

    操作前须知

    1. 准备与故障系统 同大版本 的安装 ISO / Live 介质,并从该介质启动进入救援环境。
    2. 修复前备份重要数据;至少备份 /etc/fstab/etc/default/grub/boot 下关键文件。
    3. 下文中的磁盘名(/dev/sdanvme0n1 等)、分区号、卷组名(centos / rl 等)均为示例,必须以本机 lsblkblkidvgs/lvs 输出为准
    4. 不要对已挂载的分区执行 fsck。需先卸载,或仅在救援环境未挂载该分区时检查。
    5. 先确认固件模式(BIOS/Legacy 或 UEFI),避免按错误模式重装引导程序。
    6. 优先使用与故障系统 同版本 的官方安装/救援 ISO;下载后请核对校验和(SHA256)。

    常用修复 ISO 镜像及区别

    引导修复一般不依赖第三方“万能救援盘”,推荐使用各发行版官方 ISO。原则:版本对齐、优先带 Rescue/Live 能力、体积够用即可

    Ubuntu 20.04

    镜像类型 文件名(示例) 区别与适用场景 推荐度
    Desktop(桌面 Live) ubuntu-20.04.6-desktop-amd64.iso 可直接 Try Ubuntu 进入图形 Live,挂载磁盘、chroot、修 GRUB 最方便 首选(引导修复)
    Live Server ubuntu-20.04.6-live-server-amd64.iso 体积更小;安装向导中可打开 shell,适合无桌面、熟悉命令行的场景 可选
    旧点版本(20.04.x) 同系列更早 ISO 一般可用,但建议用当前归档的 20.04.6,驱动与安装器更完整 次选

    官方下载(Canonical):

    • 目录页:https://releases.ubuntu.com/20.04.6/
    • Desktop 直链:https://releases.ubuntu.com/20.04.6/ubuntu-20.04.6-desktop-amd64.iso
    • Live Server 直链:https://releases.ubuntu.com/20.04.6/ubuntu-20.04.6-live-server-amd64.iso
    • 校验文件:https://releases.ubuntu.com/20.04.6/SHA256SUMS

    国内镜像(内容同源,速度通常更快),例如:

    • 清华 TUNA:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.04.6/
    • 阿里云:https://mirrors.aliyun.com/ubuntu-releases/20.04.6/

    说明:Desktop 与 Server 都能修引导;差别主要在是否便于进入 Live 桌面、镜像大小。WSL 包(.wsl不能用于裸机引导修复。部分镜像站可能限制 ISO 直链,若失败请改用官方 releases.ubuntu.com

    CentOS 7.9

    CentOS 7 已停止维护,官方安装镜像已迁至 CentOS Vault。引导修复请用带 Rescue a CentOS system 菜单的安装类 ISO。

    镜像类型 文件名(示例) 区别与适用场景 推荐度
    DVD CentOS-7-x86_64-DVD-2009.iso 含完整安装器与本地软件包,Rescue 菜单齐全,离线重装 grub/dracut 相关包更稳妥 首选(引导修复)
    Minimal CentOS-7-x86_64-Minimal-2009.iso 体积约 1GB,可进 Rescue;软件包少,chroot 后 yum reinstall 往往仍需网络/本地源 可作轻量备选
    NetInstall CentOS-7-x86_64-NetInstall-2009.iso 体积最小,依赖网络拉包;适合有内网 yum 源的环境 有可靠源时可用
    Everything CentOS-7-x86_64-Everything-2009.iso 包最全、体积很大,一般不必仅为修引导下载 非必要
    2207 硬件增强版 CentOS-7-x86_64-DVD-2207-02.iso 官方说明:仅在 2009 版驱动/时区不足时使用 新硬件失败时再换

    官方下载(CentOS Vault):

    • 目录页:https://vault.centos.org/7.9.2009/isos/x86_64/
    • DVD 直链:https://vault.centos.org/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso
    • Minimal 直链:https://vault.centos.org/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
    • NetInstall 直链:https://vault.centos.org/7.9.2009/isos/x86_64/CentOS-7-x86_64-NetInstall-2009.iso
    • 校验文件:https://vault.centos.org/7.9.2009/isos/x86_64/sha256sum.txt

    国内镜像示例(已校验路径可用):

    • 阿里云:https://mirrors.aliyun.com/centos-vault/7.9.2009/isos/x86_64/
    • 清华 TUNA:https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/isos/x86_64/

    说明:LiveGNOME/LiveKDE(若镜像站仍有)适合试用桌面,不是标准 Rescue 流程首选;修 GRUB/LVM 请优先 DVD/Minimal 安装盘的 Troubleshooting → Rescue。部分镜像站对公网 ISO 下载有限制时,请改用 vault.centos.org

    Rocky Linux 9.3

    Rocky 9.3 已归档到 vault。引导修复使用安装 ISO 中的 Rescue a Rocky Linux system

    镜像类型 文件名(示例) 区别与适用场景 推荐度
    DVD Rocky-9.3-x86_64-dvd.iso 约 10GB,含完整 BaseOS/AppStream,离线 dnf reinstall grub2/shim、重建 initramfs 最稳妥 首选(引导修复,可离线)
    Minimal Rocky-9.3-x86_64-minimal.iso 约 1.6GB,含 Rescue;包较少,重装引导相关 RPM 可能需配置 dnf 源 体积与能力较均衡
    Boot(网络安装) Rocky-9.3-x86_64-boot.iso 约 900MB,偏网络安装/救援,拉包依赖网络或本地镜像 有可靠源时可用

    官方下载(Rocky Vault):

    • 目录页:https://dl.rockylinux.org/vault/rocky/9.3/isos/x86_64/
    • 备用同内容入口:https://download.rockylinux.org/vault/rocky/9.3/isos/x86_64/
    • DVD 直链:https://dl.rockylinux.org/vault/rocky/9.3/isos/x86_64/Rocky-9.3-x86_64-dvd.iso
    • Minimal 直链:https://dl.rockylinux.org/vault/rocky/9.3/isos/x86_64/Rocky-9.3-x86_64-minimal.iso
    • Boot 直链:https://dl.rockylinux.org/vault/rocky/9.3/isos/x86_64/Rocky-9.3-x86_64-boot.iso
    • 校验文件:https://dl.rockylinux.org/vault/rocky/9.3/isos/x86_64/CHECKSUM

    国内镜像示例(已校验路径可用):

    • 阿里云(rockylinux-vault):https://mirrors.aliyun.com/rockylinux-vault/9.3/isos/x86_64/

    说明:目录中带 Rocky-9-latest-* / Rocky-x86_64-* 的文件在 9.3 归档目录内通常与对应的 Rocky-9.3-* 为同一批镜像;归档修复请优先下载文件名含 9.3 的 ISO,避免与当前最新 9.x 混淆。官方 pub/rocky/9.3 若已清空,以 vault 路径为准。部分国内站未完整同步 vault ISO 时,请直接使用 dl.rockylinux.org

    校验示例(下载后建议执行)

    # Ubuntu
    sha256sum -c SHA256SUMS --ignore-missing
    
    # CentOS 7.9
    sha256sum -c sha256sum.txt --ignore-missing
    
    # Rocky 9.3(CHECKSUM 文件格式以官方为准,也可用单独的 *.iso.CHECKSUM)
    sha256sum -c Rocky-9.3-x86_64-minimal.iso.CHECKSUM
    

    第一章 Ubuntu 20.04 引导修复

    1.1 常见现象

    • 停留在 GRUB,或报错 error: no such partition / unknown filesystem
    • 选中内核后 kernel panic、initramfs 报错,或找不到 vmlinuz / initrd.img
    • 根分区 UUID 变更导致无法挂载 root

    1.2 进入救援环境并识别分区

    1. 使用 Ubuntu 20.04 安装 ISO 启动,选择 Try Ubuntu 进入 Live 环境。
    2. 打开终端,确认分区布局:
    sudo lsblk -f
    sudo blkid
    
    用途 典型特征
    根分区 / 多为 ext4,容量最大或含 /etc/usr
    独立 /boot(若有) 多为 ext4,约 512MB–2GB
    EFI 分区(UEFI) vfat/FAT32,约 100–512MB,PARTLABEL 常为 EFI

    1.3 挂载并 chroot

    按实际设备名替换。有独立 /boot 时,必须先挂载 /boot,再挂载 /boot/efi

    # 示例:根=/dev/sda2,独立 boot=/dev/sda3,EFI=/dev/sda1
    sudo mount /dev/sda2 /mnt
    sudo mount /dev/sda3 /mnt/boot          # 无独立 /boot 则跳过
    sudo mount /dev/sda1 /mnt/boot/efi      # BIOS/Legacy 跳过
    
    for i in /dev /dev/pts /proc /sys /run; do
      sudo mount --bind "$i" "/mnt$i"
    done
    # 便于 chroot 内使用网络(可选)
    sudo cp -L /etc/resolv.conf /mnt/etc/resolv.conf
    
    sudo chroot /mnt
    

    1.4 修复 GRUB

    在 chroot 内按固件模式 二选一

    # ---- BIOS(Legacy)----
    grub-install /dev/sda
    update-grub
    
    # ---- UEFI ----
    grub-install --target=x86_64-efi --efi-directory=/boot/efi \
      --bootloader-id=ubuntu --recheck
    update-grub
    

    1.5 重建 initramfs 并核对 fstab

    update-initramfs -u -k all
    blkid
    cat /etc/fstab
    

    若 UUID 已变,用 blkid 结果同步修改 /etc/fstab(以及必要时 /etc/default/grub 后重新 update-grub)。

    1.6 退出与验证

    exit
    sudo umount -R /mnt
    sudo reboot
    

    取出安装介质,从硬盘启动。仍失败时可在 GRUB 编辑内核参数临时追加 nomodeset,或回到 Live 环境对 未挂载 分区执行 sudo fsck -y <设备>


    第二章 CentOS 7.9 引导修复

    2.1 常见现象

    • GRUB2 报错:file not foundunknown filesystem
    • 停在 dracut:找不到 root、LVM 或相关设备
    • 内核升级中断 / /boot 损坏导致无法引导

    2.2 进入救援环境

    1. 使用 CentOS 7.9 安装 ISO 启动 → TroubleshootingRescue a CentOS system
    2. 选择将系统挂载到 /mnt/sysimage(Continue)。
    3. 救援环境常以只读挂载,先改为可写再 chroot:
    mount -o remount,rw /mnt/sysimage
    mount | grep /mnt/sysimage   # 确认 /boot、/boot/efi 是否已挂上
    chroot /mnt/sysimage
    

    自动挂载失败时,在 未 chroot 的救援 shell 中手动挂载(设备名按实际修改):

    vgscan
    vgchange -ay
    
    mkdir -p /mnt/sysimage
    mount /dev/mapper/centos-root /mnt/sysimage
    mount /dev/sda1 /mnt/sysimage/boot              # 独立 /boot
    # UEFI 再挂 EFI:
    # mount /dev/sda2 /mnt/sysimage/boot/efi
    
    mount -t proc proc /mnt/sysimage/proc
    mount -t sysfs sys /mnt/sysimage/sys
    mount --bind /dev /mnt/sysimage/dev
    mount --bind /run /mnt/sysimage/run
    
    chroot /mnt/sysimage
    

    文件系统检查须在挂载前进行,例如:fsck -y /dev/mapper/centos-root

    2.3 重装 / 修复 GRUB2

    [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
    
    # ---- BIOS ----
    grub2-install /dev/sda
    grub2-mkconfig -o /boot/grub2/grub.cfg
    
    # ---- UEFI(需已挂载 /boot/efi;重装包需要可用 yum 源/网络)----
    yum reinstall -y grub2-efi-x64 shim-x64
    grub2-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=centos
    grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
    

    核对 /etc/default/grubrd.lvm.lv=root= 等与当前 VG/LV 名称一致,修改后重新执行对应的 grub2-mkconfig

    2.4 重建 initramfs

    救援环境的 uname -r 通常不是 故障系统内核,务必显式指定版本:

    rpm -q kernel
    ls /boot/vmlinuz-* /boot/initramfs-*.img
    
    # 将版本号换成 ls 看到的实际内核,例如 3.10.0-1160.el7.x86_64
    KVER=3.10.0-1160.el7.x86_64
    dracut -f /boot/initramfs-${KVER}.img ${KVER}
    

    2.5 核对配置并重启

    blkid
    cat /etc/fstab
    exit
    reboot
    

    第三章 Rocky Linux 9.3 引导修复

    3.1 常见现象

    • 进入 grub> 命令行,或固件中丢失 Rocky 启动项
    • dracut 无法解析 root UUID / LVM
    • /boot 或 EFI 文件缺失;SELinux 上下文异常导致无法进入多用户模式

    3.2 进入救援环境

    1. 使用 Rocky 9.3 安装 ISO 启动 → TroubleshootingRescue a Rocky Linux system
    2. 选择 Continue,将系统挂载到 /mnt/sysimage
    3. 改为可写并 chroot:
    mount -o remount,rw /mnt/sysimage
    # UEFI:确认 EFI 已挂载
    ls /mnt/sysimage/boot/efi/EFI 2>/dev/null || \
      mount /dev/sda1 /mnt/sysimage/boot/efi   # 分区号按实际修改
    
    for i in /dev /dev/pts /proc /sys /run; do
      mount --bind "$i" "/mnt/sysimage$i"
    done
    
    chroot /mnt/sysimage
    

    默认 LVM 卷组名常见为 rl(以 vgs 为准)。需检查文件系统时,在挂载前执行 fsck

    3.3 修复 GRUB2 与 EFI 启动项

    [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
    
    # ---- BIOS ----
    grub2-install /dev/sda
    grub2-mkconfig -o /boot/grub2/grub.cfg
    
    # ---- UEFI ----
    dnf reinstall -y grub2-efi-x64 shim-x64
    grub2-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=rocky
    grub2-mkconfig -o /boot/grub2/grub.cfg
    
    # 查看 / 必要时重建固件启动项(-d 磁盘、-p EFI 分区号)
    efibootmgr -v
    # efibootmgr -c -d /dev/sda -p 1 -L "Rocky Linux" -l '\EFI\rocky\shimx64.efi'
    

    3.4 重建 initramfs

    同样不要依赖救援环境的 uname -r

    ls /boot/vmlinuz-*
    # 重建全部已安装内核的 initramfs
    dracut --force --regenerate-all
    
    # 或只重建某一个:
    # KVER=5.14.0-362.24.1.el9_3.x86_64
    # dracut -f /boot/initramfs-${KVER}.img ${KVER}
    

    若 root 在 LVM 上,确认卷组已激活,且 grub / fstab 指向一致:

    vgchange -ay
    grep -E 'rd.lvm|root=' /etc/default/grub
    grep -E 'UUID=|/dev/mapper' /etc/fstab
    

    3.5 SELinux 异常时的处理

    仅在确认与 SELinux 相关(权限/标签类报错)时使用:

    1. 开机在 GRUB 内核行临时追加 enforcing=0,先进入系统。
    2. 执行完整重标签后重启:
    touch /.autorelabel
    reboot
    

    3.6 退出与验证

    exit
    reboot
    

    进入系统后建议检查:

    systemctl is-system-running
    efibootmgr -v 2>/dev/null || true
    df -h / /boot
    ls /boot/efi/EFI/rocky 2>/dev/null || true
    

    附录:通用排查清单

    检查项 说明
    固件模式一致 安装/修复时的 BIOS 与 UEFI 必须与当前固件设置一致
    root 标识一致 fstab、GRUB 内核参数、initramfs 中的 root 指向同一设备
    /boot 空间 空间耗尽或升级中断会导致内核、initramfs 不完整
    磁盘与文件系统 反复失败时优先对未挂载分区做 fsck,并排查坏道
    LVM / 加密 vgchange -ay 或未解锁 LUKS 时,救援与 chroot 都会失败
    配置备份 修改前备份 grub.cfgfstab/etc/default/grub

    推荐修复顺序:确认分区与固件模式 → 挂载并 chroot → 修复 GRUB/EFI → 重建 initramfs → 核对 fstab/UUID → 重启验证。

    MP3