设为首页 收藏本站
查看: 1178|回复: 0

[经验分享] Linux之grub的运行机制及grub修复

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-6 14:46:24 | 显示全部楼层 |阅读模式
理论区:
GNU GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。
位于磁盘的0磁头(盘面),0磁道,1扇区位置,该位置共计有512Byte,至于前446个字节是grub。
目前,grub现有两个版本,0.x系列被称为是grub1,也被称为grub legacy,CentOS5以及CentOS6上用的是0.x系列;1.x系列被称为是grub2,用于CentOS7;目前CentOS6依旧是企业及的主流版本,所以这里我们主要讨论Grub1的工作机制。
Grub的主要功能便是提供选择菜单,加载内核以及转移控制权,但是我们都知道,mbr中仅有446字节共mbr供其使用,想要实现诸多强大的功能这么小的空间是不可能的,所以,grub在CentOS上主要分为三个步骤,stage1,stage1.5和stage2,突破了传统446字节的限制。
☆Stage1的作用是启动安装在MBR中的bootloader主程序,其作用便是指向stage2,引导stage2运行;
☆Stage1.5作用为让grub程序能够识别grub2所在的分区。或许你也已经发现,在/boot/grub目录下有诸多以stage1_5结尾的文件,表示各种文件系统所对应的stage1_5,和stage1文件一样,能够让grub识别stage2所在分区的文件不是这些,而是在系统安装时,早已确定了stage2所在目录的文件系统格式,并将与之对应的以stage1_5结尾的文件安装至MBR之后的62个扇区内。
☆Stage2   作用:a、提供菜单、并提供交互式接口;b、加载用户选择的内核或操作系统,并允许传递参数给内核;3、提供菜单保护机制,这三项功能在后续的实验中将得以体现。
首先,我们看一下grub的配置文件,其位于/boot/grub/grub.conf,或/etc/grub.conf链接文件:
1
2
3
4
5
6
7
8
9
10
11
[iyunv@www ~]#cat /boot/grub/grub.conf
# 注释信息省略
default=0   #设定默认引导的内核项,以title排序,第一个title为第0项,第二个title为第1项,以此类推;
timeout=5      #表示5秒内若不动键盘,grub将引导默认内核项
splashimage=(hd0,0)/grub/splash.xpm.gz#菜单背景图片路径
hiddenmenu  #表示隐藏grub菜单,要求用户操作键盘才显示菜单,若省略此项表示开启
title CentOS 6 (2.6.32-504.el6.x86_64)  #内核菜单标题
       root (hd0,0)  ##内核所在分区,特别注意,此处不是表示根分区的意思
       kernel /vmlinuz-2.6.32-504.el6.x86_64 roroot=/dev/mapper/vg0-root rd_NO_LUKS rd_NO_DM.UTF-8rd_LVM_LV=vg0/swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0/root  KEYBOARDTYPE=pc KEYTABLE=us rhgbcrashkernel=auto quiet rhgb quiet
       ##内核名称及传递给内核的参数
       initrd/initramfs-2.6.32-504.el6.x86_64.img    #ramdisk名称,版本号及发行版本号必须与内核一致





##特别注意的是,这里的rootKernel所在的分区,并且分区标识和开机后的硬盘及分区标识不一样,对于grub而言,没有硬盘接口类型之分,对其来讲,一切硬盘全部是以hd标识,而第一个0标识第一块硬盘,第二个0表示第一个分区编号。如果kernel在第二块硬盘上的第3个分区上,则表示为(hd1,2),小括号也不可省略!
实验区:
A进入单用户模式的操作:
接下来我们看下开机时grub的显示菜单:
wKiom1XpWAGzsXDzAAB4KZdy-34893.jpg
开机默认显示这个界面,默认5秒内按下键盘任意键,便会出现如下界面:
wKioL1XpWkuzDJmxAAE3pphsfpM812.jpg
上图所示可知,grub配置文件中的title便是在这里显示的白色区域标题,根据方框下部的提示可知,e键可编辑此内容,c键可进入交互式模式,a键可添加参数传递给内核,b键启动,我们按e键看看效果:
wKiom1XpWD7iOW_fAAHSiS4fIrk125.jpg
此时,我们选中kernel项,并在此按e键,便可编辑内核添加参数传递给内核,如果我们的root密码忘记了,或者是系统异常无法进入系统,此处我们可以编辑内核,在内核尾部添加1或者是s或者是single进入单用户模式,如下:
wKioL1XpWnXgMwPKAAEztkRFRqA640.jpg
而后按回车键,接着按b键,便可进入单用户模式
wKiom1XpWFvBmgGWAABCuvtLaZ8207.jpg

       上面我们提到过,grub提供了菜单加密功能,为了演示效果,我编辑一下grub.conf文件,添加一个title,并添加密码项:
       若想给菜单添加密码,需要使用password关键字,可以对编辑加密,也可以对指定内核启动加密,加密可以是明文,但是安全起见,密文密码比较好,并且grub也提供了密码生成工具,具体配置如下图:
1
2
3
4
[iyunv@www ~]#grub-md5-crypt   ##交互式MD5密码生成器
Password:    ##在此输入你想加密的密码
Retype password:     ##重复输入密码
$1$BjkaP$JgcdSQ8V.ZMeM.VXpTFb9/  #将此处生成的字符串粘贴到password后面即可





