修复vps上的ubuntu更新后无法启动问题
今天将公司一台ubuntu18.04的vps进行了更新,使用的命令是
sudo apt update && sudo apt upgrade
更新包很快就装完了,不料在执行重启命令后,vps竟然启动不了,登录云服务商的控制台使用vnc方式连接vps,看到的错误信息是:
grub rescue error: file /boot/grub/i386-pc/normal.mod not found
心想可能是由于升级内核之后grub被破坏了,查了一下资料,需要用到的grub命令如下
ls
set
insmod
boot
修复步骤如下
- 步骤1,查看有那些磁盘,我这台机子只有一个磁盘
(hd0,msdos1)
,有多盘的需要使用ls来查找哪个是ubuntu系统盘(示例:ls (hd0,msdos1)
)ls
步骤2,设置环境变量,需要设置grub到/usr/lib/grub路径下,因为/boot/grub/i386-pc/路径下是找不到normal.mod文件的
set root=(hd0,msdos1) set prefix=(hd0,msdos1)/usr/lib/grub
步骤3,加载模块并进入normal模式,进入正常模式后命令行的前缀会由
grub rescue>
变为grub>
insmod normal normal
步骤4,查看磁盘的UUID,设置启动参数时需要使用
ls (hd0,msdos1)
步骤5,查看/boot目录下的镜像文件,我这里的示例是
vmlinuz-4.15.0-101-generic
和initrd.img-4.15.0-101-generic
ls /boot/
步骤6,设置启动参数,需要步骤4获取到的UUID值和步骤5获取到的名称
linux /boot/vmlinuz-4.15.0-101-generic root=UUID=5ba34c3d-bd14-451d-a7d8-09a64009e3f1 initrd /boot/initrd.img-4.15.0-101-generic boot
步骤7,到这一步已经成功启动进入到ubuntu系统,需要重新安装与更新一下grub
# 生成grub.cfg文件 sudo grub-mkconfig -o /boot/grub/grub.cfg # 安装grub,我这里的磁盘设备号是/dev/vda sudo grub-install --recheck /dev/vda # 更新grub sudo update-grub # 完成上述步骤后重启 sudo reboot