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