GRUB
GRUB(GRand Unified Bootloader)是bootloader的一种,它的主要功能是选择要启动的内核。
当我们开机时,这个GRUB菜单是隐藏的,
在这个画面时,我们敲任意键,就可以显示出GRUB菜单,然后可以编辑
摁‘e’键可以进入二级目录
这里显示了,kernel这一行显示了要加载的内核版本,initrd显示给内核提供的辅助驱动,来加载逻辑卷等。
把光标调到kernel这一行,再次摁‘e’键,可以在里面添加参数,输入完后,摁回车表示确认,然后在kernel这一行摁‘b’键就可以启动了
例如:我们以1级别启动,来重新设置root的登录密码
在kernel里添加一个参数1,s或S,single,就可以直接登录了
在这里面添加1
这没需要输入用户名和密码,就直接进入root用户了,然后就可以修改密码了,然后输入init3就可以切入正常模式了,在这个过程中,会启动3级别需要的服务
下面我们介绍下grub的组成:
grub有两个版本
grub 0.x:gryb legacy(传统grub)
grub 1.x:grub2
grub legacy:(CentOS5,6)
1、GRUB程序的组成
主要是由device.map,menulst,stage1,stage2,以及一系列的stage1_5组成。
device.map:存放的是内核文件的根分区
stage1: 放在mbr中
stage1_5:存放在mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;
stage2:放在磁盘分区(/boot/grub/)中,作用是提供菜单并提供交互式接口(e编辑菜单,c命令模式),加载用户选择的内核或操作系统,为菜单提供保护机制等
grub.conf:配置文件 还有一个链接文件是/etc/grub.conf
在grub菜单中,摁‘c’键,可以进入交互式接口,指定一些参数,可直接启动
然后回车就可以启动了
grub如何识别设备:
(hd#,#)
hd#: 磁盘编号,用数字表示;从0开始编号
#: 分区编号,用数字表示; 从0开始编号
(hd0,0)表示第一个磁盘的第一个分区
grub的命令行接口
help: 获取帮助列表
help KEYWORD(命令): 某个命令的详细帮助信息
find (hd#,#)/PATH/TO/SOMEFILE:确定某文件是否存在
root (hd#,#) 用来设定grub的根只能指向一个设备;这个根不是文件系统的根
kernel /PATH/TO/KERNEL_FILE: 设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;
例如:init=/path/to/init, selinux=0(表示禁用内核中的selinux功能)
initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核提供额外文件的ramdisk;要与内核版本号完全匹配
boot: 引导启动选定的内核;
直接在命令行输入比较麻烦,就可以下写到配置文件中,
配置文件:/boot/grub/grub.conf 还有一个链接文件是/etc/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命令
为grub菜单或者内核进行认证
修改配置文件为下图,
为了演示效果,我们在全局加了一个password选项,有添加一个title在里面添加一个password选项
然后我们进入grub菜单,这个时候就有两个选项了,这个时候摁‘e’键没用,使用‘p’键,输入密码,才能使用‘e’键,要么选定一项直接使用回车启动,但是如果在title里加入了password是对内核加密,需要先输入密码才能启动
使用‘p’键,输入密码之后才能使用grub菜单项
这个时候可以对这两个选项进行修改了,第一个title没有添加password选项,回车选定之后可以直接启动,如果选择第二个,回车之后会提示让输入密码,才能启动
修复安装grub
(1) grub-install 这个命令安装grup
grub-install --root-directory=ROOT /dev/DISK
(2) grub 进入命令行模式,这种方式根文件系统要提前存在,而且要有grub目录,里面的文件是齐全的
grub> root (hd#,#)
grub> setup (hd#)
在虚拟机中添加一块新硬盘,然后把grup装进入,然后使用者新硬盘建一个新的虚拟机,然后启动
首先添加一块新硬盘,然后分区,格式化文件系统等(如有不会的,可以查看以前的博客)
然后在/mnt下创建一个boot目录,然后把新硬盘的第一个分区,挂载到刚创建的目录
然后安装grup,
这就安装好了,然后验证下
但是没有配置文件,所以要自己写一个,也没有内核和initrd,所以需要复制本机的内核和initrd到新硬盘下
然后编辑配置文件内容如下
但是,我们把根文件系统指向了/dev/sdb3,但是里面没有文件包,所以我们要把根文件系统里的文件在/dev/sdb3中创建
这里面并没有文件,我们复制一个bash到新硬盘下,并且要把依赖到的文件也复制过去,等下开机时,可以直接启动bash
然后还要系统系统的init程序,如果不指定,就会自动启动/sbin/init因为我们这个硬盘里没有,会出错的
你需要确定你刚在配置的那个硬盘的路径
然后使用vm创建一个新虚拟机,其他都一样,然后在选择磁盘的时候,选择使用现有的
然后创建完成,启动就可以查看了
然后直接启动,出现grub菜单,然后使用‘e’键,然后在kernel这一行,加入参数selinux=0,这个参数要加在init前面,然后回车回到kernel这一行,然后摁‘b’启动就可以了
这就成功了
把自己系统的mbr弄坏,然后使用光盘的grup进行引导修复
这就把grub的第一阶段给弄坏了,
如果这个时候你的系统是开机状态,直接使用命令grub-install --root-directory=/ /dev/sda就可以直接修复了,
然后sync同步以后,在重启就没有问题了,
也可以使用grup然后回车进入命令行模式进行修复
如果你的系统是关机,再启动就不行了,只能使用紧急救援模式进行修复
再把mbr弄坏,然后使用救援模式进行修复
弄坏之后进行重启,然后把光盘镜像挂载上,然后重启
然后选择第三项,即Rescue installed system 然后回车
或者摁‘ESC’输入linux rescus回车就可以了
然后根据提示做就行了
然后切换到根下,使用chroot /mnt/sysimage/ 切到实际的根上,然后执行grub-install就行了
然后exit回到救援模式的bash下重启就行了(光盘卸掉)
本文出自 “10520982” 博客,请务必保留此出处http://10530982.blog.51cto.com/10520982/1691411
原文地址:http://10530982.blog.51cto.com/10520982/1691411