目錄:
(一)瞭解系統啓動流程
(二)瞭解GRUB的做用
(三)重置root密碼
(四)當GRUB丟失的時候如何修復系統
(五)當/boot裏缺失文件時如何修復linux
(一)瞭解系統啓動流程
(1.1)①在咱們按下開機鍵之後,最早工做的是咱們硬件BIOS芯片,其中BIOS芯片主要是監測主機的各項硬件包括鍵盤、鼠標、顯示屏、硬盤等等是否都是正常工做的狀態;②若是BIOS芯片檢測是正常的,則會將系統的引導權交給系統的MBR(主引導記錄),在MBR中其中前446B的字節主要是BootLoader引導加載器,64B的字節是分區表的信息,最後2B的字節是用來標識硬盤是不是有效的標誌;③接着就是加載內核鏡像到內存中,內核鏡像並非一個可執行的內核,而是一個壓縮過的內核鏡像,它是提早使用zlib壓縮過的,在這個內核鏡像前面是一個例程,它實現少許硬件設置,並對內核鏡像中包含的內核進行解壓縮,而後將其放入高端內存中;④init進程是系統全部進程的起點,內核在完成核內引導後,即在本進程空間內加載init程序,它的進程是1。Init進程是全部進程的發起者和控制者。由於在任何基於Linux的系統中,它都是第一個運行的進程,因此inti進程的編號(PID)永遠是1;⑤最後init的工做是根據/etc/inittab來執行相應的腳本,進行系統初始化,設置鍵盤,字體,裝載模塊,設置網路等。
注意:加載BIOS->讀取MBR->Boot Loader->加載內核->用戶層init依據inittab文件來設定系統運行的等級(通常3或者5,3是多用戶命令行,5是界面)->init進程執行rc.syninit->啓動內核模塊->執行不一樣級別運行的腳本程序->執行/etc/rc.d/rc.local(本地運行服務)->執行/bin/login,就能夠登陸了。
(1.2)咱們知道系統的內核是放在sda1分區的,不一樣的內核識別不一樣的文件系統,換言之就是沒有內核就沒法識別文件系統。在開機以前sda1是有文件系統的,而內核是放在sda1中的,咱們在開機前通常是須要先將內核引導起來,而後才能夠識別sda1的文件系統的;可是引導內核是須要先有文件系統的狀況下才可以加載內核的;可是文件系統的識別是須要先有內核運行的,這樣就陷入了一個死循環當中了。此時咱們就引出了BootLoader了,你們都據說過grub,它是系統的引導程序,一樣級別的引導程序還有lilo,不過是屬於很是古老的程序了,咱們所說的BootLoader是屬於grub當中的一段代碼。
(1.3)在系統中咱們發現sda1分區的起點是從2048號扇區開始的,硬盤是從0磁道0扇區開始的,而0磁道0扇區是包含有512字節的,這512字節中的前446字節是BootLoader。而BootLoader其實是從grub裏stage1這段代碼反彙編出來的,做用就是用來加載第二個扇區。第二個扇區是由grub裏stage1.5反彙編出來的一段代碼,做用是加載第3個到第n個扇區(其中n < 2048)。而在第3到第n個扇區之間存放的是一個及其精簡版的文件系統,通過如上過程的引導此時咱們的硬件就能夠識別文件系統了,進而能夠在sda1分區中加載真正的系統內核了。vim
(二)瞭解GRUB的做用
(2.1)如今咱們可能會有疑問系統內核在哪裏,找到內核以後,以什麼樣的參數來初始化內核呢?而這一切都是須要它的配置文件來設定的,這個配置文件主要是存放在/boot/grub2/目錄下的grub.cfg配置文件中的,這個配置文件是由內核自動加載的,配置文件的路徑是寫入到代碼中的不可以更改的。
# cat /boot/grub2/grub.cfg
(2.2)因爲/boot/grub2/目錄下的grub.cfg配置文件的內容很是的多,並且在系統啓動時都會加載這個文件,因此這個文件也註明了「DO NOT EDIT THIS FILE」(不要修改這個文件),若是咱們想要將修改/boot/grub2/grub.cfg配置文件中的參數,則能夠先在/etc/default/grub文件中進行修改,而後使用「grub2-mkconfig」命令將/etc/default/grub文件中修改後的內容同步到/boot/grub2/grub.cfg配置文件中。而咱們知道「grub2-mkconfig」只是一個程序,它是須要去調用/etc/grub.d/目錄下腳本程序執行的,以此來修改/boot/grub2/grub.cfg配置文件中的內容。
(2.3)注意:經驗總結,因此咱們若是想要修改網卡名,將網卡名設置爲必將常見的eth0、eth1的格式,咱們可使用以下的方式進行修改,而後再執行「grub2-mkconfig」這個命令將修改的配置信息應用到配置文件/boot/grub2/grub.cfg當中。
# grub2-mkconfig -o /boot/grub2/grub.cfg---將/etc/default/grub配置文件中的信息從新加載到/boot/grub2/grub.cfg系統配置文件中
(2.4)咱們說盡可能不要修改「/boot/grub2/grub.cfg」配置文件中的內容,並非說不能修改,實際上是能夠修改這個配置文件中的內容的。可是站在安全性、易用性角度來看,這個/boot/grub2/grub.cfg配置文件是屬於系統加載的文件,常常會加載讀取,很容易就被修改,例如咱們升級內核,此時系統升級完畢後也會一同升級/boot/grub2/grub.cfg配置文件中的內容,那麼咱們以前在其中配置的參數就都被覆蓋了。而若是咱們經過執行「grub2-mkconfig」命令,加載/etc/default/grub配置文件來進行修改則高效了不少,首先這個/etc/default/grub配置文件並不屬於系統文件,基本不會被其餘的進程加載,所以這個文件的存在系統中的安全性比較高,文件內容基本不會改變。因此咱們在修改系統的參數的時候通常是建議修改/etc/default/grub配置文件。
(2.5)如今咱們開啓vms001主機上主機名爲station的KVM虛擬機,咱們如今想要實現進入啓動界面後系統有50秒的等待用戶選擇時間,同時系統默認是從第二個選擇條進入。首先咱們從vms001主機遠程登陸到KVM虛擬機station上,而後進入/etc/default/grub配置文件將GRUB_TIMEOUT參數修改成50秒,GRUB_DEFAULT參數修改成1(圖2-7),而後執行「grub2-mkconfig」這個命令將修改的配置信息應用到配置文件/boot/grub2/grub.cfg當中(圖2-8),此時咱們發現station虛擬機開機後已是第二行做爲默認系統,而且默認倒計時的時間也已經修改成50秒了(圖2-9)。所以經過/etc/default/grub配置文件修改系統啓動時的參數時可靠且有效的。安全
(三)重置root密碼
(3.1)接着咱們能夠經過上下鍵選擇本身所須要的內核,而後經過按鍵「e」進入到編輯對應內核的界面(圖3-1),咱們進入到第一個內核的編輯的界面,而後在linux16這一行的最後添加一個參數「xx=test」,而後按Ctrl+x繼續後面的執行內容(圖3-1),咱們在station虛擬機上登陸系統後發現,在內核參數/proc/cmdline中已經生效了咱們剛剛添加的參數(圖3-3)。
(3.2)咱們啓動系統的時候均可以插入一些咱們想指定的參數,而後按Ctrl+x執行,固然這裏修改參數只是本次啓動生效,通常咱們在維護或者修復系統的時候,纔會在這裏修改內核的參數。其中登陸系統或有多種模式,第一種是rescue模式(救援模式),假設系統正常啓動須要20個必須服務,若是某個必須服務出問題了,就會致使系統無法啓動,假設救援模式只有10個必須服務,如今咱們的系統服務異常沒有辦法正常的進入系統,此時咱們能夠選擇進入到救援模式,出問題的服務不在救援模式的必須服務以內,那麼此時系統即可以啓動起來。咱們在station虛擬機中按「e」鍵進入到內核編輯狀態,而後在linux16一行的末尾刪除「rhgb quiet」,而後添加「single」,也能夠添加「s」或者添加數字「1」(圖3-4),按Ctrl+x繼續執行。此時咱們經過輸入root用戶的密碼即可以正常的登陸救援模式下的系統了(圖3-5),此時咱們即可以使用常規的檢查系統日誌的方式進行系統排錯了。
(3.3)第二種是emergency模式,假設系統正常啓動須要20個必須服務,若是某個必須服務出問題了就會致使系統無法啓動,假設emergency模式只有6個必須服務,咱們進入到emergency模式的時候,若是出問題的服務不在emergency模式以內,則此時咱們即可以在該模式下將系統啓動起來。咱們在station虛擬機進行操做,咱們能夠刪除「rhgb quiet」也能夠不刪除,而後須要加上emergency表示進入該模式,接着按ctrl+x繼續執行(圖3-6)。進入到登陸界面後,咱們只須要填寫root用戶的密碼,即可以在emergency模式下登陸系統了(圖3-7),而後咱們即可以使用常規的檢查系統日誌的方式進行系統排錯了。
(3.4)若是咱們忘記了root用戶的密碼,咱們想要先修改root用戶的密碼,而後再登陸系統,此時咱們可使用以下編輯內核的方式操做,咱們先將「rhgb quiet」刪除,而後添加「init=/bin/sh」,再按Ctrl+x繼續執行(圖3-8)。因爲vda1硬盤是以只讀的形式掛載的,因此咱們須要將其修改成可讀可寫的形式掛載,而後重置root用戶的密碼,並在根目錄下建立.autorelabel文件,而後執行「exec /sbin/init」命令啓動系統(圖3-9),此時咱們即可以正常的登陸系統了。重置root密碼流程以下
# mount -o remount,rw /
# echo redhat | passwd --stdin root
# touch /.autorelabel
# exec /sbin/init
(3.5)若是咱們但願提升系統的安全性,也能夠對grub進行加密的,咱們能夠進入到/etc/grub.d目錄下,找到00_header文件(圖3-11),並在文件中設置以下的信息,對tom用戶進入grub進行加密控制(圖3-12),修改完00_header配置文件後執行「grub2-mkconfig」命令,將配置的信息同步到/boot/grub2/目錄下的grub.cfg文件中(圖3-13),此時咱們再按「e」進入grub的時候,並不會直接進入到修改內核的界面,而是出現了讓咱們輸入用戶名密碼的信息。此時咱們便實現了對grub加密的需求。加密grub
(3.6)固然以上咱們對grub進行加密使用的是明文的密碼,若是咱們但願提升安全性使用密文的密碼,則可使用pbkdf2格式的加密工具對密碼進行加密(圖3-15),而後將加密的結果填寫到/etc/grub.d/00_header文件中(圖3-16),並執行「grub2-mkconfig」命令,將配置的信息同步到/boot/grub2/目錄下的grub.cfg文件中(圖3-17),此時咱們想要進入grub對內核進行參數設置時,須要填寫正確的用戶名和密碼信息才能正常的進入。
# grub2-mkpasswd-pbkdf2---使用pbkdf2格式加密工具對咱們設置的密碼進行加密
(3.7)第三種是使用光盤鏡像登陸系統的救援模式。若是咱們忘記了系統登錄的密碼,同時也忘記了進入grub修改內核的超級用戶的密碼,此時咱們就須要去使用光盤鏡像登陸系統的救援模式。咱們在VMware環境的vms002主機上來進行實驗,假設咱們如今忘記了登陸vms002主機root用戶的密碼,咱們重啓機器後,馬上按Esc鍵進入到Boot Menu界面,而後選擇第三項「CD-ROM Drive」,接着依次選擇「Troubleshooting」-->「Rescue a Red Hat Enterprise Linux system」進入到了Rescue界面,此時咱們進入的系統並不是是咱們原來硬盤裏的系統,咱們如今所在的位置是光盤裏的系統,而咱們硬盤中的系統是處於光盤系統的/mnt/sysimage的位置。
(3.8)此時咱們vms002主機經過光盤鏡像便進入到了光盤鏡像的系統中了,咱們當前vms002主機的硬盤文件在/mnt/sysimage目錄下,若是咱們想切換到硬盤文件的系統中進行操做,則應該使用chroot命令進行切根操做,當前咱們雖然在光盤鏡像的/mnt/sysimage/目錄下,可是咱們由於通過了切根操做,因此顯示當前咱們在根目錄下(實際是在硬盤的根目錄下)。
# ls /mnt/sysimage/
# chroot /mnt/sysimage/
(3.9)接着咱們即可以在系統中重置root用戶的密碼了,也能夠編輯00_header文件中關於超級用戶登陸grub的密碼信息。這樣咱們就實現了當發生沒法進入系統的狀況,使用光盤鏡像仍然能夠進入救援模式更改密碼、登陸系統的需求了。而後咱們使用「exit」退出兩次,就能夠正常的進入系統啓動界面了。網絡
(四)當GRUB丟失的時候如何修復系統
(4.1)咱們知道grub做爲系統的引導程序很重要,若是grub出現了丟失或者損壞的狀況,那麼系統便會出現一直重啓或者從其餘設備例如光盤或者網絡重啓的狀態,例如咱們的硬盤MBR的前446個字節出現了損壞,則表明系統的BootLoader程序沒有了,即便咱們嘗試選擇「Troubleshooting」-->「Boot from local drive」也仍然沒法正常的進入系統(圖4-2和圖4-3)。
# dd if=/dev/zero of=/dev/sda bs=1 count=446---咱們使用zero填充了sda硬盤的前446字節的內容
(4.2)此時咱們應該想辦法進入系統中修復BootLoader,咱們重啓系統後選擇「Troubleshooting」-->「Rescue a Red Hat Enterprise Linux system」進入到Rescue救援模式的界面,而後執行切根到系統的根目錄下,並從新安裝grub程序,此時咱們即可以正常的啓動系統了(圖4-6)。
# chroot /mnt/sysimages/---切換根
# grub2-install /dev/sda---安裝grub程序,重裝grub程序ide
(五)當/boot裏缺失文件時如何修復
(5.1)在vms002主機上咱們將/boot/目錄中的相關啓動文件刪除,此時咱們發現重啓電腦後系統就沒法正常的引導起來了,此時啓動系統後咱們能夠看到安裝grub的界面,只是系統在加載時加載不到而已(圖5-2)。這個時候咱們應該重啓系統進入到救援模式中,咱們在vms002主機上重啓機器後按Esc鍵進入到Boot Menu界面,而後選擇CD-ROM進入,接着選擇「Troubleshooting」-->「Rescue a Red Hat Enterprise Linux system」便經過光盤引導進入到了救援模式當中了(圖5-4),接着咱們使用chroot命令實現從光盤系統切根到硬盤系統當中,此時咱們發如今/boot目錄下沒有任何系統啓動的相關文件。
(5.2)此時咱們須要將啓動文件安裝起來,咱們將/mnt目錄掛載到/dev/cdrom光盤鏡像內容中,而後將kernel-3.10.0的內核文件強制從新安裝起來。此時咱們發現/boot目錄中已經生成了對應的文件信息。
# mount /dev/cdrom /mnt---首先將/mnt目錄掛載到/dev/cdrom光盤鏡像內容中
# rpm -ivh /mnt/Packages/kernel-3.10.0-229.el7.x86_64.rpm --force---強制從新安裝kernel-3.10.0的內核文件
(5.3)雖然/boot目錄中已經生成了對應的文件信息,可是咱們發現仍是缺乏相關的內容,例如/boot/grub2/grub.cfg文件沒有生成,此時咱們須要使用「grub2-mkconfig」命令生成grub.cfg系統加載的配置文件(圖5-7)。同時咱們還須要將「grub2-install」從新安裝一次,這樣系統除了將grub從新安裝也會生成其餘系統所需的配置文件(圖5-8),接着咱們連續兩次「exit」就能夠正常進入系統了。
# mkdir /boot/grub2---建立一個/boot/grub2目錄
# grub2-mkconfig -o /boot/grub2/grub.cfg---將/etc/default/grub配置文件中的信息同步到/boot/grub2/目錄下的grub.cfg文件中
# grub2-install /dev/sda---從新安裝grub程序,而且將安裝的程序放到/dev/sda硬盤分區中
(5.4)經驗總結,故障排錯,有時候咱們在啓動iSCSI服務的主機的時候,若是忘記在/etc/fstab文件中添加「_netdev」選項,則咱們的系統可能會出現沒法啓動的狀況,此時咱們應該在系統中直接輸入root的用戶的密碼,能夠臨時進入系統,而後對配置文件/etc/fstab進行修改,而後重啓系統便可正常登陸系統。
(5.5)經驗總結,有時候若是咱們但願本身的系統開機後可以執行一些腳本、或者加載一些模塊,此時咱們能夠在/etc/rc.d/rc.local裏添加一些腳本文件,固然同時還須要給/etc/rc.d/rc.local文件添加可執行權限。系統提示符字符,路由器交換機
# vim /etc/rc.d/rc.local
# chmod +x /etc/rc.d/rc.local
(5.6)通常咱們在系統啓動的過程當中也須要關注兩個配置文件,第一個是/etc/motd文件,這個文件通常是在咱們遠程登陸系統的過程當中起做用(圖5-16)。系統提示符字符,路由器交換機
# vim /etc/motd
(5.7)第二個是/etc/issue文件,這個文件主要是配置在字符界面登陸系統的時候登陸界面的提示符信息,當咱們使用字符界面登陸vms002主機的時候,系統顯示了咱們在/etc/issue配置文件中添加的信息(圖5-18)。系統提示符字符,路由器交換機
# vim /etc/issue工具
—————— 本文至此結束,感謝閱讀 ——————字體