Linux啟動全線提速指南(1)

來源:互聯網
上載者:User

Linux系統是十分優秀的作業系統,但啟動時間長是該系統的缺點之一。那麼能否通過一些設定來縮短Linux系統的啟動時間呢?當然可以。本文將向讀者展示如何在不犧牲Linux系統可用性的前提下,縮短系統的啟動時間。要實現這一目標,需要瞭解系統的各類服務及它們之間的從屬關係,進而使它們在條件允許的前提下同時啟動,從而大大節省系統啟動時間。

準備工作

如果想採用本文介紹的方法對Linux系統進行設定,首先要熟悉Linux系統的設定語言。對系統的啟動過程進行設定是一項比較危險的行為,容易造成系統無法啟動。一旦發生這種情況,最好重新啟動系統後選擇單一使用者模式,將系統還原並重啟。當然,最重要的是在設定前備份重要資料。

其次,建議使用者最好在對本機系統進行修改前,先進行修改測試。如果使用者只有一台電腦,那麼這裡建議使用使用者模式Linux系統UML)進行測試。UML是一個核心補丁,它可以將Linux系統的核心轉譯成為二進位,以便使用者可以像使用普通軟體那樣運行Linux系統。一旦出現意外情況,損失的只是UML,而原系統卻可安然無恙。

Linux系統的啟動順序和runlevel

Linux系統的啟動包括多個步驟,這裡主要介紹一下核心載入後的系統啟動步驟。使用者可以通過運行/sbin/runlevel命令來查看系統目前的runlevel。runlevel是Linux系統用來區別系統進階啟動設定類型的數字。這些數字十分常見,它們中的絕大多數都有著明確的含義。以Red Hat Linux系統為例,它的runlevel主要有以下幾種見表1):

 

表1

init如何初始化系統

init可以通過一個ASCⅡ設定檔案得知如何改變系統的runlevel。通常情況下該設定檔案可以指引init來執行/etc/rc.d/rc命令,從而獲得runlevel的相關資訊。

系統服務

使用者所需要的各種系統服務都是由rc指令程式來啟動的。系統潛在的服務紛繁複雜。大多數Linux系統通常只提供sshd(SecureShell服務)、syslog(系統日誌工具)和lpd(列印服務)等功能。

使用者可以從/etc/rc.d/目錄?姓業剿械姆瘛H綣蚩飧瞿柯跡岱⑾中磯嚳裰皇且恢滯飪淺絛潁皇且計淥絛蚶賜瓿曬ぷ鼇R殘磧腥嘶崳剩瑀c程式是如何知道每個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狀態下指向程式的連結。

 
  1. # cd /etc/rc.d/rc5.d  
  2.  
  3. # ls -al  
  4.  
  5. total 8  
  6.  
  7. drwxr-xr-x 2 root root 4096 Jul 15 09:29 .  
  8.  
  9. drwxr-xr-x 10 root root 4096 Jun 21 08:52 ..  
  10.  
  11. lrwxrwxrwx 1 root root 19 Jan 1 2000 K05saslauthd -> ../init.d/saslauthd  
  12.  
  13. lrwxrwxrwx 1 root root 20 Feb 1 2003 K15postgresql -> ../init.d/postgresql  
  14.  
  15. lrwxrwxrwx 1 root root 13 Jan 1 2000 K20nfs -> ../init.d/nfs  
  16.  
  17. lrwxrwxrwx 1 root root 14 Jan 1 2000 K24irda -> ../init.d/irda  
  18.  
  19. lrwxrwxrwx 1 root root 17 Jan 1 2000 K35winbind -> ../init.d/winbind  
  20.  
  21. lrwxrwxrwx 1 root root 15 Jan 1 2000 K50snmpd -> ../init.d/snmpd  
  22.  
  23. ……  
  24.  
  25. lrwxrwxrwx 1 root root 18 Feb 8 11:15 K92iptables -> ../init.d/iptables  
  26.  
  27. lrwxrwxrwx 1 root root 19 Feb 1 2003 K95firstboot -> ../init.d/firstboot  
  28.  
  29. lrwxrwxrwx 1 root root 15 Jan 1 2000 S05kudzu -> ../init.d/kudzu  
  30.  
  31. lrwxrwxrwx 1 root root 14 Jun 21 08:55 S09isdn -> ../init.d/isdn  
  32.  
  33. lrwxrwxrwx 1 root root 17 Jan 1 2000 S10network -> ../init.d/network  
  34.  
  35. lrwxrwxrwx 1 root root 16 Jan 1 2000 S12syslog -> ../init.d/syslog  
  36.  
  37. lrwxrwxrwx 1 root root 17 Jan 1 2000 S13portmap -> ../init.d/portmap  
  38.  
  39. lrwxrwxrwx 1 root root 17 Jan 1 2000 S14nfslock -> ../init.d/nfslock  
  40.  
  41. lrwxrwxrwx 1 root root 18 Jan 1 2000 S17keytable -> ../init.d/keytable  
  42.  
  43. lrwxrwxrwx 1 root root 16 Jan 1 2000 S20random -> ../init.d/random  
  44.  
  45. lrwxrwxrwx 1 root root 16 Jun 21 08:52 S24pcmcia -> ../init.d/pcmcia  
  46.  
  47. lrwxrwxrwx 1 root root 15 Jan 1 2000 S25netfs -> ../init.d/netfs  
  48.  
  49. lrwxrwxrwx 1 root root 14 Jan 1 2000 S26apmd -> ../init.d/apmd  
  50.  
  51. lrwxrwxrwx 1 root root 16 Jan 1 2000 S28autofs -> ../init.d/autofs  
  52.  
  53. lrwxrwxrwx 1 root root 14 Jan 1 2000 S55sshd -> ../init.d/sshd  
  54.  
  55. lrwxrwxrwx 1 root root 20 Jan 1 2000 S56rawdevices -> ../init.d/rawdevices  
  56.  
  57. lrwxrwxrwx 1 root root 16 Jan 1 2000 S56xinetd -> ../init.d/xinetd  
  58.  
  59. lrwxrwxrwx 1 root root 14 Feb 1 2003 S58ntpd -> ../init.d/ntpd  
  60.  
  61. lrwxrwxrwx 1 root root 13 Jun 21 10:42 S60afs -> ../init.d/afs  
  62.  
  63. ……  
  64.  
  65. lrwxrwxrwx 1 root root 18 Jan 1 2000 S80sendmail -> ../init.d/sendmail  
  66.  
  67. lrwxrwxrwx 1 root root 13 Jan 1 2000 S85gpm -> ../init.d/gpm  
  68.  
  69. lrwxrwxrwx 1 root root 15 Mar 22 08:24 S85httpd -> ../init.d/httpd  
  70.  
  71. ……  
  72.  
  73. lrwxrwxrwx 1 root root 14 Jul 15 09:29 S98wine -> ../init.d/wine  
  74.  
  75. lrwxrwxrwx 1 root root 13 Feb 8 17:26 S99db2 -> ../init.d/db2  
  76.  
  77. lrwxrwxrwx 1 root root 11 Jun 21 08:52 S99local -> ../rc.local  
  78.  

如果使用者想暫時終止某一runlevel的一項服務,只要刪除相對應的連結就行了。然而,對連結進行手動設定是一項繁重而又易錯的工作,但有一個十分有用的幫手,它的名字叫chkconfig。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.