第六十三讲——boot loader 本文共有25983个字,关键词: 这一讲来说一说操作系统中的引导程序boot loader,boot loader存在于MBR的前446个字节,从启动顺序来看,boot loader能够访问的一定是一个基本的磁盘设备,kernel一定能够访问。因此boot loader能够访问的分区,kernel也能够访问,所以kernel和initrd(或者initramfs)这两个文件一定是位于同一个分区上的,由boot loader同时一块儿加载进内存的,kernel借助initrd(initramfs)中的驱动、模块,最终实现根的访问。 然后加载/sbin/init,所有用户空间下的程序都是由init来完成初始化,在windows当中,系统启动起来之后会有许多的服务随之启动,且有所谓的安全模式,当设备驱动不兼容的时候,可以进入安全模式卸载相应的驱动程序。 VGA模式,当显卡分辨率太高而无法进入操作系统时,以最基本的驱动程序进入操作系统。 在linux操作系统下,不同服务的启动划分为运行级别,在不同的运行级别下启动相应的服务。 所谓的运行级别也就是在不同的级别下所启动的服务不一样,运行级别的核心就是启动的服务不同。 在linux操作系统中运行级别分为0-6,一共7个运行级别。 init 0:halt 关机 init 1:单用户模式,类似于Windows操作系统下的安全模式,直接以管理员的身份进入系统,可能不需要密码。 init 2:多用户模式,multi user mode 有网络功能,但是不启用nfs(网络文件系统)。 init 3:正常多用户模式,multi user mode 但是这种是纯文本的多用户模式(命令行)。 init 4:保留的运行级别 init 5:正常的多用户模式,图形界面,graphic mode init 6:reboot 重启 默认运行级别可以再/etc/inittab文件中进行修改。 讲了大半天的运行级别,我们还是回过头来讲一讲boot loader,详细的讲一讲启动的流程。 首先我们需要知道的是,boot loader也是一个程序,对于不同的操作系统其boot loader是不一样的,boot loader是由操作系统提供并安装在MBR中的前446个字节。 boot loader是位于MBR中的,且MBR不属于任何一个操作系统,是全硬盘级别。在Windows8以后,boot loader不能引导其他的操作系统,而且会将MBR锁死,美名其曰安全。 linux常用的boot loader有两种: LILO:linux loader,早期linux用于引导linux启动的一个boot loader,但是它不能够引导1024柱面分区以后的内核,因此它不支持大硬盘,在嵌入式领域应用很多。 GRUB:Grand Unified Bootloader(统一的引导程序),GRUB是两阶段的引导程序。 stage 1:GRUB的第一阶段是在MBR中,作用是用于引导第二阶段。 stage 2:第二阶段,位于内核所在分区的/boot/grub/stage2,也就是说MBR中的第一阶段需要刚问这个目录。 /boot是一个基本的磁盘分区,但是这个分区需要格式化并安装文件系统,这个文件系统的类型可能不一样。因此,在stage2之前还有一个步骤,称为stage1.5,用于识别常见的不同类型的文件系统,在/boot/grub下有很多的*1.5的文件,这些都是不同类型的文件系统,在加载对应的文件系统之后启动stage2,stage是一个很强大的程序,它完全突破了446byte的限制,第二阶段还能加载图片进行显示,但是需要借助一个配置文件grub.conf 在grub.conf配置文件中,可以定义开机界面操作系统选择时加载的背景图片,提供操作系统的选择,能引导哪些内核。 GRUB的使用: /etc/grub.conf为/boot/grub.conf文件的连接文件 在grub.conf配置文件中,顶格写都是全局的属性定义,下面的每一个title用于定义一个操作系统或者一个内核,linux操作系统可以提供不同版本的内核,我们启动不同内核的话,每一个内核都需要在title中声明,所以,title是用于定义当前硬盘上不同操作系统或者当前系统不同版本的内核。 grub.conf配置文件的内容需要手动写入,在配置文件出现错误的时候需要能够在grub中正确的指定。 default=0 默认启动的title(从上往下编号,从0开始),用于设定默认启动的内核或者系统的。 timeout=5 等待用户的超时时长,单位为秒。 splashimage=(hd0,0)/grub/splash.xpm.gz指定grub的背景图片。 hiddenmenu 隐藏菜单 title centOS。。。。。(可以随意更改,需要引导的操作系统或内核的标题) root (hd0,0)# 指定内核所在的设备 kernel /vmlinuz-2.6.32-431.el6.x86_64 roroot=/dev/mapper/volgroup-lv_root rd_NO_L....装在逻辑卷上的操作系统。 从ro开始为向内核传递参数,我们之前说过,在/proc目录下的每一个进程目录中都有一个cmdline为启动这个进程所执行的命令。在/proc目录下有一个cmdline文件(与内核有关),这个文件中的内容就是由grub传递给内核的。 initrd /initromfs-2.6.32...........img为虚根的文件系统,ramdisk文件的路径。 grub识别硬盘时,不论是什么接口的硬盘一律识别为hd,hd# 表示第N块磁盘,从0开始编号。hd#,#第二个井号表示硬盘的分区。格式为hd#,N,N为0.1.2.3(主分区) grub访问磁盘时,文件系统尚未存在,多以grub是直接访问硬盘的分区,所以这个分区被当做根。 .img是一个镜像文件,在展开后可以作为磁盘使用,这些文件被称为镜像文件,或者本地回环设别,initrd文件一定要与内核的版本号时刻保持一致。 xshell可以在windows下打开linux下的图形界面,结合xmanage,gimp类似于ps的工具。修改图片的宽为640.高为480,14位色,选择文件扩展名的类型的xpm格式,并保存,压缩后放入/boot/grub目录下,修改图片的地址和名称即可。 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 给自己讲linux 2017-02-01 评论 1639 次浏览