Linux启动流程
RHEL 6 开机启动流程
当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划分为七个等级:
runlevel等级
init进程处理流程
RHEL 7 开机启动流程
在kernel加载驱动程序完毕后,kernel主动调用第一个程序systemd。
systemd最主要的功能就是准备软件执行的环境,包括系统的主机名、网络设定、语系处理、文件系统格式及其他服务的启动等。所有的动作都会透过systemd的默认启动服务集合 → /etc/systemd/system/default.target来规划。(systemd已舍弃system V 的runlevel)
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‘