在内核加载完毕,并完成硬件检测与驱动程序加载后,此时主机硬件已经准备完毕,内核会主动呼叫第一个进程,也就是 /sbin/init,此配置文件最主要的功能就是准备软件执行的环境,包括系统的主机名、网络设定、语言、文件系统格式及其他服务的启动等。
这里和 CentOS 5.x 系统相比也有较大变化。在 CentOS 5.x 系统中,主要通过 init 进程的配置文件 /etc/inittab 来设定系统,并启动 Linux。但是在 CentOS 6.x 系统中,由于用 Upstart 启动服务来替换以前的 init,所以在 /etc/inittab 配置文件中只能定义系统的默认运行级别,而其他的功能是靠 /etc/init/ 目录中的其他配置文件实现的。
大家可以把 /etc/init/ 目录中的配置文件看成以前 /etc/inittab 这个文件功能的分拆。
本章开头提到,由 /sbin/init 进程可通过 /etc/init/rcS.conf 配置文件,分别找到 /etc/rc.d/rc.sysinit 配置文件和 /etc/inittab 配置文件,前者用于初始化系统,配置计算机的初始环境;后者用于确定系统的默认运行级别。
接下来,先介绍 /etc/rc.d/rc.sysinit 配置文件。如果我们使用 Vim 查看 /etc/rc.d/rc.sysinit 配置文件,就会发现这个这个配置文件主要进行了以下几项工作:
1、获得网络环境和主机类型;
2、测试设备:除了挂载内存设备 /proc 之外,还会主动侦测系统上是否具有 usb 设备,如果有,则会主动加载 usb 的驱动程序,并尝试挂载 usb 文件系统;
3、开机启动画面 Plymouth(代替了以往的 RHGB);
4、判断是否启用 SELinux;
5、显示开机过程中的欢迎画面;
6、初始化硬件;
7、用户自定义模块的加载,用户可以在 /etc/sysconfig/modules/*.modules 加入自订的模块,则此时会被加载到系统当中;
8、配置内核的参数,系统会主动去读取 /etc/sysctl.conf 这个文件的配置参数,使内核的功能成为我们想要的样子。
9、设置主机名。
10、同步存储器。
11、设备映射器及相关的初始化。
12、初始化软件磁盘阵列 (RAID)。
13、初始化 LVM 的文件系统功能。
14、检验磁盘文件系统 (fsck)。
15、设置磁盘配额 (quota)。
16、重新以可读写模式挂载系统磁盘。
17、更新 quota (非必要)。
18、启动系统虚拟随机数生成器。
19、配置机器(非必要)。
20、清除开机过程中的临时文件。
21、创建 ICE 目录。
22、启动交换分区(swap)。
23、将开机信息写入 /var/log/dmesg 文件中。
在以上过程中,比较值得注意的是自定模块的加载。在 CentOS 中,如果我们想要加载核心模块的话,就可以将整个模块写入到 /etc/sysconfig/modules/*.modules 中。当然,此过程并不是必须的,通常我们的默认模块已经够用,除非对硬件太新,不得不自己加载模块,否则无需刻意添加任何模块。
可以看到,/etc/rc.d/rc.sysinit 配置文件已经将基本的系统配置数据都写好了,我们可以查询 /var/log/dmesg 文件或使用 dmesg 命令查看系统在启动时到底发生了什么。当然,我们也可以通过这个命令来看看 Linux 服务器的硬件信息。
有关 /etc/inittab 配置文件的内容,放到了下节进行详细介绍。