启动过程:
计算机通电,蜂鸣器会响一声,检测硬件,进入固件,识别连接到主机的硬盘,在固件启动管理中选择对应的存储设备启动的顺序。然后系统在对应磁盘中读取主引导记录MBR,在磁盘第一块分区主引导记录的前面512字节,存放着bootloader启动器(grub),在grub中指定/root 所在的磁盘分区,加载/boot目录下的vmlinuz内核,然后加载initrd.img虚拟文件系统,加在initrd的主要目的就是启动/LiveOS目录下的squashfs.img。squanshfs.img是对根文件系统rootfs的一个压缩镜像文件。
主引导记录MBR
主引导记录大小只有512个字节,它的主要作用是,告诉计算机到硬盘的哪一个位置去找操作系统。
分区表
通过分区表告诉计算机将控制权转交给哪个分区。
分区表的长度只有64个字节,里面又分成4项,每项16个字节。所以,一个硬盘最多只能分4个主分区,每个主分区的16个字节,由左边6个部分组成。
分区表中的一项(16字节):
grub
- Stage1阶段:
安装在MBR主引导记录的512字节中,主要用于启动stage2阶段,可以使用grub-install把grub安装到对应分区的MBR中。
- Stage1.5阶段:
用于识别分区上的文件系统,加载stage2。在/dev/sda2分区上,使用mkfs.ext2命令将分区格式化ext2的文件系统。
- Stage2阶段:
主要是在boot目录下找的内核文件和initrd文件。解析gurb的配置文件/boot/grub.conf,显示启动菜单,加载内核文件vmlinuz,通过initrd程序加载/boot目录下的initrd.img虚拟文件系统,然后把控制权转交给内核程序。
内核引导
主要是通过在内存中,建立虚拟根文件系统实现相关设备的驱动,并建立和切换到真正的根文件系统。
过程
解压内核镜像加载到内存,以及initrd程序建立虚拟根文件系统后,内核开始驱动基本硬件,并调用虚拟根文件系统中的init程序加载驱动模块,初始化系统中各种设备的相关配置工作,其中包括CPU、I/O、存储设备等。当所需的驱动程序加载完后,会根据grub.conf配置文件中“root=XXX”部分所指定的内容创建一个根设备,然后将根文件系统以只读的方式挂载,并切换到真正的根文件系统上,同时调用系统进程/sbin/init程序,进入系统初始化阶段。
系统初始化
- /etc/inittab:
获取用户级别,根据运行级别的不同系统会运行rc0.d到rc6.d中的相应的脚本程序来完成相应的初始化工作和启动相应的服务。
- /etc/rc.sysinit:
在设定了运行等级后linux系统执行的第一个用户层文件,它主要进行的操作有,设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。
- 守护进程init:
提供应用程序运行的系统环境,使得一般的用户程序可以正常地被执行。
- /bin/login程序:
进入登录状态,系统等待用户输入username和password。