GURB详解(实施级)
一、什么是grub
GRand Unified Bootloader,由名字就能看出,这是一个多重开机管理系统。目前在centos 6.x等linux发行版上使用的是0.97版本,在centos 7系列用的是grub2。这里先讨论一下grub0.97版本,grub2的机制已经变了,后续讨论。
二、grub引导的三个阶段
Centos 6.8中在/boot/grub目录下,有如下文件:
其中,有stage1,stage2以及若干个stage1.5。
看字面意思,其启动顺序就是stage1àstage1.5àstage2
stage1执行系统启动,其目的是加载stage2,并将控制权转移到stage2中。stage1.5的作用是连接stage1与stage2。
在stage2阶段,将会读取grub.conf配置文件,根据配置进行设置和显示操作系统选择界面。Stage2包含了除自引导之外的所有功能,是整个grub引导的核心。
首先说stage1,stage1可以看作是booloader的备份,但是又不尽相同,注意,千万不可以将stage1直接覆盖bootloader。
磁盘的第一个扇区,大小为512B,bootloader安装在这个扇区中,占用前446B。然后64B是分区表,接着2B是Magic Number。也就是446+64+2=512
使用dd命令导出磁盘第一个扇区:
dd if=/dev/sda of=./mbr bs=512 count=1
用hexdump打开
红色部分为bootloader,蓝色部分为partation table分区表,×××部分为Magic Number。
备份bootloader
dd if=/dev/sda of=./mbr.img bs=446 count=1
恢复bootloader
dd if=./mbr.img of=/dev/sda bs=446 count=1
资料中显示,stage1.S被放在0面0道的第1扇区,start.S被放在0面0道的第2扇区,而与boot分区相关的文件系统的xxfs_stage1_5被放在0面0道第3扇区开始的扇区里,其占据的扇区数目与该stage1_5文件的大小有关。而其余的stage1_5以及stage2都作为文件被存放在boot分区里。
可是我在测试环境中第二个扇区、第三个扇区一直到第64个扇区,都是空的。可以认为,stage2在磁盘中的位置被写死到stage1中,stage1无需识别文件系统,直接从磁盘指定位置读取指定长度的段。
这里是个疑问,会在以后的学习中注意。
三、grub的安装与修复
grub的安装有两种方式,分别适应两钟不同的情况。
1、 mbr损坏,但是/boot/grub下所有文件都正常,我们只需要修复mbr。
进入救援模式之后,启动grub shell
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... noChecking if "/grub/stage1" exists...yesChecking if "/grub/stage2" exists...yesChecking if "/grub/e2fs_stage1_5"exists... yesRunning "embed /grub/e2fs_stage1_5(hd0)"... 27 sectors are embedded. succeededRunning "install /grub/stage1 (hd0)(hd0)1+27 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded Done.
2、 替换引导。比如,linux在安装时就没有安装引导,或者以前用的是lilo,而现在想用grub。
使用grub-install命令即可。
grub-install /dev/sda //选定你要安装bootloader的磁盘或者分区。
这个命令会自动创建/boot/grub目录,并自动生成stage1 stage1.5和stage2,然后将stage1写入mbr。
四、grub的设置
在这里,首先可以了解一下grub.conf的结构。
default=0 timeout=5 splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32-642.4.2.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-642.4.2.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=autord_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-642.4.2.el6.x86_64.img title CentOS (2.6.32-431.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-431.el6.x86_64.img
default=0 //指定默认的启动项,也就是第几个title。这里是编号为0的title。
timeout=5 //超时时间,5秒钟。5秒钟内不进行选择,那么将会自动启动default所指定的title。
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz //背景图片。这个没有什么实质性的功能hiddenmenu //隐藏菜单,这个没啥实质×××,就是一个定制性的。
pasword zhou //但是这种方式是明文密码,任何人打开grub.conf都能看到。
password --md5$1$jWNz8/$aqDO19NluYIX1zkc1SVGp. //这种是密文密码,虽然可以修改,但是不可以被简单破解。
下面将要开始指定title,这里所写出的title都会在grub的启动列表中显示出来。每个title即指定一个启动,每个启动必须包括三个元素:
1、root元素:其实就是/boot分区所在位置。有些不寻常的时候,安装系统时,安装介质的识别导致磁盘顺序在系统中错误,root 元素的值在移除安装介质后与系统/boot分区所在的位置不一致。
2、kernel元素:指定Linux的kernel文件,同时指定各属性。具体属性参照扩展区域,这里实质性意义也不大,不太常用到修改kernel的参数。
3、initrd元素:指定initramfs所在的位置(6.x系列),initramfs有系统安装时根据系统硬件选择性编译的驱动,所以它不具备通用性,大部分情况下安装时产生的initramfs只能在当前系统中使用。
title CentOS (2.6.32-642.4.2.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-642.4.2.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS.UTF-8 rd_NO_MDrd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-642.4.2.el6.x86_64.img
password --md5$1$jWNz8/$aqDO19NluYIX1zkc1SVGp. //把密码设置在这里,意义完全不同。这里的作用是启动密码,如果要启动该内核,必须输入密码。这个也是拿来玩的东西。
title CentOS (2.6.32-431.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-431.el6.x86_64 roroot=/dev/mapper/VolGroup-lv_root rd_NO_LUKS.UTF-8 rd_NO_MDrd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-431.el6.x86_64.img
综上所述,如果我们要写一个最简化的grub.conf,格式可以如下:
timeout 5 //这个选项最好有,否则重启linux后不会自动进入系统,而是等待启动项选择。 title linux root (hd0,0) kernel /vmlinuz-2.6.32-642.4.2.el6.x86_64 ro root=/dev/sda3 initrd /initramfs-2.6.32-642.4.2.el6.x86_64.img
五、grub的排错
linux偶尔会遇到开机无法启动的情况,无法启动的原因有很多,这里简单写一下常见的。
1、 开机直接显示grub shell。
其实这种是最为容易解决的。因为能出现grub shell说明正常进入了stage2,但是由于grub.conf无法找到或者grub.conf中所写入的配置不正确,导致grub无法引导启动。
如果是grub.conf文件的位置被修改而无法找到了,那么在进入grub shell后可以手动查找grub.conf文件,然后
grub>configfile /grub/grub.conf.bak
如果是grub.conf配置出错,或者不存在了。
针对这种问题,可以手动指定grub.conf中title模块的3个元素进行启动。
grub>root (hd0,0) grub>kernel / vmlinuz-2.6.32-431.el6.x86_64 roroot=/dev/sda3 grub>initrd /initramfs-2.6.32-431.el6.x86_64.img grub>boot
这样就可以直接进入系统,然后针对grub.conf进行修改即可。
六、扩展信息
linux系统下与grub相关的命令
1、grub
进入grub shell,可以在其中进行title块的元素指定。包括root、kernel、initrd、configfile,也可以使用find命令进行简单文件查找。
2、grub-crypt
为grub密码进行加密,支持md5、sha-256、sha-512。
参数:
--md5
--sha-256
--sha-512 这个是默认参数,默认以sha-512进行加密。
3、grub-md5-crypt
为grub密码进行md5加密,同grub-crypt --md5
4、grub-terminfo
修改grub所适配的不同终端类型,默认为vt100-compatible,不常用。
转载于:https://blog.51cto.com/doctorz/1935097
GURB详解(实施级)相关推荐
- Pandas知识点-详解行列级批处理函数apply
Pandas知识点-详解行列级批处理函数apply 在Pandas中,DataFrame和Series等对象需要执行批量处理操作时,可以借用apply()函数来实现. apply()的核心功能是实现& ...
- 闲鱼架构专家,详解亿级C2C电商平台,商品体系架构如何搭建?
文章来源:咸鱼技术(XYtech_Alibaba) 作者:意境 背景 闲鱼是一个典型的C2C场景的闲置交易平台,每个在闲鱼的用户都能享受到自由交易的乐趣,只要简单的输入商品名,商品价格,库存等信息就能 ...
- 龙族幻想服务器维修到几点,龙族幻想修理工在哪?详解100级版本最新三个异闻怎么完成...
哈喽小伙伴们,我是阿川.龙族幻想开放一百级版本时,同时更新了三个青铜异闻,很多小伙伴们不知道如何完成,下面为大家详细攻略一下. 养家之人--修理工?之前怕不是在咖啡店打工吧! 异闻"养家之人 ...
- 详解块级元素、行内元素、行内块级元素类型、区别及相互转化
1)块级元素 特点: 1.总是从新的一行开始 2.高度.宽度都是可控的 3.宽度没有设置时,默认为100% 4.块级元素中可以包含块级元素和行内元素 5.块级文字元素中不能放入其他块级元素 6.块级大 ...
- 深度长文|详解现象级ChatGPT发展历程、原理、技术架构详解和产业未来
来源:工业互联网研习社 作者:陈巍博士,曾担任华为系自然语言处理(NLP)企业的首席科学家,文章首发于「先进AI技术深入解读」 工业互联网浪潮来袭,你准备好了吗? 每一代GPT模型的参数量都爆炸式增长 ...
- C语言石头剪子布游戏(详解保姆级)
石头剪子布游戏: (1)定义游戏规则剪刀 干掉 布石头 干掉 剪刀布 干掉石头 (2)显示玩家开始猜拳 (3)接收玩家输入的内容 (4)让电脑随机产生一种拳 (5)判断比较 (1)玩家赢的情况(显示玩 ...
- Html块级元素详解
Html块级元素详解 *块级元素 常见的有:div , table, tr , from , ul ,li ,ol ,h1~h6, p 盒子 div 标签 <div class="bq ...
- 关于数据库连接池满了的问题详解
关于数据库连接池满了的问题详解 代码级问题 实例问题 问题根源 问题扩展 代码级问题 问题重现: 某某系统在生产环境使用一定时间后表现出用户不能登录,后台tomcat日志报如下错: 2008-08-1 ...
- 高性能千万级定时任务管理服务forsun使用详解
Forsun高性能高精度定时服务,轻松管理千万级定时任务. 项目地址: https://github.com/snower/forsun 使用 linux 系统定时器提供精确到秒级的定时调度,长时间运 ...
最新文章
- 5行代码,快速实现图像分割,代码逐行详解,手把手教你处理图像 | 开源
- REST 架构是什么
- Asp.net Mvc Codeplex Preview 5 第三篇 实现Action参数传递繁杂类型 【转】
- excel表格行宽列高怎么设置_excel表格怎么设置行高列宽
- Angular 应用的DevDependencies
- C,C++宏中#与##的讲解
- s3c6410 uboot代码分析《二》
- anyview下载java,下载AnyviewMobile Games Java - 596763 - ebook txt Anyview | mobile9
- 互联网人必读 | 大数据思维的十大核心原理
- ES6新特性_Promise实践练习-多个文件内容读取---JavaScript_ECMAScript_ES6-ES11新特性工作笔记028
- 安卓图片框架:universal-image-loader的高速使用
- coolfire文章之五
- ApowerREC v1.5.6.2 最佳屏幕录像机
- js实现文本语音播放
- 任意多边形的最大内切圆算法
- css样式代码的基本格式
- 关于 Alpine Docker 镜像漏洞 CVE-2019-5021
- API获取订单接口文档使用说明
- 塑料回收标志相关知识
- ad电阻原理图_Arduino动手做(2)光敏电阻模块