grub:提供一个菜单,允许用户选择要启动的系统或不同的内核版本, 把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权移交给内核;
grub分为三个阶段:
stage1:grub第一阶段存在MBR中,用于引导stage1_5
stage1_5:识别常见的不同的文件系统的
stage2:位于/boot/grub目录下,配置文件用于设定启动时的选项
总结:
BIOS将控制权交给硬盘的主引导区,即MBR。
MBR中的bootloader(stage1)通过内置的地址加载stage1_5;
bootloader通过stage1_5的内容,将分区中的stage2加载;
stage2此时就可以在文件系统中将grub.conf文件加载,让用户看到选项界面。
如何进入单用户模式:
引导内核和硬件驱动启动程序
纠正:find /grub/grub.conf 查找root所在磁盘
grub.conf 配置文件详解
配置项:
default=#: 设定默认启动的菜单项;落单项(title)编号从0开始;
timeout=#:指定菜单项等待选项选择的时长;
splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;
hiddenmenu:隐藏菜单;
password [--md5] STRING: 菜单编辑认证;
title TITLE:定义菜单项“标题”, 可出现多次;
root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”;
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件;
password [--md5] STRING: 启动选定的内核或操作系统时进行认证;
可以使用grub-md5-crypt命令创建密码。示例:
[root@mageedu ~]# grub-md5-crypt Password: Retype password: $1$LduMa$b.xr5xXjzmcTWx/cpqCXa.
然后将密码写在配置文件里
password --md5 $1$LduMa$b.xr5xXjzmcTWx/cpqCXa. 缩进写入配置文件。
可以对菜单进行编辑认证或者对启动的内核进行认证设置。
(即MBR前446个字节;grub的第一阶段)
dd if=/dev/zero of=/dev/sda count=1 bs=200 sync
方法一:grub-install直接修复安装,可以安装grub的三个阶段,如图:
命令:grub-instll --root-directory=/ /dev/sda
不要求指定的根下有boot目录,或者有grub目录,会自动创建
方法二:使用grub命令提示符进行修复
此种要求必须要指定的root的设备上必要有一个grub目录 stage1 stage1.5 stage2都必须存在才可以,不然无法安装成功。
bootloader损坏,并且已经重启主机,主机无法启动,此时需要进入救援模式进行修复。如下图,重启之后,界面无法引导,
1、开机发现已经无法引导加载系统
2、挂载磁盘镜像到虚拟机
3、开机选择Rescue installed system
4、按Esc键,命令行模式下,看到boot 输入:linux rescue 回车
5、选择语言English
6、键盘设置
7、是否开启网络功能
8、正式进入救援模式,并且尝试原有的环境,并将其根挂在/mnt/sysimage目录下
9、开启一个shell进程
10、按照之前提示的方式切换跟到/mnt/sysimage
11、执行grub-install --root-directory=/ /dev/sda 修复grub
12、reboot重新,系统修复成功;
关于新版grub2
新版的grub-install命令指定安装目录时不再使用--root-directory选项,改为 --boot-directory选项,安装文件不是安装在指定目录的/boot/grub下,而是安装在指定目录的/grub下,具体用法为:
grub-install --boot-directory=DIR Install-Device
举个例子说明,如果 /boot分区为 sda1,/ 分区为sda2,在使用救援模式修复grub2到mbr时使用的命令为:
# 如果是以前的grub2,必须先挂载系统的 / 分区,再把系统的 /boot分区挂载到系统 / 分区下 mount /sda2 /mnt mount /sda1 /mnt/boot grub-install --boot-directory=/mnt/boot /dev/sda # 而对于只有 / 分区(假设为 /dev/sda1) ,没有 /boot单独分区的,使用命令为 mount /dev/sda1 /mnt grub-install --boot-directory=/mnt/boot /dev/sda