Linux启动流程

Linux启动流程

RHEL 6 开机启动流程

Linux启动流程

当kernel加载驱动程序成功后,kernel主动调用第一个进程/sbin/init,init会取得runlevel信息。

  • init执行/etc/rc.d/rc.sysinit文件来准备软件执行的操作环境(网络等);
  • init执行runlevel的各个服务启动(script方式);
  • init执行/etc/rc.d/rc.local文件;
  • init执行终端机模拟程序 mingetty来启动login进程,等待用户登陆。

runlevel执行等级

Linux通过设置runlevel来规定系统使用不同的服务来启动,让Linux的启动环境不同。依据有无网络或有无X Window将runlevel划分为七个等级:

Linux启动流程

runlevel等级

Linux启动流程

 init进程处理流程

 RHEL 7 开机启动流程

Linux启动流程

在kernel加载驱动程序完毕后,kernel主动调用第一个程序systemd。

systemd最主要的功能就是准备软件执行的环境,包括系统的主机名、网络设定、语系处理、文件系统格式及其他服务的启动等。所有的动作都会透过systemd的默认启动服务集合/etc/systemd/system/default.target来规划。(systemd已舍弃system V 的runlevel)

Linux启动流程

 systemd处理流程

 CentOS 7.x的systemd开机流程大概如下:

1. local-fs.target + swap.target:这两个 target 主要在挂载本机 /etc/fstab 里面所规范的文件系统与相关的内存置换空间。

2. sysinit.target:这个 target 主要在侦测硬件,加载所需要的核心模块等动作。

3. basic.target:加载主要的外围硬件驱动程序与防火墙相关任务。

4. multi-user.target 底下的其它一般系统或网络服务的加载。

5. 图形界面相关服务如 gdm.service 等其他服务的加载 。

init和systemd的区别

init:

  • 启动时间长,init为串行启动
  • 启动脚本复杂,init进程只是执行启动脚本,脚本需要自己处理各种情况
  • 由Linux内核加载运行,位于/sbin/init,是系统中第一个进程,PID永远为1

服务的启动主要以/etc/init.d/服务文件名{start,stop}来启动与关闭的,在脚本中设置一个程序为开机自启的话,相当于将/etc/rc.d/rc5.d/下的服务设置一个软链接指向/etc/init.d的源文件。

systemd:

  • 按需启动服务,减少系统资源消耗
  • 尽可能并行启动进程,减少系统启动等待时间
  • 由Linux内核加载运行,位于/usr/lib/systemd/systemd,是系统中第一个进程,PID永远为1

针对主机的各项本地服务与服务器网络服务要enable的话,就是将它放到/etc/systemd/system/...wants/这个目录下做个链接,如:

ln -s ‘/usr/lib/systemd/system/vsftpd.service‘ ‘/etc/systemd/system/multi-user.target. wants/vsftpd.service‘

相关推荐