您的位置:首页 > 运维架构 > Linux

Linux系统启动流程

2017-05-12 21:05 369 查看
Linux系统启动流程

Linux系统启动流程图1、加电自检
上电自检POST,主要负责检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常, 自检完成后从BIOS中设置的系统启动顺序来搜索用于启动系统的驱动器2、grub引导
(1)grub引导第一阶段(stage1):运行Boot Loader主程序,这个主程序必须被安装在启动区,即MBR(即硬盘的0磁道0扇区)。因为MBR空间有限,因此在MBR当中仅安装Boot Loader的最小主程序,并没有Boot Loader的相关配置文件。(2)grub引导第二阶段(stage1.5):在MBR随后的扇区中存放,主要用于与stage2所在分区的文件系统交互。(3)grub引导第三阶段(stage2):通过Boot Loader加载所有配置文件及相关的环境变量参数信息,这些配置文件及相关的环境变量参数都存放在磁盘分区的/boot/grub目录下(如果系统grub没有被修复过,此目录下除grub.conf文件外,其他文件都是非必须的)。如下图所示

/boot/grub目录下配置文件主要的配置文件grub.conf及相关说明:

grub.conf的配置 1)default=0(第十行):表示默认的启动条目,0表示第一个title系统 2)timeout=5(十一行):表示可供选择的等待时间,在等待时间内如果按下任意键,则会进入启动条目的选择界面,如果不按则按默认的启动条目启动 3)splashimage=(hd0,0)/grub/splash.xpm.gz:定义的启动时的背景图片信息(可以修改)。(hd0,0)表示存放于第一块磁盘的第一块分区 4)hiddenmenu:启动时是否显示启动菜单,默认在等待时间内不操作,是不显示的,如果想要显示,可以将此行注释掉。 5)title CentOS 6(2.6.32-642.el6.x86_64):显示启动菜单的标题 6)root (hd0,0):表示内核文件存放的位置,这里指定的是分区位置,而非根目录。 7)16行内容:内核的名称以及一些启动时的核心参数,root=UUID=68b0f8ab-7ccc-4fc4-8bbc-a992f91e9847表示根目录,由于启动过程中需要挂载根目录,因此就要指定根目录所在的分区。 8)initrd:指定虚拟文件系统,主要通过此处的虚拟文件系统加载根目录,挂载真正的根目录。3、加载内核
当BootLoader读取内核文件以后,接下来就会将内核文件解压后装载到内存中,然后根据内核提供的功能开始测试与加载各个设备(如CPU、硬盘、网卡)。此时内核已经完全接管了BIOS的工作,所以,此处的检测与加载内核是完全不同的。 但是此时的内核还没加载到硬盘,无法去读取系统上的内核文件;如果去挂载硬盘,由于硬盘的驱动程序都存在于硬盘上,无法去加载。所以此处通过虚拟文件系统/boot/initramfs来解决解决硬盘的挂载问题。 同样,虚拟文件系统initramfs也是通过“Boot Loader”将其加载内存当中,然后虚拟文件也被加载到内存,然后此文件被解压在内存中模拟一个根文件系统,这个根文件系统能够模拟一个可以运行的程序,通过这个根文件系统去加载所需要的硬盘(包括RAID、LVM)驱动模块,最后以只读的方式去挂载真正的根目录。挂载完成后通过/sbin/init来执行后续的正常启动。4、通过/sbin/init进程初始化系统
内核、硬件及驱动信息加载完成后,内核会呼叫控制的第一个执行程序/sbin/init,init程序主要功能就是准备软件运行环境。(1)先去获取/etc/inittab中的系统运行级别

系统的运行级别 系统的运行级别: 1)0:关闭所有的服务,关机 2)1:维护模式,单用户模式,次级别允许root用户直接登录不需要认证。 3)2:维护模式,多用户模式,会启动网络功能,但不支持NFS 4)3:正常级别,完全多用户模式,文本界面。 5)4:预留级别 6)5:正常级别,完全多用户模式,文本界面 7)6:关闭所有服务,重启(2)使用/etc/rc.d/rc.sysinit进行系统初始化初始化动作: 1)根据配置文件中的设定来设置主机名,即读取/etc/sysconfig/network文件中的HOSTNAME行 2)打印文本欢迎信息 3)激活selinux和udev 4)挂载所有定义在/etc/fstab文件中的文件系统 5)激活swap分区 6)检测根文件系统,并实现以读写方式重新挂载。 7)设置系统时钟 8)根据/etc/sysctl.conf文件设定内核参数的值 9)激活LVM和RAID设备 10)加载额外的设备驱动程序 11)清理操作(3)对读取到的运行级别下的服务进行操作(/etc/rc.d/rc.[runlevel]) 通过/etc/rc.d/rc.sysinit初始化系统完成以后,此时,系统就已经顺利开始工作了,但是需要启动一些当前系统运行级别需要运行的服务。这里就通过在/etc/inittab中所获取的运行级别来操纵/etc/rc.d/rc[runlenel].d/目录下的所有软连接来启动或关闭服务;所有以S开头的,都被传递start参数以启动,以K开头的,都被传递stop参数以停止。 (4)启动用户自定义引导程序(/etc/rc.local) 运行用户写在/etc/rc.local中的命令(5)启动终端,调用用户登录文件 启动终端,调用用户登录文件,如果是5级别,则启动图形化界面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息