grub
从系统流程中可以得知,在BISO读取相关信息后,接下来就是去第一个可以启动的设备当中的MBR中读取Boot Loader信息。
Boot Loader提供具体菜单功能、直接加载内核信息,以及相关的控制权转交功能。
系统启动必须有Boot Loader,然后才能加载内核。
Boot Loader存在于MBR中,MBR只有512btyes,其中446btyes存储Boot Loader。
实际上,linux将Boot Loader的程序运行与配置项加载分成三个阶段(stage)来运行:
stage 1:运行Boot Loader主程序,这个程序必须安装在启动区(MBR)中。因MBR空间有限,因此在MBR当中仅安装Boot Loader的最小程序,并没有安装Boot Loader的相关配置文件。
stage 1_5:在MBR随后的扇区中存放,主要用于与stage 2所在分区的文件系统进行交互。
stage 2:通过Boot Loader加载所有配置文件及其相关的环境参数信息,这些配置文件及其相关的环境参数都存放于磁盘分区上的/boot/grub目录下。
在/boot/grub目录中:
device.map: 定义了grub安装在哪里
grub.conf: grub的配置文件
menu.lst -> ./grub.conf: grub 的配置文件
splash.xpm.gz: 启动时在grub底下的背景图片
stage1: stage 1的相关说明
stage2: stage 2的相关说明
iso9660_stage1_5: 光驱文件系统的定义
{ffs_stage1_5、fat_stage1_5、jfs_stage1_5、reiserfs_stage1_5、reiserfs_stage1_5、xfs_stage1_5、e2fs_stage1_5、ufs2_stage1_5、minix_stage1_5vstafs_stage1_5}:文件系统的定义
当Boot Loader读取了/boot/grub目录下的文件系统所定义的数据后,就能够识别文件系统并读取在该文件系统上的内核文件了。
grub是目前使用最广泛的linux启动管理程序。
grub最重要的一部分当属识别磁盘信息,grub对硬盘的识别是通过以下方法:
(hd0,0)
注意:
1.硬盘代号以小括号()括起来;
2.硬盘以hd表示,后面会接一组数字,数字间以逗号隔开;
3.是以搜寻到的顺序来作为磁盘的编号,而非根据磁盘的排线编号;
(多硬盘情况,搜寻的次序是根据bios中设置的启动顺序而非插槽编号)
4.第一个搜寻到的磁盘编号为0,第二个为1.以此类推。
5.每块磁盘上的第一个分区编号为0,第二个分区为1,以此类推。
因此(hd0,0)就表示第一块磁盘上的第一个分区
grub: GRand Unified Bootloader
grub 0.97: grub legacy
grub 2.x: grub2
grub legacy:
stage1: mbr
stage1_5: mbr之后的扇区,
让stage1中的bootloader能识别stage2 所在的分区上的文件系统
stage2 :磁盘分区(/boot/grub/)
安装grub(用于修复1-1.5-2阶段的故障):
grub-install
安装grub stage1,1.5,2 到/dev/DISK 磁盘上,并复制GRUB到相关文件到 DIR/boot 目录下
grub-install --root-directory=DIR /dev/DISK
同步sync
grub交互接口
grub> root (hd#,#)
grub> setup (hd#)
grub> quit
配置文件:
grub.conf -> /boot/grub/grub.conf
由anaconda安装向导生成
stage2及内核等通常放置于一个基本磁盘分区
功用:
提供启动菜单、并提供交互式接口
a:内核参数
e:编辑模式,用于编辑菜单
c:命令模式,交互式接口
加载用户选择的内核或操作系统
允许传递参数给内核
可隐藏启动菜单
为菜单提供了保护机制
为编辑启动菜单进行认证
为启用内核或操作系统进行认证
grub 的命令行接口:
在GRUB界面可按照提示输入e、b、c等命令进行相应的编辑,在对应的title中输入c可以进入命令行模式,在命令行中可以输入一些信息:
help: 获取帮助列表
help KEYWORD: 详细帮助信息
find (hd#,#) /PATH/TO/SOMEFILE:
root (hd#,#):
kernel /PATH/TO/KERNEL_FILE:
设定本次启动时用到的内核文件;
额外还可添加许多内核支持使用cmdline 参数
例如:max_loop=100 selinux=0 init=/path/to/init
initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核提供额外文件的 的ramdisk
boot: 引导启动选定的内核
grub也有自己的保护机制,只有通过认证才能修改grub.conf信息。
可以通过以下方式来对grub.conf进行保护:
1.在第一个title上添加passwd --md5 ***************(这个也可以使明码)主要用于保护编辑功能;
2.在某个title内添加passwd --md5 ***************主要用于保护内核;
生成密码的命令:grub-md5-crypt
cat /proc/cmdline 内核参数
内核参数文档:
/usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt
识别硬盘设备
(hd#,#)
hd#: 磁盘编号,用数字表示;从0 开始编号
#: 分区编号,用数字表示; 从0 开始编号
(hd0,0) 第一块硬盘,第一个分区
手动在grub 命令行接口启动系统
grub> root (hd#,#)
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
配置文件:
/boot/grub/grub.conf
default=#:
设定默认启动的菜单项;落单项(title) 编号从0开始
表示默认启动条目,若同时装有多个内核或操作系统,0表示第一个title系统,1表示第二个title系统,以此类推。
timeout=# :
指定菜单项等待选项选择的时长
表示可供选择的等待时间,如果超过这个时间,则使用默认的启动条目default定义的。
超时时长,单位是秒。
splashimage=(hd#,#)/PATH/XPM_FILE:
grub菜单背景图片文件路径
定义启动是的背景图片信息
hiddenmenu :
隐藏选择菜单
启动时是否显示菜单,默认是不显示,若想要显示可将该配置注释掉。
password [--md5] STRING:
启动菜单编辑认证
title TITLE :
定义菜单项“标题”,可出现多次
定义各个操作系统的名称或系统内核
root (hd#,#) :
查找stage2及kernel文件所在设备分区。
为grub的根表明内核文件存放的位置,这里是指分区位置,而非根目录。
指明引导当前操作系统或内核文件所在的分区
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:
启动的内核,
内核文件路径、根文件系统所在设备(hd0,0),以及传递给内核的参数
内核的名称以及以下启动的核心参数。
由于启动过程中需要挂载根目录。
因此就需要指定根目录所在分区。
rhgb表示图形显示不显示启动过程,quiet表示静默模式加载内核。
rhgb删除后,会直接显示启动过程。
initrd /PATH/TO/INITRAMFS_FILE:
内核匹配的ramfs 文件
指明用于辅助内核完成系统启动的ramdisk文件路径再次在内存缓存
就是前面提到initrd,虚拟文件系统
password [--md5|--encrypted ] STRING:
启动选定的内核或进操作系统时进行认证
grub 加密
在/boot/grub/grub.conf文件中
password [--md5|--encrypted ] STRING
生成grub 口令
grub-md5-crypt
grub-crypt
破解root 口令:
1》启动系统时,设置其运行级别1。
启动时,按任意键进入菜单项,并按e进入编辑模式
选择kernel那一行,按e进行编辑,
在行最后添加1,按回车保存退出
按b进行启动,就会进入单用户模式。
然后可以使用passwd命令修改密码
2》光盘启动,直接把/mnt/sysimage/etc/shadow中的口令清空。
root的代表密码的字符串删除
变成如下格式
wang::17417:0:99999:7:::
进入单用户模式 :
编辑grub菜单( 选定要编辑的title ,而后使用e 命令)
在选定的kernel后附加
1, s, S 或single 都可以
在kernel 所在行,键入“b” 命令