︿
Top

1、前言

談到 CentOS Linux 的 RunLevel 啟動模式 等級,便要先了解一下整個 CentOS 開機過程。透過下列的開機流程說明,便會了解到在 RunLevel 啟動模式,為何能夠掌控系統後半段開機階段的相關服務啟動及關閉。



文章目錄

1、前言
2、CentOS 開機流程
3、設定 RunLevel 啟動模式
4、確認系統啟用服務
5、開機自動執行程式



2、CentOS 開機流程

下列開機流程是以安裝於 x86 硬體上的 CentOS 進行說明:

1. 硬體伺服器 BIOS (INT 13H / EFI) 開機時會檢查連接於系統上的主硬碟 MBR / GPT 來載入開機管理程式(例如 GRUB、LILO等)。
2. 初始階段開機管理程式會載入記憶體並從 /boot 掛載點內啟動下一階段開機管理程式,舉例來說,GRUB 開機管理程式便是載入 /boot/grub/grub.conf 設定檔內容中的 initrd-2.6.18-194.el5.img 映像檔。
3. 這個階段中會將系統核心,以及必需的系統模組載入至記憶體內並且掛載於 root 分割區,此時也同步釋放未使用到的記憶體。請注意此時 root 分割區為唯讀狀態。
4. 當核心載入完畢,執行完硬體偵測及相關驅動程式載入後,接著便會將開機過程的控制權轉交給系統第一隻執行程式 /sbin/init 來準備設定使用者環境。
5. /sbin/init 程式將透過 /etc/inittab 設定檔來為系統載入適當的 RunLevel 相關設定,例如網路設定、相關服務啟動等,並且將 /etc/fstab 設定檔內所條列的掛載點,一一掛載至檔案系統。相關服務啟動完成,檔案系統掛載完畢,至此系統開機完成。
6. RunLevel (SysV init) 啟動模式等級可以分為 7 種等級 分別是 0 ~ 6,而這 7 個數字所分別代表的意義如下:
  • 0 (halt)系統關機,若您將 RunLevel 設為此模式,則會發現當開機程式完成後系統就直接關機。
  • 1 (Single user mode)單人模式,通常在系統發生問題需要維護時才會進入此一模式。
  • 2 (Multiuser without NFS)多人模式但沒有 NFS 網路功能,通常用於多人多工但不需要網路功能時,才會進入此模式。
  • 3 (Full multiuser mode)多人文字模式,此模式為不需要進入視窗模式,並且具備完整網路功能的管理者所使用的模式。
  • 4 (unused)尚未使用,使用者可以自行定義。
  • 5 (X11)多人圖形模式,此模式為習慣使用視窗模式,並且具備完整網路功能的管理者所使用的模式。
  • 6 (reboot)重新啟動,若您將 RunLevel 設為此模式則會發現當開機程式完成後,系統就直接重新啟動。



3、設定 RunLevel 啟動模式

一般情況下最常使用到的 RunLevel 啟動模式等級為 3 也就是文字模式 (Text mode),或者是 RunLevel 5 也就是圖形模式 (GUI mode),若您希望變更系統預設使用的 RunLevel 啟動模式等級,可以透過修改 「/etc/inittab」 設定檔內容來達成。下列操作步驟為將 RunLevel 3 修改為 RunLevel 5:
vi /etc/inittab      //修改 RunLevel 設定檔
  id:3:initdefault:    //使用 RunLevel 3 (文字模式)
  id:5:initdefault:    //使用 RunLevel 5 (圖形模式)

那要如何得知目前所在的 RunLevel 啟動模式等級中,哪些服務是啟用的,哪些是關閉的呢?並且又該如何啟用某個服務或關閉某個服務呢?要達成上述目的有三個指令可以達成分別是 chkconfig、ntsysv、system-config-services 詳細差異及說明如下:
  • chkconfig:此指令可以條列出指定的服務在每個 RunLevel 中的啟用或關閉狀態,您可以使用指令來將服務在某個 RunLevel 進行啟用及關閉的狀態,或者搭配參數 on / off 來一次將該服務在 RunLevel 2 ~ 5 進行啟用及關閉的狀態。
  • ntsysv:此指令會開啟互動視窗,您只要將該服務勾選或取消勾選便是將該服務進行啟用及關閉,而該服務的啟用及關閉只會影響您目前所處的 RunLevel 啟動模式等級,例如您在文字模式 (RunLevel 3) 將 smartd 服務關閉則表示該服務只在 RunLevel 3 時不啟動,但在圖形模式 (RunLevel 5) 時該服務仍然會啟動。
  • system-config-services:請注意此指令僅能在圖形模式下執行,透過圖形管理介面您可以輕鬆對該服務進行啟動 (Start)、停止 (Stop)、重新啟動 (Restart),若是勾選該服務則表示該服務在 RunLevel 5 為啟用狀態。



4、確認系統啟用服務

下列操作為透過 chkconfig 指令,當系統啟動於 RunLevel 3 啟動模式,查詢系統將會自動啟動哪些服務。還有如何透過 chkconfig 指令查詢及針對單一服務進行 RunLevel 啟動模式等級的啟用及關閉。最後則是啟動 ntsysv 的互動設定視窗及 system-config-services 圖形管理介面。

查詢 RunLevel 3 所啟用的服務
chkconfig --list |grep 3:on     //查詢 RunLevel 3 所啟用的服務
  abrtd           0:off   1:off   2:off   3:on    4:off   5:on    6:off
  acpid           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
  auditd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
  autofs          0:off   1:off   2:off   3:on    4:on    5:on    6:off
  ...略...

設定 smartd 服務於 RunLevel 3、5 啟用並查看狀態
chkconfig smartd --list            //查看 smartd 服務狀態
   smartd          0:off   1:off   2:off   3:off   4:off   5:off   6:off
chkconfig smartd on --levels 35   //設定 smartd 服務於 RunLevel 3、5 啟用
chkconfig smartd --list            //查看 smartd 服務狀態
   smartd          0:off   1:off   2:off   3:on    4:off   5:on    6:off




5、開機自動執行程式

常常會有 Linux 初學者詢問,若希望有程式或動作想要在系統開機時,如何自動啟動某些服務或執行某個動作,那該如何達成呢?您可以將相關執行動作寫入至 /etc/rc.local 設定檔內即可。或許您會有疑問為何寫入此檔案的內容會在開機時自動執行,您可以查看 RunLevel 3、5 的執行資料夾裡面有 S99local 的連結檔案,其內容便是連結指向至 /etc/rc.local 檔案,而在 RunLevel 資料夾中 S 開頭表示啟動 (Satrted) 而 K 表示關閉 (Killed),而數字 99 為啟動順序(數字愈小愈先啟動),這也就是為何寫入 /etc/rc.local 檔案中的內容會在開機時被執行的原因。
ls -l /etc/rc.d/rc{3,5}.d/S99local   //查看 RunLevel 3、5 資料夾 S99local 檔案內容
  lrwxrwxrwx. 1 root root 11 Oct  7 09:31 /etc/rc.d/rc3.d/S99local -> ../rc.local
  lrwxrwxrwx. 1 root root 11 Oct  7 09:31 /etc/rc.d/rc5.d/S99local -> ../rc.local
文章標籤: