1. 程式人生 > >Linux 開機啟動順序及一些常見無法開機情況排錯(centos6)

Linux 開機啟動順序及一些常見無法開機情況排錯(centos6)

Linux系統排錯 Linux系統啟動流程 boot目錄的恢復 分區表信息的恢復 主扇區的恢復

Linux開機啟動順序

技術分享圖片
這個圖就很完整的介紹了Linux的開機啟動順序
下面我就跟大家詳細介紹下開機的一個啟動流程
第一步,加載BIOS
當你打開計算機電源的時候,計算機就會首先加載BIOS信息,也就是所謂的加電自檢。由此可見BIOS信息是如此的重要,計算機必須首先就找到它。這是因為BIOS中包含了CPU的相關信息、硬盤信息、內存信息、時鐘信息、PnP特性等等。加電自檢主要由硬件的部分來完成,BIOS被設計為用來初始化硬件組成,POST作為BIOS的組成部分,用於檢驗電腦硬件基本功能是否正常。如果POST失敗,那麽這個電腦也就不能使用。
第二步,讀取MBR
BIOS加點自檢如果確認硬件的基本功能正常後,會產生一個 BIOS 中斷 INT 13H,該中斷指向某個接入的可引導設備的引導扇區。

眾所周知,硬盤上第0磁道第一個扇區被稱為MBR,也就是Master Boot Record,即主引導記錄,它的大小為512字節。裏面存放了預啟動信息,分區表信息。系統找到MBR後,就會復制0X7c00地址所在的物理內存中。其實被復制到物理內存的內容就是Boot Loader,而具體到你的電腦,那就是lilo或者grub了。
第三步,Boot Loader
而BIOS所找到的包含有效的引導記錄的第一個引導扇區將被裝載到內存中,並且控制權也將從引導扇區轉移到此段代碼。

引導扇區是引導加載器真正的第一階段。大多數 Linux 發行版本使用的引導加載器有三種:GRUB、GRUB2 和 LILO。GRUB2 是最新的,也是相對於其他老的同類程序使用最廣泛的。系統通過讀取內存中的grub配置信息,並依照此配置信息來啟動不同的操作系統。

第四步,加載內核
內核的相關文件位於 /boot 目錄下,這些內核文件可以通過其文件名進行識別,其文件名均帶有前綴 vmlinuz。你可以列出 /boot 目錄中的內容來查看操作系統中當前已經安裝的內核。
在選定的內核加載到內存中並開始執行後,在其進行任何工作之前,內核文件首先必須從壓縮格式解壓自身。
系統會根據grub設定的內核映像所在路徑,系統讀取內存映像,並進行解壓縮操作。此時,屏幕一般會輸出“Uncompressing Linux”的提示。當解壓縮內核完成後,屏幕輸出“OK, booting the kernel”。
系統將解壓後的內核放置在內存之中,並調用start_kernel()函數來啟動一系列的初始化函數並初始化各種設備,完成Linux核心環境的建立。至此,Linux內核已經建立起來了,基於Linux的程序應該可以正常運行了。
第五步,設定運行等級
內核被加載後,第一個運行的程序便是/sbin/init,該文件會讀取/etc/inittab文件,並依據此文件來進行初始化工作。
其實/etc/inittab文件最主要的作用就是設定Linux的運行等級,其設定形式是“:id:5:initdefault:”,這就表明Linux需要運行在等級5上。Linux的運行等級設定如下:
0:關機
1:單用戶模式
2:無網絡支持的多用戶模式
3:有網絡支持的多用戶模式
4:保留,未使用
5:有網絡支持有X-Window支持的多用戶模式
6:重新引導系統,即重啟
第六步,init進程執行rc.sysinit
在設定了運行等級後,Linux系統執行的第一個用戶層文件就是/etc/rc.d/rc.sysinit腳本程序,它做的工作非常多,包括設定PATH、設定網絡配置(/etc/sysconfig/network)、啟動swap分區、設定/proc等等。
做好以上一切準備後,系統開始進入用戶層的初始化階段。
第七步,啟動內核模塊
依據/etc/modules.conf文件或/etc/modules.d目錄下的文件來裝載內核模塊
第八步,執行運行級別目錄下rcX.d下的腳本
執行/etc/rc.d/rc和/etc/rc.d/rcX.d目錄下的腳本。 X為缺省運行級別。用來完成相應的初始化工作和啟動相應的服務。
第九步,執行/etc/rc.d/rc.local
執行用戶自定義啟動腳本。你可以把你想設置和啟動的東西放到這裏
第十步,執行/bin/login程序,等待用戶登錄
此時,系統已經進入到了等待用戶輸入username和password的時候了,你已經可以用自己的帳號登入系統了

