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
如果用户想暂时终止某一runlevel的一项服务,只要删除相对应的链接就行了。然而,对链接进行手动设置是一项繁重而又易错的工作,但有一个十分有用的帮手,它的名字叫chkconfig。
分辨没被终止的服务
要想了解哪些服务没有被终止,那么用户需要运行/sbin/chkconfig -list命令。下面展示了命令执行后的显示结果,用户可以清楚地看到每一行有八项内容。chkconfig命令还可以用来开启或终止某一服务。
  afs 0:off 1:off 2:off 3:on 4:off 5:on 6:off
  anacron 0:off 1:off 2:on 3:on 4:on 5:on 6:off
  apmd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
  atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
  autofs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
  crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
  ………
上面左起第一列显示的是服务的名称,接下来的第二列显示的是所在的runlevel和当前状态。例如ntpd(网络时间无交互后台程序)服务被设定只在runlevel 3和runlevel 5开启,而sshd服务则在runlevel 2、3、4和5开启。也许用户会发现,在runlevel 0和runlevel 6没有启动的服务,是因为runlevel 0 和runlevel 6表示系统终止,当然没有服务了。
从属关系
正如上文提到的,系统启动时要逐一运行每个runlevel的服务。也许用户很容易想到,如果可以使多个服务同时运行,必然会节省大量的系统启动时间。但不幸的是这种方法行不通,原因是各项服务之间都存在着从属关系。传统的Linux系统并不能给用户指明服务间的从属关系。
现在通过一个简单的例子讲解如何明确服务间的从属关系。从ntpd服务需要一个网络基础可以得出结论——ntpd服务要依靠网络服务,这一关系可以用下面的语句表示:
ntpd:network
用户可以确定netfs服务也要依靠网络服务,autofs服务也要依靠网络服务,现在就可以列出一个简单的从属关系表:
  ntpd : network
  netfs : network
  autofs : network
它的含义是一旦网络服务开启完毕,可以同时运行ntpd、netfs和autofs服务。假设启动每项服务需要10秒的时间,用传统的方法启动上面的四项服务就需要40秒的时间,而使用上面提到的方法只需要20秒就够了。事实上,各项服务的启动时间是不同的,但道理是一样的。
再例如,lpd服务(S60lpd)要在网络服务后运行,但对于一个拥有喷墨打印机接口的家用系统而言,不必先建立网络连接再安装打印机。在这种情况下,更合理的状况应该是打印机服务先于网络服务。另外crond服务(S90crond)同样应该在网络服务后运行。但是,除非用户有可以使用远端计算机文件的cron文件,否则crond服务根本不必在网络服务前运行。
可以看出,有些服务要依靠其它服务才能运行,有些服务是完全独立的,它们运行与否与其它服务毫无关系。

