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

准备工作

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

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

Linux系统的启动顺序和runlevel

Linux系统的启动包括多个步骤,这里主要介绍一下内核加载后的系统启动步骤。用户可以通过运行/sbin/runlevel命令来查看系统目前的runlevel。runlevel是Linux系统用来区别系统高级启动设置类型的数字。这些数字十分常见,它们中的绝大多数都有着明确的含义。以Red Hat Linux系统为例,它的runlevel主要有以下几种

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/,例如runlevel5就是/etc/rc.d/rc5.d/。每个rc*.d/目录中包含着两个符号链接,这些链接可以连接到/etc/init.d/目录中的指定服务程序。

动手改造

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

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

下面将举一个例子,帮助用户加深理解。当用户启动系统进入runlevel5时,首先要执行的链接是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服务根本不必在网络服务前运行。

可以看出,有些服务要依靠其它服务才能运行,有些服务是完全独立的,它们运行与否与其它服务毫无关系。

资料引用:[url]http://www.knowsky.com/441770.html[/url]

内核提速开机linux,Linux操作系统开机启动提速方法介绍。相关推荐

  1. python脚本在linux上运行的两种方式_python脚本当作Linux中的服务启动实现方法

    脚本服务化目的: python 在 文本处理中有着广泛的应用,为了满足文本数据的获取,会每天运行一些爬虫抓取数据.但是网上买的服务器会不定时进行维护,服务器会被重启.这样我们的爬虫服务就无法运行.这个 ...

  2. Linux操作系统下DHCP服务器配置方法介绍

    Linux操作系统下DHCP服务器配置方法介绍 1.安装dhcp软件包 #rpm –ivh dhcp-3.0.1-12_EL.i386.rpm 2.配置文件dhcpd.conf 由于dhcpd.con ...

  3. 戴尔电脑开机屏幕花屏无法启动解决方法

    戴尔电脑开机屏幕花屏无法启动解决方法.有用户使用的戴尔电脑开机的时候出现了一些问题,电脑屏幕变成了满屏的马赛克花屏,不能正常启动到桌面页面上了.那么这个问题要如何去做出解决,一起看看操作的方法吧. 准 ...

  4. linux设置为共享文件夹,Linux系统下共享文件夹设置方法介绍

    Linux系统下共享文件夹设置方法介绍 作者 HonestQiao 2008年02月21日 16:00 首先当然是要安装samba了,呵呵: sudo apt-get install samba su ...

  5. linux中把路由添加到开机,Linux中增加软路由的方法介绍

    第一种:route add -net 172.16.6.0 netmask 255.255.255.0 gw 172.16.2.254 dev eth0route del gw 172.16.2.25 ...

  6. 计算机上电自检的过程,电脑每次开机都自检的几种解决方法介绍

    电脑每次开机都自检的几种解决方法,从理论上讲,计算机曾经非法关机或突然停电;导致系统盘产生错误文件,在下次开机就会执行自检(但这种情况我并不存在). 第一种解决方案: 在C盘上点右键,选属性,然后选& ...

  7. linux关闭mysql strict mode的方法介绍

    linux关闭mysql strict mode的方法非常简单,下面我来给大家总结了些常用的关闭mysql strict mode模式的例子,希望文章对各位同学会带来帮助. 首先用putty连接lin ...

  8. linux 抓图,关于Linux下的抓图软件和使用方法介绍

    Linux越来越受到人们的关注,使用的人也越来越多.Linux用户可以通过网络交流使用经验.介绍好的软件.在交流中,人们经常互相在网上贴张屏幕截图,使得相互之间的交流变得更加直接.容易.这里我介绍一些 ...

  9. 制作Linux发行版系统光盘的方法介绍

      发布时间:2007.04.11 06:17     来源:赛迪网技术社区    作者:skid 在很多场合,现有的linux发行版并不能满足您的要求,比如: 您需要根据自己的要求取舍安装包 您需要 ...

  10. windows启动linux系统,windows 10 启动linux系统

    windows 10 启动linux系统 [2021-02-18 21:26:20]  简介: 系统运维 Windows中tocmat设置为服务开机启动一 安装Java,tomcat安装jdk,解压t ...

最新文章

  1. jupyter怎么调字体_AJ里最低调的系列之一:Air Jordan 3
  2. 类脑计算的一大突破 BrainScaleS-2
  3. js实现webSocket客户端
  4. mysql binlog 回退_MYSQL Binglog分析利器:binlog2sql使用详解
  5. 关于《蜗居》的一点想法
  6. java图像处理,拷贝图像EXIF信息
  7. Mono Compatibility
  8. Flash 与数学:圆的切线(3)
  9. PacketSender —— TCP/UDP 包测试工具
  10. 关于ISO27001信息安全管理体系的内容详细概括
  11. 计算机代数与数论pdf,计算机代数及数论(maple).pdf
  12. tensorflow(一)windows 10 python3.6安装tensorflow1.4与基本概念解读
  13. 指标之王macd的计算公式和使用方法
  14. Ubuntu桌面卡死、You are in emergency mode
  15. 激光扫描测距仪的实质就是3D激光雷达
  16. iOS HomeKit Quick Start iOS HomeKit快速入门 Lynda课程中文字幕
  17. Skyline三维地理信息系统软件平台
  18. 汽车行业场景化营销新方向:基于 WebGL 的网上虚拟车展
  19. 一步一步实现中后台管理平台模板-13-解决IE浏览器兼容性问题
  20. Combining Character

热门文章

  1. SpringBoot-动力节点-王鹤
  2. 1.安装flink-1.12.2
  3. 【连载】如何掌握openGauss数据库核心技术?秘诀四:拿捏事务机制(1)
  4. 故障恢复:一次底层超融合故障导致的异常处理
  5. 今晚直播丨抢鲜体验-openGauss入门
  6. (文中有惊喜)走进云时代的数据库
  7. 未完待续:关于DB Link和SCN,你还需要知道的是...
  8. 当物联网遇上云原生:K8s向边缘计算渗透中
  9. 2020大厂web前端面试都喜欢问这些
  10. c语言错误writing,C语言编译器的错误信息