一些因為誤操作導致系統無法啟動的恢復方法

我們已經了解到了Linux系統的啟動流程,而很多重要的啟動文件及內核都是放在/boot分區下的,所以/boot分區下的文件很大程度決定了系統能不能正常啟動。所以在這裏我就跟大家講幾個在centos6中因為誤操作導致系統無法正常啟動的恢復方法。
1.MBR扇區前446字節被破壞。

當我們使用dd if=/dev/zero of=/dev/sda命令時一不小心破壞了前446字節,當時是沒有任何影響的,但是你再次啟動機器時會發現變成了這樣
技術分享圖片
它會找不到系統又進入到裝系統界面,這時候我們需要進入到救援模式也就是光盤系統
技術分享圖片
技術分享圖片
到這裏時,系統詢問你是否需要啟用網絡,我們這裏不需要就選擇NO
技術分享圖片
這裏選擇continue
技術分享圖片
系統會臨時把根分區掛載到/mnt/sysimage
技術分享圖片
到這裏我們選擇啟用shell
技術分享圖片
進入bash下我們把原來的系統掛載到/mnt/sysimage
技術分享圖片
輸入grub-install命令來修復sda扇區
接著重啟系統就能進入系統了
但是我們使用grub-install只能對主引導程序進行修復,而446到512是分區表信息,所以我們如果破壞了512字節必須有備份才能修復,如果沒備份那呵呵
2.刪除/etc/fstab文件的修復方法

系統開機時會主動讀取/etc/fstab這個文件中的內容,根據文件裏面的配置掛載磁盤。這樣我們只需要將磁盤的掛載信息寫入這個文件中我們就不需要每次開機啟動之後手動進行掛載了。
而如果我們刪了/etc/fstab/文件後再次啟動系統就會變成這樣
技術分享圖片
同樣,我們也需要進入救援模式,和上個步驟一樣,進入shell後我們要臨時把主分區掛載到一個目錄下
技術分享圖片
我們再在/etc下創建fstab表
技術分享圖片
我們在底行模式輸入r!blkid把各分區信息調出來在進行編寫
技術分享圖片
因為我已經測試過多次所以對自己分區所掛載的目錄都了如指掌,但如果你不清楚也不要緊,也可以手動掛載分區,完成後進入目錄下查看文件,就可以知道這個分區所對應的掛載點了。
文件編寫完後,重啟系統就能進入系統了。
3.刪除/boot/目錄下的所有文件後的修復

我們知道/boot下存放的是啟動Linux的一些核心文件,如果把這些文件刪除後是肯定起不來系統的,那麽如何修復呢。
刪除後我們再次啟動機器是這個界面
技術分享圖片
我們需要明確的是要恢復什麽文件,能讓系統啟動我們需要boot下的內核文件,initd映象文件,以及grub配置文件。
首先我們先來恢復grub目錄,這個時候還是要進入救援模式
步驟和前邊都一樣,這裏我們同樣需要用grub-install命令去在boot下恢復grub目錄
技術分享圖片
之後我們來恢復內核文件,內核文件可以在我們光盤的rpm包中安裝
技術分享圖片
接著我們用mkinitrd命令去生成initrd映像文件
技術分享圖片
最後在grub目錄下寫grub的配置文件grub.conf
技術分享圖片
我們為了能讓系統啟動可以只寫這些就行了,當然我們也可以在GRUB啟動菜單中寫,但那個每次開機都需要重新寫,所以還是寫在配置文件中一勞永逸。
這樣我們的系統就能正常啟動了。
技術分享圖片
PS:我們每一次恢復大家進入系統時都會卡一段時間,那是因為系統正對我們新生成的文件進行重打標簽,所以會比較慢,如果不想讓系統打標簽,可以把/etc/selinux/config文件中的SELINUX改為disabled就可以啦
技術分享圖片

Linux 開機啟動順序及一些常見無法開機情況排錯(centos6)