服务器断电后重启,引导出错,需要手动引导进入系统。
Linux启动流程
- BIOS程序
- GRUB引导
- 内核引导
- 调用虚拟文件系统initrd
- 加载驱动
- 加载真正的根文件系统
- 执行/sbin/init
- 系统初始化
- 启动终端
GRUB手动引导内核
在grub shell中ls查看硬盘分区情况,常见的分区方案是,对于硬盘sdx,sdx1为boot分区(/boot),sdx2为swap分区([SWAP]),sdx3为根分区(/)。
逐个尝试ls (hdx, y)/boot/grub,找到根文件系统所在分区(通常y=gpt3),也可以ls (hdx, y)查看该分区下所有文件。
如果手上有LiveCD,可以进LiveCD看一下分区情况。
所以该机器的引导参数如下:
1 | # 指定根文件系统 |
tab补全时,虽然有四个内核可选,但有两个加载失败,最后加载5.3.0-62及对应的initrd,引导成功。
从U盘进入Livecd,查看文件系统/磁盘状态
1 | df -h # 查看已挂载的磁盘分区及挂载点 |
可以发现,当前boot在sdd,挂载点是/cdrom,即sdd是U盘上livecd的系统。
查看另外的磁盘,找到EFI分区和swap分区所在的磁盘,比如sdb,说明原来的系统在sdb上。
根文件系统在Type:Linux所在的分区,例如/dev/sdb3,对应到grub里面,应该是某块硬盘的第三个分区,例如(hd3,gpt3)。
注意:USB的插入会影响grub中硬盘的编号,同一块硬盘有时候是hd3,有时候是hd4
如何判断文件系统是否需要修复?
一般情况下,linux系统启动阶段,如果文件系统出现了crash,会提示有orphan node,无法正常启动。此时,需要使用fsck来修复文件系统。一般来说,异常断电就可能出现这种情况。
异常断电情况下,需要手动按照之前记录的挂载目录参数来手动进行引导。如果手动引导仍然无法成功,大概率是文件系统挂了,此时需要先修复文件系统,再进入grub中手动引导。
grub启动引导记录的修复(通过boot-repair修复后,再手动检查grub启动引导配置文件是否无误),可以保证正常重启服务器是没问题的。
但是通常异常断电的情况下,grub引导又会出错从而导致系统无法正常被引导启动。