分类: LINUX
2015-08-26 23:28:04
启动流程一览
按下电源按键-后计算机读取BIOS来加载硬件信息及进行硬件系统的自我测试,之后系统会主动读取一个可启动的设备(由BIOS设置的),此时就可以读入引导装载程序了(grub)。引导程序可以指定使用哪个内核文件来启动(可以使用不同的内核文件吗?),并实际加载内核到内存当中解压与执行,此时内核就能够在内存内活动,并检测所有硬件信息与加载适当的驱动程序来使计算机开始运行,等内核检测硬件与加载驱动程序完毕后,操作系统就开始运行了。
系统启动简单过程如下
BIOS,boot loader与kernel加载
由于不同的操作系统的文件系统格式不相同,因此我们必须要以一个引导装载程序来处理内核文件加载load的问题,因此这个引导装载程序就被称为Bootloader了,那这个boot loader程序安装在哪里呢?就在启动设备的第一个扇区Sector内,也就是我们谈到的MBR(Master Boot Record)主引导分区
既然内核文件需要Loader(应该就是boot loader引导加载程序)来读取,那么BIOS又是如何读取MBR的loader呢?其实BIOS是通过硬件的INT 13中断功能来读取MBR的,也就是说,只要你的BIOS能够检测到你的磁盘,那它就有办法通过INT 13这条信道来读取该磁盘的第一个扇区的MBR。这个boot loader也就能够执行
MBR这个仅有446bytes的硬盘容量里面会放置最基本的引导加载程序(这个引导加载程序是非常小而完美的);
引导加载程序除了可以安装在MBR之外,还可以安装在每个分区的引导扇区(boot sector),分区还有个别的启动扇区?这个特色才能够实现多重引导的功能
这个引导加载程序的目的是加载(load)内核文件
Boot loader是操作系统安装在MBR上面的一套软件,而最终boot loader的功能就是加载kernel文件。
Linux在安装时,你可以选择将引导加载程序安装在MBR或个别分区的启动扇区;如果选择安装到MBR的话,那理论上你的MBR与boot sector都会保有一份boot loader程序。
Windows在安装的时候,它的安装程序会主动覆盖掉MBR以及自己所在的分区的启动扇区,你没有选择机会(也就是windows安装时,它默认会将MBR与bootsector都装上一份boot loader。);
MBR就在硬盘上,BIOS应该是先认识硬盘,然后才能够读取MBR吧?然后再由MBR上的引导加载程序去读取硬盘上的kernel文件,kernel又去读取类似SATA或者RAID卡的驱动,而驱动程序又在/lib/modules内,你根本无法挂载根目录,又怎么读取/lib/modules/内的驱动程序呢?在这种情况下,你的linux是无法正常启动的,我们可以通过虚拟文件系统来处理这个问题,虚拟文件系统initial RAM Disk一般的文件名为/boot/initrd,这个文件的特色是,它也能够通过boot loader来加载到内存中,然后这个文件会被解压缩并在内存中仿真成一个根目录,且此仿真在内存当中的文件系统能够提供一个可执行的程序,通过该程序来加载启动过程中最需要的内核模块,通常这些模块就是USB,RAID,LVM,SCSI等文件系统与磁盘接口的驱动程序。等载入完成后,会帮助内核重新调用/sbin/init来开始后续的正常启动流程;Boot Loader可以加载kernel与initrd,然后在内存中让initrd解压缩成为根目录,kernel就能够借此加载适当的驱动程序,最终释放虚拟文件系统,并挂载实际的根目录文件系统。
如果使用linux光盘安装操作系统时,发现无法识别硬盘,那么首先要查一下这台服务器是否能够安装此版本的linux,如果不支持那么就较麻烦,需要找对应的驱动,如果没有那么就无法安装啦!