linux上常用的两种引导程序:lilo,grub
由于lilo不支持大硬盘,因此主要使用在嵌入式平台上
grub作为一个引导程序,由于其丰富的特性,而MBR只有512bytes,又因为MBR中要包含分区表64bytes,还有4bytes用于保存magic,所以在MBR中bootloader实际可以占据的空间只有446bytes,无法存储具有丰富功能的GRUB程序,因此grub是分段的:stage1,stage1.5,stage2
stage1是存储在MBR中的,不在是传统的引导程序去引导内核,而是引导位于硬盘上的stage2,stage2则实现引导内核,由于内核是存储在文件系统上的,所以为了让stage2可以识别不用类型的文件系统,stage1.5就是用于让stahe2具有识别不同文件系统的能力,一般/boot会单独分区,stage2和内核都是在该分区上,可能会产生为什么stage2引导内核需要识别文件系统,stage1却可以在该分区上引导stage1.5和stage2,这是由于stage1引导方式比较特殊的原因
grub(stage2)的配置文件:/boot/grub/grub.conf
default=0;默认使用哪个title,由于可以有多个内核存在,在该配置文件中,每一个内核需要在一个title的配置片段中,所以用title来标示默认引导的内核
timeout=5超时时间
hiddenmenu隐藏菜单
password 加密grub(仅在系统启动时,编辑修改grub特性的时候才需要输入密码),在该配置文件中使用明文存储
password -md5(使用grub-md5命令加密密码后,将提取的密码的特征码卸载此处)在该配置文件中加密存放密码
title my linux(标题)
root (hd0,0)内核所在的分区,grub识别硬盘都是hd
kernel /vmlinuz内核文件,由于GRUB不是通过根文件系统查找的,是直接在该分区查找,所以当boot单独分区的时候,对于GRUB看来,vmlinux的父目录就是/
initrd /initrd.gz(initrd文件,该文件的目的就是给内核提供访问根的硬盘驱动程序和文件系统)
password 也可在title中设置密码,只不过在每次系统启动都需要输入密码
安装grub:
安装stage1
grub命令进入grub提示符下
grub>find(hd0,0)/《Yab》 使用find命令查找到boot分区所在磁盘
grub>setup(hd0) 安装stage1到目标磁盘
第二种安装方式:
grub-install --root-directory=/ /dev/sdb1 使用grub-install 命令安装会将stage1和stage2两段都安装,从选项也可以看出,root-directory用于指明boot分区的父目录,grub-install程序会在该目录下寻找boot分区,然后将grub目录安装,但是没有grub.conf配置文件,最后指定boot分区所在的磁盘,用于安装stage1至磁盘的第一扇区
如果grub.conf配置文件丢失,如何启动?
如果grub.conf配置文件丢失,在启动时就会进入grub提示符下,使用find命令查找到boot分区,然后手动指定grub的stage2需要的配置选项,如果find查找到到的boot分区在(hd0,0)
root(hd0,0)
kernel /vmlinuz
initrd /initrd.gz
使用find命令的时候:find (hd0,0)/再敲tab键可以显示该分区下的内容
kernel /vmlinuz后如果参数的话,在有些情况下可能会出现问题
grub装载内核,内核初始化的过程‘
1.设备探测
2.驱动初始化(需要从initrd文件中装载驱动模块)
3.以只读方式挂载根文件系统
4.装载第一个进程init