今天享用咖啡后的time来reserch一下bootstrapping,在Linux或者Unix下面引导计算机还是有一些很大的玄机的,
而这里面,有很多其实是非常值得我们去花费时间学习的。废话不说了,我们开始:starting up a computer
操作系统在计算机的正常启动过程中其实是不能派上用场的,他必须用自己的方式先将自己启动起来。
内核首先被加载到内存当中,紧接着是各种的初始化,接着才是系统。
我们不得不这样说,要知道我很不情愿这样讲,但他却是个事实,那就是在引导阶段是系统的特别脆弱的时期。诸如config里面的fault,设备问题,文件系统受到受损等等这样的错误都会导致系统的引导不成功。
内核会生成init进程,然后这个进程始终是PID1。系统完全引导之前,先检查并挂哉文件系统,并且启动系统法的守护进程。Unix的系统可以不追求完整的启动,而只是部分的引导,只够在系统的主控制台上运行一个Shell就ok了。
单用户模式=恢复模式=维护模式
在大多数的系统当中可以给内核传递一个参数,而使其进入单用户模式
让我们来看看典型的Six steps stage
1、从MBR去bootloader
2、加载并initialize the core
3、检测和配置设备
4、创建内核进程
5、系统管理员干预(Only for The Single User Mode)
6、执行系统的启动脚本
看到上面的Steps,可以想到其实Administrators的系统交互只能通过两方面来干预系统的bootstrapping,修改系统的启动脚本配置文件或者是改变传递给core的arguments。
内核从本质上来说是程序,他通常会在启动后被装载到内存中去,以便执行他。虽然随着厂商的不同会有所变化,但是大体上是像这样的:/vmlinuz或者是/boot/vmlinuz
BIOS(这个不用多说了,不知道的上google),一旦确定了从什么设备看是引导系统,它将尝试加载设备上开头的512个字节的信息,我们将这512个字节的数据段也叫做Master Boot Record即MBR
我们接下来谈GRUB
这一全面而又统一的加载程序,对于intel的User来说Grub是默认的引导加载程序,其任务是从预先编排好的清单中选择一个内核,并用系统管理员指定的参数来加载这个内核。其家族大体可分为两个分支,即原始的GRUB即GRUB Legy(传统的GRUB),还有一个就叫做GRUB2(其实其版本号是介于1和2之间的)
GRUB默认会从/boot/grub/menu,lst或者/boot/grub/grub.conf中读取他的缺省引导配置。
我自己用的Fedora由于继承了RHEL的特性,所以使用的是grub.conf,乌班图用的是menu.lst
看一段代码,试着读懂她
default=0
timeout=10
splashimage=(hd0,0)/boot/grub/splash,xpm.gz
title Red Hat for Fedora (kernel edtion)
root(h0,0)
kernel /vmlinuz............. ro root=LABEL=/
想一想上面这段代码配置了一个操作系统,想知道的更多See the Site:www.gnu.org/software/grub/manual
关于多重引导,一台机器上有时需要run多种操作系统,所以我们需要配置一个引导加载程序能认出磁盘上所有不同的操作系统,情牢记,每个磁盘分区都可以有它自己的第二阶段的引导加载程序,但是,整个磁盘却只有一个MBR。先装好所有我们需要的系统后再对配置文件进行修改。