「Grub」- 手动引导启动

问题描述

当操作开机启动后,在进入 GRUB 菜单时,按 c 键,能够进入 GRUB 的命令行模式。当终端显示 grub> 提示符时,表示已经进入命令模式。

当进入命令模式后(普通场景)

### #1 查看所有分区
grub> ls

### #2 查看分区下的内容
grub> ls (hd0,1)/

### #3 设置根分区及启动盘
grub> set root=(hd0,1)
grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
grub> initrd /boot/initrd.img-3.13.0-29-generic
grub> boot

# 「普通场景」:这里的普通场景指的是「BIOS」+「MBR」+「普通的磁盘分区」,没有使用RAID和LVM等等技术。

如果处于救援模式

如果你进入了救援模式,那执行的命令会有所不同。此时的命令提示符为grub rescue>,表示救援模式:

grub rescue> set prefix=(hd0,1)/boot/grub
grub rescue> set root=(hd0,1)
grub rescue> insmod normal
grub rescue> normal
grub rescue> insmod linux

# 后面的步骤就是前面一样了
grub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
grub rescue> initrd /boot/initrd.img-3.13.0-29-generic
grub rescue> boot

如果系统进入救援模式,那通常是没有找到/boot/grub/目录。可能还有其他原因,具体情况要具体分析。

修复系统引导

当进入系统后,第一件事情是修复引导:

update-grub

如果你的系统是GPT分区表,在引导修复的时候需要进行一些不同的操作。

通过 chroot 修复

boot – How do I run update-grub from a LiveCD? – Ask Ubuntu

mount /dev/sda5 /mnt

mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount --bind /proc /mnt/proc

mount /dev/sdaX /mnt/boot                                                       # 如果引导是单独分区,则必须执行

chroot /mnt
update-grub
exit

// 最后,卸载并重启

umount /mnt/dev
umount /mnt/sys
umount /mnt/proc
umount /mnt/boot
umount /mnt/

reboot

参考文献

How to Rescue a Non-booting GRUB 2 on Linux