Linux 服务器无法启动,grub
为什么服务器启动时会卡在 grub 提示符?
grub 是 Linux 最常用的引导加载程序。
当配置文件丢失、引导扇区损坏或分区表变动时,服务器就会无法正常进入系统,屏幕出现 grub rescue> 或 error: no such partition 等字样。
别慌,通过一张 Live USB 就能手动修复。
修复前你需要准备什么
- 同版本的 Linux Live USB(推荐 Ubuntu 或 CentOS 官方镜像)
- 记下系统安装时的磁盘布局(比如 /boot 是否独立分区、使用 BIOS 还是 UEFI)
- 一根网线或临时网络(如果需要安装 grub 包)
如果不知道分区情况,可以先进入 Live 环境用 lsblk 查看。
详细修复步骤(以 CentOS 7 / Ubuntu 20.04 为例)
1. 从 Live USB 启动,打开终端
插入制作好的 U 盘,在 BIOS 中设置从 U 盘启动,进入试用(Try)模式后打开命令行。
2. 挂载系统根分区
先查看磁盘分区:
sudo fdisk -l # 或 lsblk
假设你的根分区是 /dev/sda2,挂载它:
sudo mount /dev/sda2 /mnt
如果 /boot 是独立分区(比如 /dev/sda1),还要额外挂载:
sudo mount /dev/sda1 /mnt/boot
3. 绑定必要的系统目录
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
4. 进入 chroot 环境
sudo chroot /mnt
此时你的终端就像在原来的系统里一样,可以执行修复命令。
5. 重新安装 grub
传统 BIOS 启动:
grub2-install /dev/sda # 注意是整块磁盘,不是分区
UEFI 启动(需要挂载 EFI 分区):
先确认 EFI 分区(通常 /dev/sda1 且类型为 EFI System):
mount /dev/sda1 /boot/efi # 常见挂载点
然后安装:
grub2-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
6. 重新生成 grub 配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg # CentOS/RHEL
# 或
grub-mkconfig -o /boot/grub/grub.cfg # Ubuntu/Debian
7. 退出并重启
exit # 退出 chroot
sudo umount -R /mnt # 卸载所有挂载
sudo reboot # 拔出 U 盘
修复过程中常见的坑
- 忘记挂载 /boot 分区:如果 /boot 独立,没挂载会导致 grub2-mkconfig 找不到内核。
- UEFI 系统使用了 BIOS 安装方式:会报
EFI variables are not supported,需要确认启动模式并用--target=x86_64-efi参数。 - 文件系统损坏:挂载前可以先
fsck -y /dev/sda2修复。 - 网络安装依赖:如果 chroot 后缺少
grub2-efi-x64等包,需要先联网更新:yum install -y grub2-efi-x64 shim或apt install grub-efi-amd64。
如何验证引导已修复
重启后观察启动过程。
如果看到正常的 grub 菜单(显示系统内核选项),并能顺利进入登录界面,说明修复成功。
可以进一步运行 sudo grub2-info 或 efibootmgr -v 查看引导记录。
如果你在修复过程中遇到 grub rescue> 环境,那属于更初级的故障,建议先记下分区布局,再用 Live USB 进入救援模式从头开始。
最后提醒:Linux 服务器无法启动时,grub 引导修复是最常用的救命技能之一。
建议日常给系统打快照或备份 /boot 目录,关键时刻能省下大量排查时间。