服务器进入grub

前情提要: 服务器进入initramfs

在上次作死完之后,又换了一个问题,大概是因为系统引导区损坏了。

重启之后,进入了grub rescue界面。按照这篇文章的第一个方法,normal并不奏效,提示“ELF section outside core”。因此采取文章的第二种方法。

使用rufus建了一个ubuntu iso进去U盘里,bios里选择从usb启动,选择try ubuntu进去usb的系统里,用下面命令安装boot-repair-disk。

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair
boot-repair

boot-repair 自动帮忙安装mdadm来识别阵列,在弹出boot-repair的界面时,下面这个,可以先停一停 boot-repair

使用

cat /proc/mdstat

发现系统阵列md0的四块盘正在自动recovery,建议是等它们recovery完。

在recovery完后,再来使用boot-repair的推荐安装模式,然后一直按照提示来即可。理论上来说,这里搞定了直接重启就能进系统了,但是我们仍然进入了grub界面。注意这次是进入了grub界面,并非是grub rescue。在grub界面选择列表这个页面里按c进入命令行模式。

这时的选项和grub rescue里略有不同 首先ls和set查看一下

ls
set

ls每个盘看看有没有filesystem。

ls (md/0,gpt1)

发现我们的系统在(md/0,gpt1)这里,于是进行下一步

set root=(md/0,gpt1)
set prefix=(md/0,gpt1)/boot/grub

下面是不同的地方,设置内核,注意这里root后面必须是系统盘的盘符,对于阵列来讲,盘符有可能是md0,也有可能是md0p1,这是测试了几次才发现的结果,如果发现还是进不去系统,可以回来这里调整这个名字。

linux /boot/vmlinuz-4.15.0-47-generic  root=/dev/md0p1
initrd  /boot/initrd.img-4.15.0-47-generic
boot

注意内核的版本必须一致。

使用boot命令重启后,又进入了initramfs界面,发现提示mount的时候没有找到需要mount的盘,那就先

cat /proc/mdstat

查看需要mount的阵列是否在运行。如果没有 使用类似的命令将阵列先找回来

mdadm -A --force /dev/md0 /dev/sd[abcd]2

但是我们的阵列是已在运行的状态,那就是mount的盘符不对,所以直接手动操作

mount /dev/md0p1 /root
mount /dev /root/dev
mount /run /root/run
exit

exit的时候,如果发现报错信息是内核不对导致卡死,就需要回到grub中,改另外的内核。如果是卡死但没有报内核不对,那还是回grub里把之前的信息都再输一遍,虽然不知道是不是这样,但是经过这个流程服务器总算是成功修复了。