grub

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” 命令
原文地址:https://www.cnblogs.com/shenxm/p/8447749.html