解说linux启动流程
一:概述
关于linux的系统启动流程我们可以从下面图片中的流程一步一步展开,其实linux系统的启动过程中,我们可以比喻为一个接力赛,计算机的不同模块负责这个接力赛中接力棒的交接(为了更好的理解,暂且这样比喻吧可能有点不是太恰当,呵呵)
二:剖析启动过程(整个过程将围绕上面的图片流程详细展开)
这时如果BIOS找不到可以引导的设备及相关程序后,便会启动失败,如果顺利 的找到了相关设备及程序,那么BIOS将继续交接给启动设备中的 MBR(Master Boot Record)主引导记录
3. MBR程序找到其前446个字节的Boot Loader
4. Boot Loader 找到gub程序
在这个过程的主要是靠Grub的引导开始,将贯穿到系统初始化开始前
- grub引导又分为两个阶段 stage1:主要是Boot loader
- stage 1.5:过渡
- stage2:主要是/boot/grub (这三个阶段在内部实现接力)
从上面/boot目录中可以发现linux的内核(VMlinuz),grub,inird程序都在该目录下)
- 在/boot/grub/下面我们看到了熟悉的stage1,stage2及grub工具的配置文件 grub.conf,呵呵,
- 那么grub.conf 是什么东东呢?呵呵,下面我们看下一该配置文件
- 从grub的配置文件中我们看到了我们熟悉的开机图片
- 在启动菜单中
- root(hd0,0)告诉grub在什么地方引导内核及initrd程序
- 然后说明kernel及initrd的位置
从上面的grub.conf 的引导配置文件中得知,下面grub该找内核及initrd程序了,从启动菜单中得知相关位置信息后,开始步入引导kernel了,这就是kernel的初始化过程,MBR开始交接给kernel
6. 到此为止内核空间的相关工作已经完成,内核空间的任务开始向用户空间转移
内核空间通过一个间接的initrd(微型linux)向用户空间的/sbin/init过度,所以gurb开始引导内核向initrd接力
那么/boot目录的initrd都什么东东呢?
- 通过上面init程序的查看我们可以看到,init程序完成的主要工作有
- 挂载 :将initrd中的/proc, /sys /dev 挂载到当前的主分区中的相应目录
- 创建目录:/dev/mapper
- 通过mknod完成block or character special files的创建
- 相关模块的挂载
- 创建root设备
- 挂载 /sysroot
- 最后完成根切换
- 设定系统默认启动级别
- (0 级别关机
- 1 单用户模式
- 2 正常模式 (NFS服务部启动)
- 3 多用户模式
- 4 保留
- 5 图像界面
- 6 重启)
- 执行脚本/etc/rc.d/rc.sysinit完成系统初始化,及相关其他的脚本
系统初始化的简单的介绍:
最后基本的模块装载及内核的完成后,备份syslog。
9.最后启动登录界面了
总结 :在系统启动过程中主要的脚本和目录有哪些呢?我们可以概括一下
- /boot 目录
- /grub 目录
- /boot/grub/grub.conf 脚本
- /boot/initrd+内核版本 文件
- /initrd文件中的init文件
- /initrd文件中的/proc/ /sys/ /dev/ 目录的挂载 及根的切换
- /etc/inittab 脚本
- /etc/rc.d/rc.sysinit 脚本
- 这些重要的脚本和目录,当然还有其他重要的目录和文件,脚本等暂不列举啦。
温馨提示:大虾们,如有理解不到位的地方,还望多多指正,交流!