主要是双系统下windows升级把grub启动项破坏了, 一开机直接进入grub rescue模式 , 在救援模式下只有很少的命令可以用:
(1) set 查看环境变量 , 这里可以查看启动路径和分区
(2) ls 查看设备
(3) insmod 加载模块
(4) root 指定用于启动系统的分区 , 在救援模式下设置grub启动分区
(5) prefix 设置grub启动路径
grub rescue> ls
(hd0) (hd0,msdos9) (hd0,msdos8) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5) (hd0,msdos2) (hd0,msdos1)
每个人都不一样, 但原理都是一样的.
grub rescue> ls (hd0,msdos1)/
若出现unknown filesystem字样,则尝试下一个
若出现的是你的ubuntu主文件夹下的文件夹和文件的名字,那就是的要找的分区了。
这里我的启动分区是(hd0,msdos8) , 每个人的都不太一样 , 自己替换
grub rescue>set root=(hd0,msdos8)
grub rescue>set prefix=(hd0,msdos8)/boot/grub
grub rescue>insmod normal
grub rescue>normal // 输入这个后就会进入之前的grub启动项了 , 但是grub还是没有修改 , 只是临时的修改了启动项 , 所以还要在选择启动项界面按C键进入grub命令行模式
grub >set root=hd0,msdos8
grub >set prefix=(hd0,msdos8)/boot/grub
grub >linux /boot/vmlinuz-xxx-xxx.img root=/dev/nvme0n1p5 (这里的vmlinuz-xxx-xxx根据自己的机器按tab补全 , 而/dev/nvme0n1p5这个分区 , 因为我的linux是装在我的nvme的固态盘的 , 在linux下这个分区就被映射成nvme0n1p5了 , 这个照自己的机器修改 , 注意这个和上面的hd0不是同一个意义啊 , 自己查看自己机器)
grub >initrd /boot/initrd.img-xxx-xxx.img (同上 , 不赘述了)
grub >boot 启动linux , 即可成功进入linux , 还有一步要做
在linux下更新grub配置
如果是有update-grub命令的(比如ubuntu) , 直接输入
sudo update-grub
sudo grub-install /dev/sda (将grub安装在linux分区 , 注意是sda,硬盘号,而不是具体某个分区号,如sda1)
不支持update-grub命令的可以输入
sudo grub2-mkconfig -o /boot/grub2/grub.cfg (这句相当于上面的第一句 , 有些是grub不是grub2 , 自己都试试就知道了)
sudo grub-install /dev/sda