Linux系统开机提速我有招!相关推荐

  1. 内核提速开机linux,Linux系统开机提速我有招!

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

  2. linux系统开机过程描述

    本文描述linux系统开机过程,属于个人理解范畴,如果文中表述有误请大家批评指正! 计算机开机之后,首先要加载BIOS(基本输入输出系统)信息,BIOS包含了很多重要的信息,包括CPU信息,设备启动顺 ...

  3. linux 开机速度 固态,Windows/Linux系统开机OCZ胜出

    SSD评测报告 以下是相关测试项目结果: Windows系统开机效率 作业系统的开机过程,对於硬盘.SSD来说,是相当重要的测试,因为复杂的开机文件读入,是很好的综合性读入评量,也反应最终用户操作计算 ...

  4. Linux系统开机过程详细分析

    各位是否曾经对电脑整个开机的流程感到好奇呢 ? 这一次 , 我们所要讨论的  主题 , 就是 Linux 从开机的一瞬间到 login 为止 , 到底发生了什么事情 ? 想必各位都知道 , 在刚开机时 ...

  5. Linux系统开机启动流程介绍

    一.linux系统进程启动流程图: 二.简单概括描述linux系统从开机到登陆界面的启动过程 1.开机BIOS自检 2.MBR引导 3.grub引导菜单 4.加载内核 5.启动init进程 6.读取i ...

  6. Linux系统开机启动过程分析

    开机过程指的是从打开计算机电源直到LINUX显示用户登录画面的全过程.分析LINUX开机过程也是深入了解LINUX核心工作原理的一个很好的途径. 启动第一步--加载BIOS 当你打开计算机电源,计算机 ...

  7. Linux系统开机显示BusyBox v1.22.1 built-in shell(ash) 解决方法

    BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件.BusyBox 包含了一些简单的工具,例如ls.cat和echo等等,还包含了一些更大.更复杂的工具,例grep.find.mou ...

  8. Linux系统开机后/etc/rc.d/rc.local文件中的命令没有执行(已解决)

    今天想将linux系统上的svn服务添加到开机自启动,结果重启机器后发现svn服务根本没有起来,检查了添加到/etc/rc.d/rc.local文件的命令没有问题,如下: 看了文件的注释部分才知道,原 ...

  9. Linux系统开机启动过程

    Linux系统从开机开始到用户登录界面,需要启动一系列的进程,分为几个步骤.具体启动的过程如下 1. 载入内核 即把Linux内核载入到内存,Linux内核保存在/boot目录,/boot目录的内容大 ...

  10. linux开机引导进程是什么,Linux系统开机启动流程介绍

    一.linux系统进程启动流程图: 二.简单概括描述linux系统从开机到登陆界面的启动过程 1.开机BIOS自检 2.MBR引导 3.grub引导菜单 4.加载内核 5.启动init进程 6.读取i ...

最新文章

  1. 使用Varnish+ESI实现静态页面的局部缓存
  2. easyui展示年月
  3. 如果知道两点的经纬度 如何算两点之间的距离
  4. 【Python】写视频的2种常用方法:write_videofile和videoWrite
  5. Building JavaScript Games for Phones Tablets and Desktop(3)-创造一个游戏世界
  6. 学Web前端开发需要哪些基础?零基础小白该怎么入行?
  7. Uva1343-The Rotation Game-IDA*算法
  8. mysql 参数 innodb_flush_log_at_trx_commit
  9. 将进酒,如果李白也编程
  10. 谈对阿里应用分层的思考
  11. NSCT(Nonsubsampled Contourlet变换)
  12. lintcode:Plus One 加一
  13. maxscale mysql 主从_使用Maxscale实现mysql读写分离
  14. NGINX Sprint 年度线上会议:报名通道已开启,立即预定您的 NGINX 深潜之旅
  15. 分享一个空手反套白狼的骚操作
  16. ntp服务restrict_Linux配置ntp时间服务器(全)
  17. php青蛙跳井代码,初八葬一青蛙跳井怪穴------行龙点劲!
  18. 论文阅读 - Fame for sale: efficient detection of fake Twitter followers - Cresci - 2015数据集介绍
  19. c语言 编程显示图案*,C语言中怎么编程在计算机屏幕上显示如下图案?
  20. DIY申请达姆施塔特工业大学计算机专业(Informatik)硕士(Master)【附个人简历和动机信】...

热门文章

  1. 对zebra的一点思考 --- 002
  2. WINDOWS访问SAMBA提示没有权限
  3. linux内存源码分析 - 伙伴系统(释放页框)
  4. B - Catch That Cow(广度搜索)
  5. 安卓zip解压软件_安卓zip文件压缩RAR解压app下载-安卓zip文件压缩RAR解压安卓版 v3.0.4...
  6. hive sql 13位毫秒时间戳转日期
  7. 使用curl与wget发送get与post请求
  8. 山山的数学(困难版)
  9. jar包 java_深入理解JAR包
  10. messageutil.java_java socket 怎么给websocket发信息