用户操作
[即时聊天] [发私信] [加为好友]
白宇ID:bekars
329270次访问,排名174,好友0人,关注者5人。
bekars的文章
原创 185 篇
翻译 0 篇
转载 157 篇
评论 52 篇
bekars的公告
我的淘宝小店:http://shop33320596.taobao.com/ 主营各类Linux发行版和行业软件
Gold Price per Gram in China Yuan Renminbi Gold Price per ounce in United States Dollars
最近评论
bluehouse1985:Linux 环境下的多核调试
— Intel + Totalview 强强联合!
目前,在软件开发行业,各种性能优异的调试工具层出不穷。但是,它们中的绝大部分都只支持windows环境。即使能支持linux平台,操作起来也很不方便。因此,对于长期在linux上编写程序的开发人员来说,如何调试就成了一个令人头痛的问题!Intel软件 和 Total……
metababy:很好,受用
qutanzi:
thw01:建议上面的这位要是公司有熟悉嵌入式系统的人,可以买便宜的。如果一个人研究,没人指点,最好买贵点的。毕竟贵点的,资料齐全,软件齐全。
szq2k08:太好了!
文章分类
收藏
    相册
    My Photo
    Linux Power Link
    Debian Apt-get Search
    Debian WiKi
    Debian学习小组|Debian.linuxsir.org
    DENX ELDK
    Gentoo Portage File Search
    Gentoo WiKi
    Gentoo中文用户|Gentoo.linuxsir.org
    Gentoo官方中文论坛
    IPCOP
    Linux netfilter Hacking HOWTO
    Linuxsir.Org
    MIZI Linux
    SnapGear Embedded Linux
    中国Linux公社
    中国Linux论坛
    元器件手册
    My Links
    ppstream
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 Linux启动全线提速法收藏

    新一篇: 学会在Linux下对硬盘分区 | 旧一篇: 值得一生收藏的经典台词

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

    准备工作

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

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

    Linux系统的启动顺序和runlevel

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

    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服务根本不必在网络服务前运行。

    可以看出,有些服务要依靠其它服务才能运行,有些服务是完全独立的,它们运行与否与其它服务毫无关系。因此,可以使这些与其它服务无从属关系的服务同时运行。当这些服务启动后,用户就可以启动以它们为运行前提的其它服务,这样环环相扣、循序渐进,直到启动整个系统。

    听起来这似乎是一个十分复杂的过程,但是已经为用户准备了一件十分好用的工具,这就是“Make”程序。“Make”程序一般与编译软件一起使用,它可以为用户提供所需要的完整架构,用户只需要告诉它各项服务间的从属关系就行了。

    结论

    综上所述,缩短系统启动时间的方法就是先搞清各项服务间的从属关系,然后编排合理的启动次序,尽可能使限制条件相同的服务同时启动,当然别忘了只启动需要的服务。由于Linux系统的种类不同,这种方法产生的效果也不尽相同,大家在使用过程中还要具体问题具体分析。

    发表于 @ 2005年02月23日 15:07:00|评论(loading...)|编辑

    新一篇: 学会在Linux下对硬盘分区 | 旧一篇: 值得一生收藏的经典台词

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © bekars