CentOS 启动 GRUB
在 CentOS 系统中,GRUB(Grand Unified Bootloader)是默认的引导加载程序,它负责在系统启动时加载操作系统内核和初始文件系统,在某些情况下,GRUB 可能会遇到问题,导致系统无法正常启动,本文将详细介绍如何在 CentOS 中启动 GRUB,包括手动启动系统、修复 GRUB 配置文件以及常见问题的解决方法。
一、了解 GRUB 和问题原因
GRUB 是一个多操作系统启动管理器,允许用户选择要启动的操作系统,当系统启动时,GRUB 会读取其配置文件(通常是/boot/grub2/grub.cfg
)以确定可用的操作系统和内核版本,GRUB 配置文件丢失或损坏,或者 MBR(Master Boot Record)中的引导程序遭到破坏,就会导致系统无法正常启动,而显示 "GRUB>" 命令提示符。
二、找出正确的启动设备和分区
在 "GRUB>" 提示符下,可以使用以下命令查看可用的设备和分区:
grub> ls
输出可能如下:
(hd0) (hd0,msdos1) (hd0,msdos2)
这里,(hd0)
表示第一个硬盘,(hd0,msdos1)
和(hd0,msdos2)
分别表示该硬盘上的第一个和第二个分区。
三、手动启动 Linux 系统
一旦确定了正确的设备和分区,可以通过以下步骤手动启动系统:
1、设置 root 设备:假设 root 设备为(hd0,msdos1)
,则执行:
grub> set root=(hd0,msdos1)
2、加载内核和初始 RAM 磁盘:
grub> linux /vmlinuz3.10.01160.el7.x86_64 root=/dev/sda1 grub> initrd /initramfs3.10.01160.el7.x86_64.img
这里,/vmlinuz3.10.01160.el7.x86_64
是内核文件,/initramfs3.10.01160.el7.x86_64.img
是初始 RAM 磁盘镜像文件,/dev/sda1
是根文件系统所在的分区。
3、启动系统:
grub> boot
四、修复 GRUB
如果能够成功手动启动系统,接下来可以修复 GRUB,以下是具体步骤:
1、重新生成 GRUB 配置文件:
sudo grub2mkconfig o /boot/grub2/grub.cfg
2、安装 GRUB 到 MBR:
sudo grub2install /dev/sda
这里,/dev/sda
是要安装 GRUB 的硬盘设备。
五、常见问题及解决方法
1. GRUB 配置文件错误或丢失
GRUB 配置文件丢失或配置错误,可以使用以下命令重新生成:
sudo grub2mkconfig o /boot/grub2/grub.cfg
然后重新安装 GRUB:
sudo grub2install /dev/sda
2. MBR 记录中的引导程序被破坏
MBR 中的引导程序被破坏,可以使用以下命令修复:
sudo grub2install /dev/sda
3. 无法识别正确的分区
在 "GRUB>" 提示符下,使用ls
命令查看所有可用的分区,并尝试不同的分区直到找到正确的为止。
grub> ls (hd0,msdos1)/ grub> ls (hd0,msdos2)/
找到包含vmlinuz
和initramfs
文件的分区即为正确的分区。
4. 进入单用户模式或紧急模式
如果需要进入单用户模式或紧急模式进行修复,可以在内核参数后添加systemd.unit=emergency.target
:
grub> set root=(hd0,msdos1) grub> linux /vmlinuz3.10.01160.el7.x86_64 root=/dev/sda1 systemd.unit=emergency.target grub> initrd /initramfs3.10.01160.el7.x86_64.img grub> boot
通过以上步骤,您可以在 CentOS 系统中启动 GRUB 并进行必要的修复,了解 GRUB 的基本概念和操作方法,可以帮助您在系统启动问题出现时快速恢复系统的正常运行,以下是两个常见问题及其解答:
Q1:如何更改 GRUB 的默认启动项?
A1:可以通过编辑/etc/default/grub
文件中的GRUB_DEFAULT
行来更改默认启动项,将GRUB_DEFAULT=0
修改为GRUB_DEFAULT=1
,然后将更改应用到 GRUB 配置文件:
sudo grub2mkconfig o /boot/grub2/grub.cfg
Q2:如何在 GRUB 菜单中添加自定义启动项?
A2:可以在/etc/grub.d/
目录下创建一个新的配置文件,例如40_custom
,并在其中添加自定义的启动项。
#!/bin/sh echo "Custom entry" >> /boot/grub2/grub.cfg echo "menuentry 'My Custom Entry' {" >> /boot/grub2/grub.cfg echo " set root=(hd0,msdos1)" >> /boot/grub2/grub.cfg echo " linux /vmlinuz3.10.01160.el7.x86_64 root=/dev/sda1 custom_param=value" >> /boot/grub2/grub.cfg echo " initrd /initramfs3.10.01160.el7.x86_64.img" >> /boot/grub2/grub.cfg echo "}" >> /boot/grub2/grub.cfg
然后重新生成 GRUB 配置文件:
sudo grub2mkconfig o /boot/grub2/grub.cfg