grub 引导-系统引路人

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grub 引导-系统引路人相关的知识,希望对你有一定的参考价值。

<span style="font-family: 楷体, 楷体_GB2312, SimKai;">42.grub.md</span>

    GNU GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。

    回忆下开机流程:Bios(POST)--> Boot Sequence(BIOS) --> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本 --> 关闭和启动对应级别下的服务 --> 启动终端

    从以上流程可以看出,grub处于系统硬件初始化完成和内核初始化开始之前的位置,grub的功能就是;基于硬件环境(就是一个基本功能完整的主机环境),提供一个菜单,允许用户选择要启动的系统或不同的内核版本; 把用户选定的内核装载到RAM中的特定空间中、解压、展开,而后把系统控制权移交给内核。

    CentOS5,6版本用grub 0.x版本:也就是grub legacy, grub 1.x也就是grub2。目前企业应用中较为常用的系统时CentOS6,所以grub1版本是最为常用的,所以基于centos6.7,暂时介绍grub1这个版本。

    grub legacy分段设计为stage1,stage2,其中还存在grub stage1.5,其区别与功用如图:技术分享

    grub配置文件为 /boot/grub/grub.conf 由上图可以看到,该文件位于磁盘上,

grub的功用:功能和作用不一样,作用是功能的必须,功能是作用的升华。

(1) 提供菜单、并提供交互式接口

        e: 编辑模式,用于编辑菜单;

        c: 命令模式,交互式接口;

(2) 加载用户选择的内核或操作系统

        允许传递参数给内核

        可隐藏此菜单

(3) 为菜单提供了两种保护机制

        为编辑菜单进行认证

        为启用内核或操作系统进行认证

grub的命令行接口(centos 6,centos7 和6很大不同

    help: 获取帮助列表

    help KEYWORD: 详细帮助信息

    find (hd#,#)/PATH/TO/SOMEFILE #在指定设备查找文件

    root (hd#,#) # boot文件所在的根文件所在设备

    kernel /PATH/TO/KERNEL_FILE # 设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;

    例如:init=/path/to/init, selinux=0 # 使用这个init作为init程序, selinux=0

                root=/dev/DEVICE #指定内核根文件系统的分区

    initrd /PATH/TO/INITRAMFS_FILE #设定为选定的内核提供额外文件的ramdisk;必须与内核版本完全匹配。

    boot: 引导启动选定的内核;

如何手动在grub命令行接口启动系统:

grub> root (hd#,#)

grub> kernel /vmlinuz-2.6.32-584.el6.x86_64  ro root=/dev/mapper/vg0-root quiet

grub> initrd /initramfs-2.6.32-584.el6.x86_64.img

grub> boot

grub 如何识别设备:

    (hd#,#):

    hd#: 磁盘编号,用数字表示;从0开始编号

    #: 分区编号,用数字表示; 从0开始编号

    示例:(hd0,0)

    说明:grub从grub2开始不用0标识磁盘和分区第一个为:hd(1,1)标识

配置文件:

    /boot/grub/grub.conf 有链接文件为 /etc/grub

    配置项:

default=#: 设定默认启动的菜单项;菜单项(title)编号从0开始;

timeout=#:指定菜单项等待选项选择的时长;

splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;

hiddenmenu:隐藏菜单;hiddenmenu会显示读秒而不进入菜单,回车进菜单,否则显示菜单,等待用户选择;

password [--md5] STRING: 设定认证方式,菜单编辑认证;按“e”键的编辑的时候就会提示输入该密码

title TITLE:定义菜单项“标题”, title 可出现多次,从而引导不同的内核;

[缩进]root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”; 

[缩进]kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS] root=/dev/sdb2 init=/bin/bash :启动的内核,root指定内核rootfs根设备位置,init指定启动init程序位置。

    init 

[缩进]initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件;

[缩进]password [--md5] STRING: 启动选定的内核或操作系统时进行认证;

grub密码生成工具

    grub-md5-crypt工具可以生成命令,由于grub.conf是对所有用户可见的,所以建议用--md5指定加密码串。

        grub-md5-crypt

        输入密码:

        再次输入密码:

进入单用户模式:

(1) 编辑grub菜单(选定要编辑的title,而后使用e命令); 

(2) 在选定的kernel后附加

    1, s, S或single都可以;

(3) 光标定位在kernel所在行,键入“b”命令,进入单用户模式;

恢复grub

    安装grub:

1) grub-install 

    grub-install --root-directory=ROOT /dev/DISK # 所有阶段1、1.5、2 阶段。??是否需要存在grub目录的stage1,1_5、2文件

dd if=/dev/zero of=/dev/sda bs=200 count=1                
grub-install --root-directory=/ /dev/sda                
reboot

(2) grub # 需要所有阶段1、1.5、2 阶段。

    grub> root (hd#,#) # boot根分区位置 

    grub> setup (hd#) #安装第一阶段,需要第一阶段和1.5阶段,hd#为硬盘

grub> root (hd0,0)     root (hd0,0)       
Filesystem type is ext2fs, partition type 0x83    
grub> setup (hd0)                       
setup (hd0)     
Checking if "/boot/grub/stage1" exists... no     
Checking if "/grub/stage1" exists... no     
说明:setup 会需要检测是否存在/boot/grub/stage1setup (hd0)   
Checking if "boot/grub/stage1" exits... no   
Checking if "/grub/stage1" exits... yes   
Checking if "/grub/stage2" exits... yes   
Checking if "/grub/e2fs_stage1_5" exits... yes   
Running "enbed /grub/e2fs_stage1_5 (hd0)" ..   27 sectors are enbended.successed   
Runing "install /grub/stage1 (hd0) (hd0)1+27 p (hd0,0)/grub/stage2 /grub/grub.conf" ... succededDone

    说明:修复bootloader:有grub提示符就可以修复硬盘上系统,光盘,usb都可以。双系统windows坏了,重装没了,用安装盘上的试用linux安装选项进入grub命令修改源磁盘。

以上是关于grub 引导-系统引路人的主要内容,如果未能解决你的问题,请参考以下文章

linux系统管理之grub引导

妙手回春——GRUB系统引导器恢复指南

Linux系统启动详解

怎样修复grub开机引导

Linux系统bootx64是怎么引导grub的

CentOS7 修复GRUB 引导故障