天天看點

Linux開機流程及init配置檔案

一、Linux中開機流程 1.首先進行BIOS自檢,加載MBR 啟動整部系統首先需要進行BIOS自檢,加載cmos資訊 接下來進行開機裝置的資料讀取(MBR相關的任務) 2.讀取并執行開機裝置内MBR的boot Loader boot Loader 就是開機系統的引導程式(grup 或spfdisk 等程式)這是安裝多系統時需要着重設定的程式。 Linux現在我們一般使用的是(grub)程式。是以當我們安裝Linux和Windows雙系統時,想要移除Linux系統時不 能直接格式化硬碟。 Windows 的 loader 預設不具有控制權轉交的功能,是以你不能使用 Windows 的 loader 來加載 Linux 的loader ,如果直接格式化Linux所在的硬碟,會兩個系統都無法進入。 boot Loader 的功能: 提供選單:可以使使用者選擇不同的作業系統,這是安裝多系統引導重要的功能 載入核心系統:直接加載可開機的區段的系統核心 轉交其他loader:将開機引導功能轉給其他loader負責 3.核心加載 在loader引導之後,開始讀取核心檔案,核心開始檢測硬體然後開始加載驅動程式 4.啟動初始化程序 在硬體驅動加載成功後,核心會主動呼叫init程式(在RHEL7 以後的系統不是呼叫init程式) Linux系統啟動時需要做大量的初始化工作,挂載檔案系統和交換分區等,啟動各類程序服務等工作。

二、第一支程式init和配置檔案/etc/inittab和runlevel (RHEL7 之前系統存在)

2.1 當核心加載完畢,進行完硬體檢測及驅動程式的加載後,核心會主動呼叫第一支程式/sbin/init,同樣這也是init的PID号碼是1号的原因所在。 /sbin/init 最主要的功能是準備軟體的執行環境,包括系統的主機名,網絡設定,語系處理,檔案系統格式以及其他服務的啟動等。 然而這些所有的動作都會通過init的配置檔案,/etc/inittab來規劃,而/etc/inittab中還有一個很重要的設定項目,就是開機執行等級(runlevel)。

2.2 Run level Linux就是設定run level來規定系統使用不同的服務來啟動的,讓Linux的使用環境不同。 基本上根據有無網絡和GUI将run level分為7個等級。 0 halt (系統直接關機) 1 single user mode(單人維護模式,用在系統出現問題時的維護) 2 Multi user without NFS (類似run level3,但是沒有NFS服務) 3 Full multi user mode(完整含有網絡功能的純文字模式) 4 unused (系統保留功能) 5 X11( runlevel 3類似,加載GUI) 6 reboot(重新啟動)

2.3 /etc/inittab 的内容和文法 這個檔案的文法是利用冒号(:)将設定分隔稱為四個字段,每個字段意義與說明如下: [設定項目]:[run level]:[init的動作]:[指令項目] 1.設定項目:最多4個字元,代表init的主要工作項目,隻是一個簡單的代表說明 2.run level:該項目在哪些run level下進行的意思,如果是35則代表run level3和5都會執行。 3.init的動作項目:主要可以進行的動作項目的意義 initdefault 代表預設的run level設定值 sysinit 代表系統初始化的動作項目 4.指令項目:是一些可以進行的指令,通常是一些script

2.4 init的處理流程 事實上/etc/inittab 的設定也有點類似shell script,因為檔案内容的設定是一行一行的從上往 下處理的,是以init程式依據inittab設定的處理流程是這樣的: 1.先取得run level 就是預設的執行等級的相關設定 2.使用/etc/rc.d/rc.sysinit進行系統初始化 3.按運作級别執行開機系統

2.5 啟動系統服務與相關啟動配置檔案(/etc/rc.d/rc N & /etc/sysconfig)

2.6 使用者自定義開機啟動程式(/etc/rc.d/rc.local) 在完成runrevel指定的各項服務的啟動後,如果還有其他的動作想要完成時,在系統啟動完畢自動執行時 就需要将script寫入/etc/rc.d/rc.local 中,那麼該工作就會在開機時自動加載。

2.7 開機過程中會用到的主要的配置檔案 init程式在運作的時候會有許多執行腳本,包括/etc/rc.d/rc.sysinit 和 /etc/rc.d/rc等等,這些腳本都會 使用相當多的系統配置檔案,這些開機過程會用到的配置檔案大多數放置在/etc/sysconfig目錄下。 /etc/sysconfig/* 在整個開機的過程中,讀取的相關配置檔案都記錄在/etc/sysconfig目錄下 以下是該目錄下重要的檔案 authconfig : 這個檔案主要是規範使用者的身份認證機制,包括是否使用本機的/etc/passwd,/etc/shadow等,以及 /etc/shadow密碼記錄使用哪種加密算法,還有是否使用外部密碼伺服器提供的賬号驗證(NIS,LDAP)等。 系統預設使用MD5加密算法,并且不使用外部的身份驗證機制。 clock : 這個檔案在設定Linux系統主機的時區。 network : 可以設定是否啟動網絡,以及設定主機名和網關(GATEWAY) network-scripts/ : network-scripts/ 裡面的檔案,主要用在設定網卡

2.8 run level 的切換 要每次開機都執行某個預設的 run level,隻需要修改/etc/inittab 裡面的設定項目, 就是【 id:5:initdifault:】裡面的數字 如果隻是暫時變更系統的 run level,使用init[0~6]來進行變更。

三、開機過程的問題解決 很多時候,我們可能因為不正常關機而導緻系統的filesystem出錯,此時Linux可能無法順利開機, 此時我們隻需要進入run level 1 單人維護模式去處理,應該就會解決問題 。 出現系統啟動界面是按‘e’鍵,進入編輯模式,在出現kernel這一行的最後加上single或者1 3.1 忘記root密碼: 忘記root密碼時,隻要能夠進入系統和挂載/ ,然後重新設定root密碼。 1.重新啟動 2.在開機進入grub選單後,在上面的選單上面點'e'進入詳細設定,将光标移動到kernel上方并點e 進入編輯界面,輸入single進入單人維護模式 3.進入單人維護模式後,系統會議root的權限直接給你一個shell ,然後執行【passwd】指令重置密碼 3.2 init配置檔案錯誤 根據開機流程,我們知道當init配置檔案出錯,我們可能無法進入單人維護模式,當出現這種情況是我 們就告訴核心不要執行init,直接呼叫bash,跳過init。同樣在開機進入grub,在grub edit的情況下 執行 init=/bin/bash 『 mount -o remount,rw / 』 用途是将根目錄重新挂載成為可擦寫,至于 『 mount -a 』則是參考 /etc/fstab 的内容重新挂載檔案系統! 此時你又可以開機進行救援的工作 了。救援完畢需要重新開機。

繼續閱讀