Learner0x5a's Studio.

Linux 手动引导

Word count: 691Reading time: 2 min
2021/01/09 Share

服务器断电后重启,引导出错,需要手动引导进入系统。

Linux启动流程

  1. BIOS程序
  2. GRUB引导
  3. 内核引导
  4. 调用虚拟文件系统initrd
    • 加载驱动
    • 加载真正的根文件系统
    • 执行/sbin/init
    • 系统初始化
  5. 启动终端

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
2
3
4
5
6
7
8
# 指定根文件系统
$ root=(hd3,gpt3)
# 指定内核
$ linux /boot/vmlinuz[Tab补全] root=/dev/sdb3
# 指定虚拟文件系统
$ initrd /boot/initrd[Tab补全].img
# 启动
$ boot

tab补全时,虽然有四个内核可选,但有两个加载失败,最后加载5.3.0-62及对应的initrd,引导成功。

从U盘进入Livecd,查看文件系统/磁盘状态

1
2
3
df -h # 查看已挂载的磁盘分区及挂载点
fdisk -l # 查看磁盘分区,包括未挂载的磁盘
lsblk -l # 查看磁盘分区,包括未挂载的磁盘

可以发现,当前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引导又会出错从而导致系统无法正常被引导启动。

CATALOG
  1. 1. Linux启动流程
  2. 2. GRUB手动引导内核
  3. 3. 从U盘进入Livecd,查看文件系统/磁盘状态
  4. 4. 如何判断文件系统是否需要修复?