一 Linux的启动流程分析
1 目前各大Linux发行版本的主流引导装载程序使用的软件为grub
2 简单来说,系统启动的过程如下:
1. 加载BIOS的硬件信息与自我测试,并依据设置取得第一个可启动的设备
2. 读取并执行第一个启动设备内的MBR的boot Loader也就是一般的grub
3. 依据boot Loader的设置加载Kernel,Kernel会开始检测硬件与加载驱动程序
4. 在硬件驱动成功后,Kernel会主动调用init进程,而init会取得run-level信息
5. init准备软件执行的环境以及各个服务,最后等待用户的登录
3 引导装载程序称为Boot Loader,就在启动设备的第一个扇区内,也就是我们一直说的MBR
4 为什么我们推荐先安装windows再安装Linux呢?
原因是因为Linux具有控制权转交的功能,而Windows是没有的,因为在加载Boot Loader的时候windows只会加载它自己的(流氓啊,业界毒瘤)
5 假设我的MBR使用的是Linux的grub,那么我们就有三种菜单了
1. 第一个菜单就是直接指向Linux的内核文件直接加载内核来启动Linux
2. 第二个菜单就是将引导装载控权交给windows,此时会加载windows的内核启动windows
3. 使用Linux的boot sector内的引导装载程序,此时就会跳出另一个grub的菜单
6 在内核加载完毕进行完毕硬件检测与驱动加载后,此时我们的内核就会主动的调用第一个进程就是/sbin/init
7 运行级别
0: 系统直接关机
1: 单用户维护模式,用在系统出问题时的维护
2: 类似运行级别3,但是没有NFS服务
3: 完整含有网络功能的纯文本模式
4: 系统保留功能
5: 与运行级别3类似,但是加载了x window
6: 重新启动
8 init的配置文件就是/etc/inittab
9 如果用户有想要在系统启动的时候进行的工作,可以直接写在/etc/rc.d/rc.local,那么该工作就会在启动的时候自动被加载,而不必等我们登录系统去启动。
10 如果仅是暂时更改系统的运行级别,则使用init x切换到运行级别x
二 Boot Loader
1 boot Loader是载入内核的重要工具,没有boot Loader的话那么内核根本没有办法被系统加载
2 硬盘与分区在grub中的代号
1 第一块查找的硬盘代号为(hd0),而该硬盘的一号分区为(hd0 , 0)
2 在grub里面,它开始的数字是0而不是1,第一块硬盘的第一个分区的grub的代号为(hd0 , 0),第一块硬盘的第一个逻辑分区的grub的代号为(hd0 , 4)
3 BIOS无法读取大硬盘的问题
举例来说,过去很多朋友经常会发现,系统使用DVD启动安装的时候,可以顺利安装好linux,但是第一次启动时,屏幕只出现黑黑的一片,且出现grub>的字样,而无法进入Linux系统,这是怎么回事?
1 在安装的过程中,由于是使用DVD或CD启动,因此加载Linux内核不成问题,而内核会失去检测系统硬件,因此可以识别BIOS识别不到的硬盘
2 但是进入硬盘启动时,由于Kernel与initrd文件都是通过BIOS的INT3通道来读取的,因此你的Kernel与initrd如果放置在BIOS无法判断的扇区中,当然就无法被加载,而仅会出现grub>等待你的处理
三 重点内容
1 Linux不可随意关机,否则容易造成文件系统错乱或者其他无法启动的问题
2 启动流程主要是BIOS,MBR,Loader,Kernel+initrd,/sbin/init等流程
3 init的配置文件为/etc/initab,此文件可以设置默认的runlevel,系统初始化脚本,不同执行等级的服务
4 grub的配置文件与相关文件系统定义文件太多放置/boot/grub目录中,配置文件名为menu.lst
5 若要进入救援模式,可于启动菜单过程中,在kernel的选项后面加入"single"或者"init=/bin/bash"等方式来进入救援模式