ls命令可以列出Grub能搜索到的所有设备,其中(hdX, Y)
指硬盘驱动器X
中的分区Y
。 然后继续ls来确认要启动的Linux内核所在的路径。
# 查看可选驱动器
ls
# 试试哪个里面是 Linux
ls (hdX,Y)/boot/grub
set命令是用来设置Grub环境变量的。比如设置prefix
之后我们便不需要写完整路径了,只需要给出以根路径开始的绝对路径即可(见下文)。 insmod用来载入一些Grub的动态模块,比如linux.mod
。
set prefix=(hdX,Y)/boot/grub
insmod (hdX,Y)/boot/grub/linux.mod # 可选,为了方便接下来的命令
set root=(hdX,Y)
linux命令用来从文件载入一个内核,载入之后用initrd命令载入初始化内核的内存(还可以在内存中设置一些参数)。 最后用boot命令启动它!
# 也可以选用别的内核,如/boot/vmlinuz.0.62.XXX
linux /vmlinuz root=/dev/sda5
initrd /initrd.img
boot
系统启动之后我们便可以解决问题了,重新配置内核或者重新配置Grub。 Grub配置文件路径:
grub1:/boot/grub/grub.cfg
grub2:/etc/default/grub
一般只需要更新Grub配置文件中的内核列表,根据你的系统环境不同,执行下面三者之一即可:
update-grub #ubuntu grub
update-grub2 #ubuntu grub2
grub-mkconfig -o /boot/grub/grub.cfg #archlinux
在Grub配置文件中,可以设置开机时启动列表的顺序,这个可能比较有用:
# 如果是saved, 旧版grub需设 GRUB_SAVEDEFAULT=true() #需要更新内核列表
GRUB_DEFAULT=0,1,2...saved
上文通过Grub Rescue来手动引导内核的前提是Grub可以正常启动,只是Grub找不到内核了。但对于安装Windows导致的MBR被重写,Grub也是无法启动的。 这时需要用一个Linux启动盘来进入系统,然后将Grub启动记录写入MBR:
# Linux系统所在分区
mount /dev/sda7 /mnt/linuxsys
# 如果/boot 单独分区
mount /dev/sda6 / mnt/linuxsys/boot
# grub1.99与以后(grub2)
grub-install --boot-directory=/mnt/linuxsys/boot /dev/sda
# grub1.98与以前(grub1)
grub-install --root-directory=/mnt/linuxsys /dev/sda
重启进入到grub菜单界面时,按“c”键进入grub命令模式。
grub> rootnoverify (hd0,0)
grub> chainloader +1
grub> makeactive
grub> boot
转自:https://harttle.land/2015/10/02/grub-rescue.html