Chinaunix首页 | 论坛 | 博客
  • 博客访问: 313568
  • 博文数量: 84
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 890
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-13 16:46
文章分类

全部博文(84)

文章存档

2017年(2)

2016年(4)

2015年(78)

我的朋友

分类: LINUX

2015-08-26 23:28:04

启动流程一览

按下电源按键-后计算机读取BIOS来加载硬件信息及进行硬件系统的自我测试,之后系统会主动读取一个可启动的设备(由BIOS设置的),此时就可以读入引导装载程序了(grub)。引导程序可以指定使用哪个内核文件来启动(可以使用不同的内核文件吗?),并实际加载内核到内存当中解压与执行,此时内核就能够在内存内活动,并检测所有硬件信息与加载适当的驱动程序来使计算机开始运行,等内核检测硬件与加载驱动程序完毕后,操作系统就开始运行了。

系统启动简单过程如下

  1. 加载BIOS的硬件信息与进行自我测试,并依据设置取得第一个可启动的设备;
  2. 读取并执行第一个启动设备内MBR的boot loader(即grub程序);
  3. 依据boot loader的设置加载Kernel,Kernel会开始检测硬件与加载驱动程序;
  4. 在硬件驱动成功后,Kernel会主动调用init进程,而init会取得run-level信息;
  5. init执行/etc/rc.d/rc.sysinit文件来准备软件执行的操作环境(如网络、时区等);
  6. init执行run-level的各个服务的启动(script方式)
  7. init执行/etc/rc.d/rc.local文件
  8. init执行终端机模拟程序mingetty来启动login进程,最后就等待用户登录;

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,如果不支持那么就较麻烦,需要找对应的驱动,如果没有那么就无法安装啦!

阅读(1243) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~