Linux启动流程
首先计算机会加载BIOS,这是计算机最接近硬件的软件。各家主板制造商都会开发出适合自己主板的BIOS,而BIOS一项最重要的功能就是对自身硬件做一次健康检查,只有硬件没有问题,才能运行软件,记住,操作系统也是一种软件。这种通电后开始的自检被称为“加点自检”,英文称为Power On Self Test,简称POST。 如果所有的硬件自检通过,一般发出滴的一声,说明硬件一切正常。
机器自检通过后,下面就是引导系统了,这个动作是BIOS设定的,BIOS会默认从硬盘上的第0柱面,第0磁道,第一个扇区开始读取被称为MBR的东西,MBR即主引导记录。一个扇区的大小是512字节,存放的信息是一段引导程序和分区信息,其中引导程序部分占用446字节,另外64字节是磁盘分区表DPT,最后两字节是MBR的结束位。这512字节的空间是由专门的分区程序产生的,比如说Windows下的fdisk.exe或者Linux下的fdisk命令,所以它不依赖任何操作系统,而MBR中的引导程序也是可以修改的,所以,可以利用这个特性实现操作系统共存。RedHat,CentOS默认会使用Grub作为其引导操作系统的程序,而Grub本身又比较大,所以常见的方式是在MBR中写入Grub的地址,这样系统会载入Grub作为操作系统的引导程序。
经过上面的步骤,第三步就是运行Grub了。Grub最重要的功能就是根据其配置文件加载kernel镜像,并运行内核加载后的第一个程序/sbin/init,这个程序会根据/etc/inittab来进行初始化的工作。其实,这里最重要的是根据文件中设定的值来确定系统将会运行的runlevel,默认的runlevel定义在"id:3:initdefault:"中,其中数字3说明当前的运行级别是3.
第四步,Linux将根据etc/inittab中定义的系统初始化配置si::sysinit:/etc/rc.d/rc.sysinit执行/etc/rc.sysinit脚本,该脚本会设置系统变量、网络配置,并启动swap,设定/proc,加载用户自定义模块,加载内核设置等。
第五步是根据第三步读到的runlevel值来启动对应的服务,如果值为3,就会运行/etc/rc3.d/下的所有脚本,如果值为5,就会运行/etc/rc5.d/下的所有脚本。
第六步将运行/etc/rc.local
第七步会生成终端或X Window来等待用户登录。
系统运行级别
Linux默认有7个运行级别,从运行级0到运行级6:
- 运行级别0:关机
- 运行级别1: 单用户模式,系统出现问题时可使用此模式进入系统维护,典型的使用场景是在忘记root密码时可进入此模式修改root密码
- 运行级别2:多用户模式,但是没有网络连接。
- 运行级别3:完全多用户模式,也是Linux服务器最常见的运行级别
- 运行级别4:保留未使用
- 运行级别5:窗口模式,支持多用户,支持网络
-
运行级别6:重启
使用"ll /etc/rc1.d/"rc1.d的内容:
使用"ll /etc/rc3.d/"显示rc3.d的内容

注意看输出第9列的内容,分别是以K或S开头,后面跟两位数字,再接服务名的文件,其实他们链接的是上层init.d目录中的服务脚本。系统在启动过程中,首先运行以K开头的脚本,全部运行完毕再运行以S开头的脚本。运行时按照后面数字大小的顺序,数字小的先运行,数字大的后运行。K代表停止(Kill),S代表启动(Start)。只要定以好不同运行级别需要停止和启动的服务,就可以让系统在不同的运行级别下启动和关闭不一样的服务。
网友评论