GRUB CentOS
一、背景介绍
1 什么是GRUB?
GRUB,即Grand Unified Bootloader,是一种广泛使用的引导加载程序,它允许用户在计算机启动时选择要启动的操作系统,GRUB既支持BIOS系统也支持UEFI系统,并可以引导多种操作系统,如Linux、Windows等。
2 GRUB的主要作用
GRUB的主要功能是加载和转移控制到操作系统内核,通过配置,GRUB还能提供启动菜单,供用户选择不同的启动项或进入不同的系统模式(如单用户模式)。
1.3 为什么在CentOS中使用GRUB?
CentOS作为一款流行的企业级Linux发行版,使用GRUB作为其默认的引导加载程序,GRUB不仅功能强大,而且配置灵活,能够适应各种复杂的启动需求,GRUB还提供了丰富的文档和社区支持,使得问题诊断和解决变得更加容易。
二、GRUB的基本概念
1 GRUB的工作原理
GRUB的工作流程大致分为两个阶段:stage1和stage2,Stage1负责加载stage2,而stage2则负责加载实际的操作系统内核,Stage1通常位于MBR(Master Boot Record)或分区引导扇区(PBR),而stage2则位于/boot/grub目录下。
2.1.1 Stage1和Stage2的区别与联系
Stage1:这是GRUB的第一个加载阶段,负责加载最基本的GRUB代码,这些代码能够找到并加载stage2。
Stage2:这是GRUB的第二个加载阶段,包含更多的功能和驱动程序,用于实际加载操作系统内核。
2.1.2 如何加载配置文件
GRUB通过读取配置文件来了解如何加载操作系统,这些配置文件通常位于/boot/grub/grub.cfg
(对于BIOS系统)或/boot/efi/EFI/centos/grub.cfg
(对于UEFI系统)。
2 GRUB配置文件结构
GRUB的主配置文件通常是/etc/default/grub
和/etc/grub.d/
目录下的文件。/etc/default/grub
定义了全局设置,而/etc/grub.d/
目录下的文件则包含具体的菜单条目配置。
2.2.1 /etc/default/grub文件详解
这个文件中包含了一些全局配置选项,例如默认的启动项、内核参数等。
GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL=console GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
2.2.2 /etc/grub.d/目录说明
该目录包含多个脚本,每个脚本生成一个菜单条目,这些脚本通常以数字加名称的形式命名,如10_linux.conf
,这些脚本会被按顺序执行以生成最终的grub.cfg
文件。
2.2.3 grub.cfg文件的作用
grub.cfg
是由上述配置文件和脚本动态生成的,包含了实际的启动菜单和配置信息,每次更新GRUB配置后,都需要重新生成这个文件。
三、GRUB安装与配置
1 安装前的准备
在安装GRUB之前,需要确保系统的BIOS或UEFI设置正确,并且已经安装了必要的软件包。
3.1.1 检查系统环境
确保系统已经安装了CentOS,并且具备网络连接能力以便下载安装必要的软件包。
3.1.2 下载必要的软件包
如果还没有安装GRUB相关的软件包,可以使用yum进行安装:
sudo yum install y grub2
2 安装GRUB步骤
安装GRUB的过程包括安装stage1和stage2,以及配置MBR或PBR。
3.2.1 安装stage1
将stage1安装在MBR或PBR上:
sudo grub2install /dev/sda
注意:/dev/sda
是硬盘设备名,根据实际情况进行调整。
3.2.2 安装stage2
将stage2安装到指定位置,通常是/boot/grub
目录:
sudo grub2install dir=/boot/grub /dev/sda
3 配置GRUB
配置GRUB涉及编辑相关配置文件,并更新配置以生效。
3.3.1 编辑/etc/default/grub文件
根据需求编辑/etc/default/grub
文件,例如添加额外的内核参数:
sudo vi /etc/default/grub
添加如下内容:
GRUB_CMDLINE_LINUX="console=ttyS0,115200n8 crashkernel=auto rhgb quiet"
保存并退出。
3.3.2 更新GRUB配置
修改完成后,需要更新GRUB配置:
sudo grub2mkconfig o /boot/grub2/grub.cfg
对于UEFI系统,命令如下:
sudo grub2mkconfig o /boot/efi/EFI/centos/grub.cfg
3.3.3 重启系统以使更改生效
重启系统以确保所有更改生效:
sudo reboot
四、常见问题及解决方案
1 GRUB无法引导系统
如果遇到GRUB无法引导系统的问题,可以尝试以下方法:
4.1.1 检查配置文件错误
确保/etc/default/grub
和/etc/grub.d/
目录下的配置文件没有语法错误,可以使用grep
命令检查是否有拼写错误或缺少引号等问题。
4.1.2 使用grub命令行修复引导
如果系统无法正常启动,可以尝试进入救援模式或使用Live CD,然后使用以下命令修复GRUB:
sudo mount /dev/sda1 /mnt # 挂载根分区 sudo mount bind /dev /mnt/dev # 绑定设备文件 sudo mount bind /proc /mnt/proc # 绑定进程文件系统 sudo mount bind /sys /mnt/sys # 绑定系统文件系统 sudo chroot /mnt # 切换到chroot环境 grub2install /dev/sda # 重新安装GRUB exit # 退出chroot环境 sudo umount /mnt # 卸载根分区 sudo reboot # 重启系统
注意:根据实际情况调整分区设备名。
2 忘记GRUB密码
如果忘记了GRUB密码,可以通过以下步骤重置:
4.2.1 livecd重置方法
使用Live CD启动系统,然后按照以下步骤操作:
sudo mount /dev/sda1 /mnt # 挂载根分区 sudo mount bind /dev /mnt/dev # 绑定设备文件 sudo mount bind /proc /mnt/proc # 绑定进程文件系统 sudo mount bind /sys /mnt/sys # 绑定系统文件系统 sudo chroot /mnt # 切换到chroot环境 passwd # 修改root密码 touch /fastboot # 创建空文件以强制系统进入单用户模式 exit # 退出chroot环境 sudo umount /mnt # 卸载根分区 sudo reboot # 重启系统
注意:根据实际情况调整分区设备名。
4.2.2 通过编辑配置文件重置密码
也可以通过直接编辑/etc/shadow
文件来重置密码,但这需要对文件系统有深入的了解,并且操作风险较高,建议使用Live CD方法更为安全。
3 GRUB菜单显示不正确
如果GRUB菜单显示不正确,可能是由于配置文件中的错误导致的,可以尝试以下方法:
4.3.1 检查配置文件中的菜单条目
确保/etc/grub.d/
目录下的所有配置文件都没有语法错误,可以使用grep
命令检查是否有拼写错误或缺少引号等问题。
4.3.2 重新生成grub.cfg文件
有时候重新生成grub.cfg
文件可以解决问题:
sudo grub2mkconfig o /boot/grub2/grub.cfg
对于UEFI系统,命令如下:
sudo grub2mkconfig o /boot/efi/EFI/centos/grub.cfg
之后重启系统查看效果。
五、高级配置技巧
1 修改GRUB主题
GRUB支持自定义主题,可以通过编辑/etc/grub.d/40_custom
文件来添加自定义主题,首先下载所需的主题文件,然后将其解压到合适的位置,并在40_custom
文件中添加以下内容:
set color_normal=white/black set color_highlight=black/white set menu_color_normal=cyan/blue set menu_color_highlight=white/blue
保存后重新生成grub.cfg
文件并重启系统即可看到效果。
2 设置双系统引导
如果需要设置双系统引导(如Windows和CentOS),可以按照以下步骤操作:
1、安装Windows和CentOS。
2、确保Windows已经正确安装。
3、安装CentOS时,选择手动分区,并将ESP(EFI System Partition)设置为500MB左右的空间。
4、完成CentOS安装后,使用Live CD启动系统。
5、挂载CentOS的分区并切换到chroot环境。
6、安装GRUB到ESP分区:
sudo grub2install efidirectory=/boot/efi target=x86_64efi bootloaderid=grub recheck nofloppy
7、退出chroot环境并重启系统。
8、进入BIOS设置,将ESP分区设置为首选启动项,保存设置并退出,此时应该可以看到双系统引导菜单。
9、如果需要调整默认启动项或超时时间,可以编辑/etc/default/grub
文件并进行相应设置,将默认启动项设置为Windows:
GRUB_DEFAULT=0
将超时时间设置为5秒:
GRUB_TIMEOUT=5 ``保存后重新生成
grub.cfg`文件并重启系统,现在应该可以在双系统之间自由切换了。 5.3 grub.cfg中的常用参数解析grub.cfg
文件中包含许多常用的参数,可以根据需要进行配置:set default="0"
:设置默认启动项为第一个菜单项。set timeout="5"
:设置菜单显示时间为5秒。menuentry "CentOS Linux (4.4.0)"
:定义一个菜单项,显示文本为“CentOS Linux (4.4.0)”。linux16 /vmlinuz4.4.0core.el7.x86_64 root=/dev/mapper/centosroot ro crashkernel=auto rhgb quiet
:指定内核映像的位置和其他参数,其中root=
指定根文件系统的位置;ro
表示只读模式;crashkernel=auto
启用崩溃转储;rhgb
禁用图形模式;quiet
禁止显示启动信息。