Linux系统是十分优秀的操作系统,但启动时间长是该系统的缺点之一。那么能否通过一些配置来缩短Linux系统的启动时间呢?当然能够。

Linux系统是十分优秀的操作系统,但启动时间长是该系统的缺点之一。那么能否通过一些配置来缩短Linux系统的启动时间呢?当然能够。本文将向读者展示如何在不牺牲Linux系统可用性的前提下,缩短系统的启动时间。要实现这一目标,需要了解系统的各类服务及他们之间的从属关系,进而使他们在条件允许的前提下同时启动,从而大大节省系统启动时间。

准备工作

假如想采用本文介绍的方法对Linux系统进行配置,首先要熟悉Linux系统的配置语言。对系统的启动过程进行配置是一项比较危险的行为,容易造成系统无法启动。一旦发生这种情况,最好重新启动系统后选择单一用户模式,将系统还原并重启。当然,最重要的是在配置前备份重要数据。

其次,建议用户最好在对本机系统进行修改前,先进行修改测试。假如用户只有一台电脑,那么这里建议使用用户模式Linux系统(UML)进行测试。UML是个内核补丁,他能够将Linux系统的内核转译成为二进制,以便用户能够像使用普通软件那样运行Linux系统。一旦出现意外情况,损失的只是UML,而原系统却可安然无恙。

Linux系统的启动顺序和Runlevel

Linux系统的启动包括多个步骤,这里主要介绍一下内核加载后的系统启动步骤。用户能够通过运行/sbin/runlevel命令来查看系统现在的runlevel。runlevel是Linux系统用来区别系统高级启动配置类型的数字。这些数字十分常见,他们中的绝大多数都有着明确的含义。

init如何初始化系统

init能够通过一个ASCⅡ配置文档得知如何改变系统的runlevel。通常情况下该配置文档能够指引init来执行/etc/rc.d/rc命令,从而获得runlevel的相关信息。

系统服务

用户所需要的各种系统服务都是由rc指令程式来启动的。系统潜在的服务纷繁复杂。大多数Linux系统通常只提供sshd(SecureShell服务)、syslog(系统日志工具)和lpd(打印服务)等功能。

用户能够从/etc/rc.d/目录中找到任何的服务。假如打开这个目录,会发现许多服务只是一种外壳程式,他只是引导其他程式来完成工作。也许有人会问,rc程式是如何知道每个runlevel要运行哪些程式呢?答案是在/etc/rc.d/目录下面和init.d/目录并列的更有一些目录,他们各自对应着自己的runlevel。他们的名称为rc*.d/,例如runlevel 5就是/etc/rc.d/rc5.d/。每个rc*.d/目录中包含着两个符号链接,这些链接能够连接到/etc/init.d/目录中的指定服务程式。

动手改造

假如用户决定要启动Linux系统并进入图像模式(runlevel 5),那么当init引导rc指令程式运行并将runlevel的级数告知他时,rc指令程式将对/etc/rc.d/rc5.d/进行查看,接着他将执行从该目录中找到任何链接。rc指令程式执行链接的过程可分为两部分,首先他将执行任何名称以“K”打头的链接,将“stop”参数传递给他们,并停止这些链接指向的任何服务。这些服务停止后,rc指令程式将执行任何名称以“S”打头的链接,并将“start”参数传递给他们,启动这些链接所指向的服务。

另外,rc指令程式能够根据链接名称的两个十进制数,确定链接的执行顺序,数字小的先执行。

下面将举一个例子,帮助用户加深理解。当用户启动系统进入runlevel 5时,首先要执行的链接是K05saslauthd,由于他是以“K”打头的,而且后两位十进制数要小于其他以“K”打头的链接。第一个要执行的启动链接是S05kudzu。最后执行的将是S99local。下面是runlevel 5状态下指向程式的链接。

 # cd /etc/rc.d/rc5.d  # ls -al  total 8  drwxr-xr-x 2 root root 4096 Jul 15 09:29 .  drwxr-xr-x 10 root root 4096 Jun 21 08:52 ..  lrwxrwxrwx 1 root root 19 Jan 1 2000 K05saslauthd -> ../init.d/saslauthd  lrwxrwxrwx 1 root root 20 Feb 1 2003 K15postgresql -> ../init.d/postgresql  lrwxrwxrwx 1 root root 13 Jan 1 2000 K20nfs -> ../init.d/nfs  lrwxrwxrwx 1 root root 14 Jan 1 2000 K24irda -> ../init.d/irda  lrwxrwxrwx 1 root root 17 Jan 1 2000 K35winbind -> ../init.d/winbind  lrwxrwxrwx 1 root root 15 Jan 1 2000 K50snmpd -> ../init.d/snmpd  ……  lrwxrwxrwx 1 root root 18 Feb 8 11:15 K92iptables -> ../init.d/iptables  lrwxrwxrwx 1 root root 19 Feb 1 2003 K95firstboot -> ../init.d/firstboot  lrwxrwxrwx 1 root root 15 Jan 1 2000 S05kudzu -> ../init.d/kudzu  lrwxrwxrwx 1 root root 14 Jun 21 08:55 S09isdn -> ../init.d/isdn  lrwxrwxrwx 1 root root 17 Jan 1 2000 S10network -> ../init.d/network  lrwxrwxrwx 1 root root 16 Jan 1 2000 S12syslog -> ../init.d/syslog  lrwxrwxrwx 1 root root 17 Jan 1 2000 S13portmap -> ../init.d/portmap  lrwxrwxrwx 1 root root 17 Jan 1 2000 S14nfslock -> ../init.d/nfslock  lrwxrwxrwx 1 root root 18 Jan 1 2000 S17keytable -> ../init.d/keytable  lrwxrwxrwx 1 root root 16 Jan 1 2000 S20random -> ../init.d/random  lrwxrwxrwx 1 root root 16 Jun 21 08:52 S24pcmcia -> ../init.d/pcmcia  lrwxrwxrwx 1 root root 15 Jan 1 2000 S25netfs -> ../init.d/netfs  lrwxrwxrwx 1 root root 14 Jan 1 2000 S26apmd -> ../init.d/apmd  lrwxrwxrwx 1 root root 16 Jan 1 2000 S28autofs -> ../init.d/autofs  lrwxrwxrwx 1 root root 14 Jan 1 2000 S55sshd -> ../init.d/sshd  lrwxrwxrwx 1 root root 20 Jan 1 2000 S56rawdevices -> ../init.d/rawdevices  lrwxrwxrwx 1 root root 16 Jan 1 2000 S56xinetd -> ../init.d/xinetd  lrwxrwxrwx 1 root root 14 Feb 1 2003 S58ntpd -> ../init.d/ntpd  lrwxrwxrwx 1 root root 13 Jun 21 10:42 S60afs -> ../init.d/afs  ……  lrwxrwxrwx 1 root root 18 Jan 1 2000 S80sendmail -> ../init.d/sendmail  lrwxrwxrwx 1 root root 13 Jan 1 2000 S85gpm -> ../init.d/gpm  lrwxrwxrwx 1 root root 15 Mar 22 08:24 S85httpd -> ../init.d/httpd  ……  lrwxrwxrwx 1 root root 14 Jul 15 09:29 S98wine -> ../init.d/wine  lrwxrwxrwx 1 root root 13 Feb 8 17:26 S99db2 -> ../init.d/db2  lrwxrwxrwx 1 root root 11 Jun 21 08:52 S99local -> ../rc.local

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!