Linux开机流程分析
那么什么是『单人维护模式 ( run-level 为 1 )』?如果你有玩过 Windows 的话,那么你在开机的时候如果按下 F8 时,不是会出现一些什么『安全模式』啦、『正常开机』啦或『 MS-DOS 模式』等等的进入 Windows 的状态吗?尤其是当你不正常关机的时候, Windows 预设就会以『安全模式』来激活 Windows 啰!Windows 的『安全模式』几乎不加载一些复杂的模块,让你的 Windows 一定可以开机成功!那么 Linux 的维护模式状态即是使用单人模式( 就是 run_level 为 1 啦!)所以说, Linux 的登入情况是如何呢?呵呵!没错,就是在这里加载的啦!
· init 的第一个执行内容 /etc/rc.d/rc.sysinit :
确定了登入状态之后,再来当然就是需要将主机的信息给他读进去 Linux 系统啰!而 Linux 系统的第一个资料内容就是 /etc/rc.d/sysinit 这个档案啦!如果你有空进入这个档案去看看的话,会发现这个档案的内容包括了==>设定预设路径( PATH )、设定主机名称、执行 /etc/sysconfig/network 所记录的网络信息、挂载 /proc 这个保存在内存当中的主机基本讯息、以及其它几个 Linux 操作系统最基本的几个信息!大抵来说,他的基本工作是:
1. 设定预设路径:( PATH )
2. 设定网络状态:系统会再去读取 /etc/sysconfig/network,并将该档案内的资料,如 NETWORKING, FORWARD_IPV4, HOSTNAME, DOMAINNAME, GATEWARY, GATEWAYDEV 等等的设定读入系统中。
3. 激活系统的置换空间(简单的可以想成是虚拟内存): swapping
4. 检查档案系统:这个时候系统会去检查一些可能会存在的目录,例如 /fsckoptions 与 /forcfsck 及 /fastboot 等等的目录,当你的系统有不正常关机的现象时(例如突然的断电等等),那么 Linux 将会自动的强制去检查 root 的档案系统 ( checking root filesystems )。简单的想一想,就好象是 Windows 系统下,当你不正常关机时,在开机的过程中就会出现扫瞄硬盘的情况相同啦!
5. 周边设定与系统设定的参数 ( /proc ):在 Linux 或者是 Unix 系统中,你会在根目录中发现一个很奇怪的扇区,那就是 /proc 啰!其实这个目录是记录在内存当中的,每次开机的时候就会被建置起来。他的主要功能是记录主机的一些接口设备的最新资料状况!例如网络周边啦、输入输出周边啦等等的。没事的话,不要到里面乱砍喔!会有问题
6. 设定 Plug and Play ( PNP )的一些参数资料;
7. 清除 /etc/mtab ;
8. mount root 及 /proc 档案系统 :好了,将一些资料都设定好之后,当然就是需要将资料写下来啰!这个时候就会将 root 与 /proc 资料给他 mount 上档案系统啦!
9. 决定是否使用模块, 加载模块
10. 检查档案系统 :与前面相同的,当前面的 /fastboot 检查的旗标开启之后,就会以 fsck 检查你的其它扇区啰! ( 使用 fsck )
11. 挂上其它档案系统
12. 设定 console 字型
13. 打开 quota
14. 清除不必要的档案, 如 lock, pid
15. 设定 clock
16. serial port 初始化
17. 将开机讯息经由 dmesg 放入 /var/log/dmesg 中
如此一来,在 /etc/rc.d/rc.sysinit 就已经将基本的系统设定资料都写好了,也将系统的资料设定完整!而如果你想要知道到底开机的过程中发生了什么事情呢?那么就使用第十六章学会的 dmesg 就可以知道啰
· 激活核心的外挂式模块 (/etc/modules.conf):
由于我们的核心越来越聪明,所以呢,我们可以选择使用模块的型态 ( 这个在后面也会继续说明 ) 来进行驱动程序的加载!那么如果系统原本找不到的模块 ( 例如早期的 via-rhine 芯片组 ) 就可以在这个档案里面 /etc/modules.conf 写入呢!
· init 执行 run-level 的各个 scripts :
由于不同的 run-level 所需要加载的模块并不相同,所以系统早就为不同的 run-level 设定了一些批次档( scripts )来做这件事啰!而 run-level 早就在前面的时候以 /etc/inittab 当中取得啰!好了,如果你知道如何进入到 /etc/rc.d 的目录中的话,那么你将会看到该目录下应该有八个目录跟三个档案,目录 rc0.d ~ rc6.d 分别代表了各个 run-level 的 scripts !而在这些目录中的档案都是以 S 及 K ( 大写 ) 为开头的档案,并接两位数的数字与该服务的名称所组合而成的!如下所示为 Mandrake 9.0 的 /etc/rc.d/rc3.d 的内容:
[root @test /root]# ll /etc/rc.d/rc3.d total 0 lrwxr-xr-x1 root root 16 Oct 19 11:05 K55routed -> ../init.d/routed* lrwxr-xr-x1 root root 18 Oct 19 10:58 S03iptables -> ../init.d/iptables* lrwxr-xr-x1 root root 17 Oct 19 11:26 S10network -> ../init.d/network* lrwxr-xr-x1 root root 16 Oct 19 11:26 S12syslog -> ../init.d/syslog* lrwxr-xr-x1 root root 16 Oct 19 11:26 S20random -> ../init.d/random* lrwxrwxrwx1 root root 13 Oct 28 15:22 S40atd -> ../init.d/atd* lrwxr-xr-x1 root root 19 Oct 19 10:59 S40saslauthd -> ../init.d/saslauthd* lrwxrwxrwx1 root root 14 Oct 19 21:28 S55ntpd -> ../init.d/ntpd* lrwxrwxrwx1 root root 14 Oct 19 12:11 S55sshd -> ../init.d/sshd* lrwxrwxrwx1 root root 16 Oct 19 12:00 S56xinetd -> ../init.d/xinetd* lrwxr-xr-x1 root root 18 Oct 19 11:26 S75keytable -> ../init.d/keytable* lrwxr-xr-x1 root root 17 Oct 19 11:12 S80prelude -> ../init.d/prelude* lrwxr-xr-x1 root root 17 Oct 19 11:03 S85numlock -> ../init.d/numlock* lrwxr-xr-x1 root root 18 Oct 19 11:35 S89internet -> ../init.d/internet* lrwxr-xr-x1 root root 15 Oct 19 11:26 S90crond -> ../init.d/crond* lrwxr-xr-x1 root root 17 Oct 19 11:26 S95kheader -> ../init.d/kheader* lrwxr-xr-x1 root root 14 Oct 19 11:38 S99adsl -> ../init.d/adsl* lrwxr-xr-x1 root root 19 Oct 19 11:04 S99linuxconf -> ../init.d/linuxconf* lrwxr-xr-x1 root root 11 Oct 19 10:41 S99local -> ../rc.local*
·
在这个目录下的档案都是连结档,均指向到 /etc/rc.d/init.d 这个目录下,而这个 /etc/rc.d/init.d 目录则是以 Linux 的 rpm 安装方法时,设定一些服务的激活目录。举个例子来说,如果你要重新激活 sendmail 的话,而且你的 sendmail 是以 rpm 来安装的,那么下达 /etc/rc.d/init.d/sendmail restart 就可以直接激活 sendmail 啰!所以你即可知道 /etc/rc.d/init.d 里面档案的主要功能!因此,当你的 run-level 内的 scripts 要激活哪写服务呢,呵呵!就将档案连结到该 init.d 目录下的档案并加以激活即可啰!也就是说『当你以 文字模式 ( run-level=3 ) 激活 Linux 时,你的系统在经过 BIOS、 MBR、 Kernel、 init、/etc/rc.d/rc.sysinit 之后,就会进入 /etc/rc.d/rc3.d 来激活一些服务』啰!不过,需要注意的是,在 rc3.d (或其它目录下 rc0.d ~ rc6.d )目录中 S 开头的档案为执行该服务, K 为开头的档案则是杀掉该服务的意思。那么那些数字代表的意义为何?那就是激活的顺序啦!例如S12syslog 会比S90crond 更早被执行呢!那么为什么要有这些顺序呢?这是有原因的!例如您的主机有要激活 WWW 好了,那么您的网络设定应该要先激活才对吧!所以啰,如果 WWW 先激活,才驱动网络,那么 WWW 自然就一定起不来啦!所以各项服务的激活顺序也是相当重要的!目前 Mandrake 当中,可以使用 chkconfig 来设定开机要激活的服务选项呢!
(责任编辑:天空)
阅读次数:



评论加载中…
