记一次坑爹的grub修复

公司的路由盘存放着共享的数据,年前老板最后离开公司的时候来了把硬关机,直接拔电源的那种硬, 过完年回来就发现路由盘死了,上面的seafile系统瘫痪了。

Tater不在,只好自己硬上,修呗,检查发现每次开机map device table都找不到,起初以为硬盘坏了,烧录了一个USB启动盘,用了个软件叫: https://rufus.ie/

自己下载,然后各种安装添加ppa仓库,安装boot-repair工具,完全不好用。后来同事找到一篇帖子,需要修复EFI。。。

步骤如下:

尝试 EFI shell环境启动

开机总是停留在这里:


一般情况下进入 efi shell 后会显示 Device mapping table, 有时候会出现磁盘的信息,就是fs0,当出现的时候说明识别出了硬盘,但是无法引导。

在shell下面键入:

reconnect -r 

重新连接控制器,出现成功后再执行map看看是否有磁盘列出来。

如果这样列出,就可以确认磁盘没有问题了,问题出现在grub上,由于设备是X86_64架构,而且又是用了EFI的启动模式,初步估计问题出在了grub-efi上。

Ubuntu U盘PE,大白菜修复盘~

利用烧录工具烧录Ubuntu16.04 镜像到U盘,软件已经上面提到,简单粗暴,还很小巧。

选择设备镜像文件然后选择U盘设备信息。

一路默认即可。

 

速度很快,也就几分钟就可以完成了,插到PPC上,按下F7, 这个很坑爹的操作尝试了好几次,才找到相应的启动选项:

   

通过USB启动后尝试检查设备是否有问题,能够挂载和读取设备内容说明没有问题。

检查了/boot分区的启动信息,看不出哪里出问题了,有点儿犹豫问题所在,决定还是重新构建grub信息。

这是检查了/etc/fstab文件系统挂载配置文件,没有啥问题,确认是grub的问题了。


再次重启,进入live CD,选择 Try Ubuntu without installing 进入Live OS。
进入系统后打开终端(快捷键Ctrl+Alt+T)这个是最常用的开终端的方式。

先来查看系统分区情况:

sudo fdisk -l  
sudo blkid  
df -Th  
这个系统2块硬盘 /dev/sda ,两个分区,/dev/sda1 为 EFI 分区,/dev/sda2 为系统分区, /dev/sdb1 是存储数据的分区。

为chroot做准备:

1. 挂载分区

sudo mount /dev/sda2 /mnt  
sudo mount /dev/sda1 /mnt/boot/efi

2. 挂载虚拟文件系统

系统上的/dev   /proc  /sys /run  /dev/pts 这些是常见的虚拟文件系统,可以通过循环直接挂载到目标位置。

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done

3. chroot 切换系统根目录

sudo chroot /mnt

4. 最关键的部分-修复引导信息

apt-get update
apt-get -y install grub-efi
grub-install --target=x86_64-efi --efi-directory=/boot/efi
update-grub

--target 指定系统结构
--efi-directory 指定 EFI 分区挂载点

update-grub 更新grub信息

Grub重新安装后,重启:

成功登陆,心里就想骂,这个EFI好鸡肋。

帮助参考文献

https://help.ubuntu.com/community/Grub2/Installing#via_ChRoot

转载记得标明出处,你妹的,打字很累的。白了个白。

发布者

yoyojacky

我是骑驴玩儿漂移, 喜欢玩儿电子,喜欢的编程语言, C, shell, python, 爱玩儿的开发板: 树莓派, arduino,STM32系列, 还有3D 打印机,四轴飞行器,业余时间也喜欢玩儿吉他,非洲鼓. 欢迎来光临我的小站~

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据