修复grub启动

项目场景:

使用windows在移动硬盘装ubuntu双系统后,取下硬盘,原本efi引导损坏。


问题描述:

linux调整分区后,开机重启时会出现
error : unknow filesystem
grub rescue>


原因分析:

按linux的计算方式,因本最后一个分区叫(hdx,gptx)因为中间多出了一个分区。现在就成了(hdx,gptx+1)导致原来的grub配置文件中描述的分区已经无法正常找到了。


解决方案:

命令说明:

  • set 查看环境变量,这⾥可以查看启动路径和分区。
  • ls 查看设备
  • insmod 加载模块

环境变量:

  • root 指定⽤于启动系统的分区,在救援模式下设置grub启动分区
  • prefix 设定grub启动路径

GRUB启动不了,会自动进入救援模式。在当前模式下输入:

error:unknown filesystem.
Entering rescue mode...
#查所有磁盘列表
grub rescue> ls
(hd0) (hd0,gpt7) (hd0,gpt6) (hd0,gpt4) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1) 
#查环境变量
grub rescue> set
cmdpath=(hd0,gpt1)/EFI/GRUB
#问题就出现在此外了,原(hd0,gpt6)实际上已经变成了(hd0,gpt7)
prefix=(hd0,gpt6)/boot/grub
root=hd0,gpt6
#查看磁盘下的文件,确定是否是我们想要切换的磁盘
grub rescue> ls (hd0,gpt7)/
./ ../ lost+found/ var/ dev/ run/ etc/ tmp/ sys/
#此处略一些目录
#(关键)设置环境变量,把错误的环境变量修改成正确的
grub rescue> set root=(hd0,gpt7) 
grub rescue> set prefix=(hd0,gpt7)/boot/grub 
grub rescue> insmod normal
#进入熟悉的启动菜单栏
grub rescue> normal

#然后我选择archlinux的启动菜单就可以正常的进入操作系统了。

以上只能暂时解决问题,若想完全修复还需:

进入ubuntu系统后,在终端输入:

#升级grub
sudo update-grub
#查看磁盘状态,找到挂载/boot的分区,比如/dev/nvme0n1p1
dt
#建立连接
sudo grub-install /dev/nvme0n1p1

你可能感兴趣的:(linux,ubuntu,运维)