前言

在 Linux 有可能存在/boot 分区被修改或者配置文件丢失,导致无法正常启动系统。这时候就需要使用 grub2 的命令模式手动启动系统或者 iso 文件进行修复。

grub2 常用命令

gurb2 中支持了很多命令。

1、查看磁盘分区

ls   -l

详细列出当前的所有设备。对于分区,会显示其 label 及 uuid。

ls (hd1,1)/

列出(hd1,1)分区下文件

2、设置 root 分区(注意,这里的 root 是 grub 的 root 变量,不是真正的 root 分区目录,这里的设置变量时候为了方便操作)

set root=(hd0,msdos1)

ls -l /

ls /

列出当前设为 root 的分区下的文件

3、loopback 挂载 ISO 镜像进行启动

loopback 命令可用于建立回放设备,如

loopback lo0 (hd0,msdos2)/centos7.iso

可以使用 lo0 设备来访问 centos7.iso 里的内容,比如说,可以从 centos7.iso 里的软盘映像中启动

loopback (hd0,msdos2)/centos7.iso

linux (lo0)/isolinux/vmlinuz

initrd (lo0)/isolinux/initrd.img

boot

要删除某一回放设备,可以使用-d 参数:

loopback -d lo0

4、boot 启动加载的配置

应用

1、在 grub2 中建议去编辑/etc/default/grub 这个配置文件,然后使用 update-grub 或者 grub-mkconfig 命令来更新 grub2 的配置文件。有可能出现不小心修改错了/boot/grub/grub.cfg 的配置文件,导致启动系统的时候,停留在 grub>的命令行界面,无法正常启动。这时候就可以通过手动加载文件,启动系统

grub> ls -l (通过ls -l 来一个分区找对应的内核启动文件)

grub> insmod xfs

grub> set root=(hd0,msdos1)   (这里设置找到的boot分区)

grub> linux /vmlinuz-3.10.0-514.el7.x86_64  root=/dev/mapper/centos-root  (root=这里设置的就是系统真正的根分区)

grub> initrd /initramfs-.3.10.0-514.el7.x86_64.img

grub> boot

启动进入系统只有,使用 grub-mkconfig 命令重新生成一个 grub.cfg 的配置文件就可以修复了。

grub-mkconfig -o   /boot/grub2/grub.cfg

2、还有一种情况,就是 boot 分区被格式化,或者/boot 目录被删除了,这时候就没有配置文件了,需要借助另外的启动介质来修复了。

a、在光盘启动项里面选择 Troubleshooting 进行启动

b、接着选择 Resource a CentOS system

c、回车之后就可以进入一个 shell 进行操作了,这时候磁盘的系统默认是被挂载到/mnt/sysimage 里面

d、使用 rpm 命令安装丢失的文件

rpm -ivh /mnt/cdrom/Packages/kernel-3.10.0-514.el7.x86_64.rpm --root=/mnt/sysimage/ --force

e、安装完包以后,/boot 目录的文件就基本都有了,这时候只需要切换一下 root 环境,更新一下配置文件就可以了。

chroot  /mnt/sysimage/

grub-install  /dev/sda  (如果磁盘头的grub被清除掉了,这里重新安装一下)

grub-mkconfig -o   /boot/grub2/grub.cfg