wKioL1XpWoihU3CrAAKGD1qQN6A138.jpg
现在我们重启进入grub菜单:
wKiom1XpWGzgiiEVAAEu1DIA7vA913.jpg
提示需要按p键输入密码才能继续往后的设置,并且,新添加的标题也成功显示了。我们键入p键: wKioL1XpWp2ShdYVAAE6Mfz4Aqk062.jpg
输入密码后,便可以对选中的内核进行编辑了。由于我们给下面的标题添加了password项,表示启动该内核,也需要输入相应的密码,选中test-title回车出现如下所示:
wKiom1XpWITCDXkeAAAcQcLi1z0428.jpg
只有输入密码才能启动该内核。



grub修复
第一种场景:磁盘无grub,通过其他方式启动的系统,或正常启动后不小心损坏了系统磁盘的mbr中的前446字节:

第一种方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[iyunv@www ~]# dd if=/dev/zero of=/dev/sdabs=200 count=1     
##我将磁盘开头的200byte用0全部覆盖,即当前我的bootloader已被破坏
1+0 records in
1+0 records out
200 bytes (200 B) copied, 0.00829572 s,24.1 kB/s
此时,在不重启系统的情况下,对grub进行修复
[iyunv@www ~]# grub-install--root-directory=/ /dev/sda
##这里的—root-directory=/表示可以在磁盘上找到/boot目录的位置
Installation finished. No error reported.
This is the contents of the device map//boot/grub/device.map.
Check if this is correct or not. If any ofthe lines is incorrect,
fix it and re-run the script`grub-install'.
  
# this device map was generated by anaconda
(hd0)    /dev/sda



修复成功。
重启后,便可以正常引导开机。

第二种方法:进入grub模式进行修复前提:/boot目录得实现存在,并且stage文件都完好

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[iyunv@www ~]# grub    ##进入grub交互式界面
Probing devices to guess BIOS drives. Thismay take a long time.
  
  
   GNU GRUB  version 0.97  (640K lower / 3072K upper memory)
  
[Minimal BASH-like line editing is supported. For the first word, TAB
  lists possible command completions. Anywhere else TAB lists the possible
  completions of a device/filename.]
grub> root (hd0,0)  
root (hd0,0)      ##指定boot分区所在位置,和grub.conf中的意义一样
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)       ##指明将grub安装到那块磁盘上
setup (hd0)
Checking if "/boot/grub/stage1"exists... no
Checking if "/grub/stage1" exists...yes
Checkingif "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5"exists... yes
Running "embed /grub/e2fs_stage1_5(hd0)"...  27 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd0)(hd0)1+27 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.



修复成功,重启便可正常引导开机。
grub损坏,没有进行修复,便重启了,便会发生如下悲剧,无法开机:
wKioL1XpWrWDoZrMAAEltCWWqjk191.jpg
此时,需进入linux的紧急救援模式,使用U盘镜像或光盘镜像引导开机:
wKiom1XpWJjhFw76AAFDtFA5yd8075.jpg
物理机可忽略上一步操作;接下来,设置BIOS开机启动顺序,使用将光盘启动调整到靠前位置,若usb镜像,需将usb调至靠前:虚拟机开机按F2:
wKiom1XpWKGS7BtWAAGe2qGh4hY791.jpg
按F10保存并重启主机:进入如下界面
wKiom1XpWOCQ8FhHAAKoHU--euU142.jpg
或者进入上述界面,按Esc键,进入命令行模式输入:linux rescue并回车
wKioL1XpWzry_FJuAAA_73fq8Ww923.jpg
然后一路ok,直到询问是否开启网络服务,若你修复的时候需要网络功能,便选择开启,只单纯修复grub便可不开启:
wKiom1XpWTKiPB5GAABmtEEaMQA492.jpg
接下来:
wKioL1XpW2PQBs3cAAGW__LwKoc105.jpg
引导程序会检索磁盘是否有安装过的系统分区,并挂载到/mnt/sysimage目录下,选择continue,
wKiom1XpWVHyZxxbAACw3Eb6Xgc575.jpg
系统已被找到,并挂载成功,ok继续;
wKioL1XpW4LgxGBIAABk5qZEFBQ655.jpg
选择启动shell:
wKiom1XpWWqwcw4HAAEsjciuHk0806.jpg
wKioL1XpW5mSkjqBAADqtSOMghE850.jpg
进入grub命令行,便可修复。
此时,将光盘移除,重启便可正常引导系统。

第二种情形:开机时,只显示grub> ,并无法正常引导开机:
wKioL1XpW6WDuJv6AACDsQiOH18230.jpg
此种情况为grub配置文件丢失,需手动引导开机后重建grub配置文件。操作如下:
wKiom1XpWZGxz-JVAAC1McSnJg4202.jpg
使用find命令,搜索第一块磁盘第一个分区是否有内核文件,find (hd0,0)/vm按Tab键,如果自动补全表示内核在第一块磁盘的第一个分区上,接着进行如下操作
wKioL1XpW8Cze346AAEBJEe1Cpc853.jpg
之后,便可正常开机,进入系统后重建grub配置文件便可。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-110217-1-1.html 上篇帖子: Centos7硬件信息查询cpu,mem,fdisk,网卡 下篇帖子: 使用iptables配置linux服务器请求转发 Linux 修复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表