1. 程式人生 > >CentOS6 啟動流程圖文解剖 + 引導檔案損壞處理方法

CentOS6 啟動流程圖文解剖 + 引導檔案損壞處理方法

轉載此文章是確實幫助到我,也希望能幫助到其它人;

解決 VFS:Unable to mount root fs on Unknown-block(0,0) 的問題,有可能是核心升級過程中引導檔案損壞造成,如有老核心,可進入系統重新重成新核心的引導檔案放到/boot/ 下即可。:) 重新生成引導檔案方法參見下文“四、GRUB(GRand Unified Bootloader)、載入核心” -> “如何製作 initramfs”

我們在使用Linux作業系統的時候,我們只需按下電源鍵,等待,然後輸入賬戶和密碼就可以使用Linux作業系統了。那麼在按下電源到輸入賬號和密碼之前,作業系統都做了些什麼?下面就來講述在這段時間發生的動作。

下面以CentOS6系列為例來講解Linux的啟動流程。

一、Linux啟動流程詳解

下圖就是啟動流程的大致過程:

wKiom1PQxc6SML8nAAFcDmK4XC0648.jpg

二、POST加電自檢

POST(PowerOnSelfTest)首先對每一個裝置進行檢查。完成後會尋找存有引導記錄的裝置,找到後讀入作業系統引導記錄,然後將系統控制權交給引導記錄,並由引導記錄來完成系統的順利啟動。

三、MBR引導

MBR(Master Boot Record) MBR記錄一般是在磁碟 0 磁軌 1 扇區,共512個位元組。前446個位元組是BootLoder,後 4*16 的 64 個位元組是存放分割槽資訊的,最後 2 個位元組是校驗資訊,一般是 55AA。

四、GRUB(GRand Unified Bootloader)、載入核心

就是MBR中的前 446 個位元組,是BooTLoader的一種,它的作用是要選擇要啟動的核心。

1、GRUB程式的組成:

wKioL1PQ4efw0SE_AAJbTpZuDV4737.jpg

主要是由device.map,menulst,stage1,stage2,以及一系列的stage1_5組成。對於這些部分我的理解是這樣:

  • device.map:存放的是核心檔案的根分割槽
  • menu.lis:是grub.conf的連結檔案,但是這個名字我覺得更與它的功能接近,就是選單列表。裡賣弄設定了可以選擇的核心選單。存放於stage2中。
  • stage:用於grub載入程式過大,所以分2段引導,第一段存放在MBR中,第二段存放於核心檔案系統中,第一段引導完成後可以找到第二段。 但是,第二段是存放於核心檔案系統中的,此時還沒有格式化檔案系統,如何可以訪問到第二段的 menu.lst 呢??就需要藉助於中間層 stage1_5,有它來協助 stage1 段來訪問 stage2 段。stage1_5通常位於 stage1 欄位後的 63 個扇區。 由於stage2 在記憶體中存放可以使用的檔案系統不確定,所以這就是有多個 stage1_5 的原因了。

2、grub.conf 檔案引數意義

  1. default=1    # 預設啟動的核心title, 0 表示是第一個  
  2. timeout=5    # 預設等待時間  
  3. splashimage=(hd0,0)/grub/splash.xpm.gz    # 指定選單的背景圖片的路徑。為xpm格式,採用gzip壓縮,只能為14bits色  
  4. hiddenmenu    # 隱藏選單  
  5. title CentOS (2.6.32-358.el6.x86_64)    # 標題名,使用者可自定義  
  6.     root (hd0,0)    # 指定 grub 的根位置  
  7.     # 指定 kernel 檔案的位置,還要指出 root(系統啟動後) 的位置,掛載方式 ro,這項很關鍵。  
  8.     # 載入後會啟動 init 程序。  
  9.     kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/vg0-root rd_NO_LUKS rd_NO_DM LANG=en_US.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=autord_LVM_LV=vg0/root  KEYBOARDTYPE=pcKEYTABLE=us rhgb crashkernel=auto quiet rhgb quiet  
  10.     # 在核心啟動過程中裝載根檔案系統時有用  
  11.     initrd /initramfs-2.6.32-358.el6.x86_64.img 
initramfs-2.6.32-358.el6.x86_64.img 的本質是????
  1. # initramfs 是以 gzip 壓縮的 cpio 格式的檔案。核心啟動時將他作為一個臨時的根檔案系統。  
  2. # grub 的 stage2 將initrd載入到記憶體裡,讓後將其中的內容釋放到內容中,  
  3. # 核心便去執行init指令碼,這時核心將控制權交給了init檔案處理。  
  4. # init 它也主要是載入各種儲存介質相關的裝置驅動程式。當所需的驅動程式載入完後,  
  5. # 會建立一個根裝置,然後將根檔案系統rootfs以只讀的方式掛載。  
  6. # 這一步結束後,釋放未使用的記憶體,轉換到真正的根檔案系統上面去,同時執行/sbin/init程式,  
  7. # 執行系統的1號程序。此後系統的控制權就全權交給/sbin/init程序了。 

wKioL1PQ7u_RXEQAAAHfgGw63dE269.jpg

如何製作 initramfs 呢?

  1. # 可以使用 dircut 命令,用法如下:  
  2. # 只有在 initramfs 檔案損毀的時候會使用到  
  3. [[email protected] ~]# dracut /mnt/initramfs-`uname -r`.img `uname -r`  
  4. [[email protected] ~]# du -sh /mnt/initramfs-2.6.32-358.el6.x86_64.img   
  5. 16M /mnt/initramfs-2.6.32-358.el6.x86_64.img  
  6. [[email protected] ~]# du -sh /boot/initramfs-2.6.32-358.el6.x86_64.img   
  7. 16M /boot/initramfs-2.6.32-358.el6.x86_64.img  
  8. # 詳細介紹,可使用這個連結:https://zh.opensuse.org/index.php?title=SDB:Dracut&variant=zh-cn#.E5.90.AF.E7.94.A8_dracut_.E7.94.9F.E6.88.90.E7.9A.84_initramfs 

3、grub的功能

1)提供選單,並提供互動式介面

e: 進入編輯模式

wKiom1PQ8uLRTFq2AAFFyUCSOSo430.jpg

2)選擇要啟動的核心或系統

允許傳遞引導引數給核心

選擇介面可隱藏

  1. # 可以自啟動是通過 grub 像核心傳遞引數。  
  2. # 應用之一是:修改 root 密碼(忘記密碼),使用 e 選項,傳遞單使用者指令。 

3)為編輯功能提供保護機制

啟用核心檔案

選擇執行指定的核心得先輸入密碼

傳遞引數

使用e命令得先輸入密碼

  1. [[email protected] root]# grub-md5-crypt   
  2. Password:   
  3. Retype password:   
  4. $1$Mp7Rp1$l2wzOILNUqpUhAR7zXvQb0  
  5. # 上面是生成的加密字串  
  6. # 然後將資訊加入到 grub.conf 檔案中,格式如下:  
  7. password --md5 $1$Mp7Rp1$l2wzOILNUqpUhAR7zXvQb0  
  8. # 當然加入 grub.conf 檔案的位置不同,加密效果也不一樣。  
  9. # 加入到 title 之前的話,會加密整個選單。  
  10. # 加入到 title 指內的話,會加密對應的作業系統的入口。 

4、安裝grub的方式

1)使用grub-install命令

  1. # grub-install [--root-directory=/path/to/somewhere] DEVICE 

2)grub互動是命令

wKiom1PQ_HiCHYTqAALwLfHE0OI236.jpg

在這裡我們自制一個精簡grub,當然啟動的時候只啟動一個bash就可以。示例是在 VMware 虛擬機器下完成的。

第一步:準備好塊新磁碟,分 2 個區出來

wKiom1PRAY_CbjOxAAFQGeXx0nE979.jpg

第二步:模擬啟動時的boot目錄,和根目錄,並掛載。如下

  1. [[email protected] ~]# df -H | tail -n 2  
  2. /dev/sdd1              518M    11M   481M   3% /mnt/boot  
  3. /dev/sdd2              2.2G    71M   2.0G   4% /mnt/sysroot 

第三步:製作 grub,並生成 grub 的配置檔案

製作grub

wKiom1PRA4njlzRSAANnZuPPwug409.jpg

拷貝核心檔案和 initramfs 檔案到 /mnt/boot 目錄下,並生成 grub.conf 檔案

  1. [[email protected] ~]# cp /boot/vmlinuz-2.6.32-358.el6.x86_64 /mnt/boot/vmlinuz  
  2. [[email protected] ~]# cp /boot/initramfs-2.6.32-358.el6.x86_64.img /mnt/boot/initramfs.img  
  3. [[email protected] ~]# ll /mnt/boot/  
  4. total 20106  
  5. drwxr-xr-x 2 root root     1024 Jul 24 20:58 grub  
  6. -rw-r--r-- 1 root root 16542269 Jul 24 21:06 initramfs.img  
  7. -rwxr-xr-x 1 root root  4043888 Jul 24 21:05 vmlinuz  
  8. # 生成的 grub.conf 檔案  
  9. [[email protected] ~]# cat /mnt/boot/grub/grub.conf  
  10. default=0
  11. timeout=10
  12. title Mini Linux  
  13.     root (hd0,0)   
  14.     kernel /vmlinuz ro root=/dev/sda2 selinux=0init=/bin/bash  
  15.     initrd /initramfs.img 

第四步: 生成根檔案系統

wKiom1PRBtWiGC9QAAJM8RoL0uA295.jpg

第五步:拷貝使用命令和庫到對應根目錄下

wKioL1PRDKij5REwAAM4ghH8fUw006.jpg

將剛才的磁碟映象作為另一個虛擬機器的啟動盤。

wKioL1PRD2KC4J8-AAFGpnnDVLM992.jpg

wKioL1PRD3LSg0DtAALqgLLfnXg176.jpg

五、啟動 init 程序

init 程序是系統啟動的第一個程序。其他程序都是有此程序控制fork出來的,也就是說,init是其他程序的“祖先”,PID=1。當然,PID=0程序我們稱為空閒程序是屬於核心的。

init啟動後所做的事情:

1、讀取/etc/inittab來讀取預設級別 假設:讀取到的預設級別是 3

/etc/init/*.conf

  1. # 啟動級別:(runlevel)  
  2. # 0:關機  
  3. # 1:單使用者模式  
  4. # 2:多使用者模式,不支援 NFS 功能  
  5. # 3:完全多使用者模式,支援文字介面  
  6. # 4:預留模式  
  7. # 5:完全多使用者模式,支援圖形模式  
  8. # 6:關機  
  9. # /etc/inittab檔案格式如下,這是遵循了CentOS5的風格。  
  10. id:3:initdefault: 

2、執行初始化系統指令碼 /etc/rc.d/rc.sysinit 來初始化指令碼

這個大家有機會可以讀讀,指令碼主要的作用如下:

  1. # 獲取網路環境與主機型別。首先會讀取網路環境設定檔案"/etc/sysconfig/network",獲取主機名稱與預設閘道器等網路環境。  
  2. # 答應文字歡迎資訊。  
  3. # 掛載/etc/fstab檔案中定義的其它檔案系統。  
  4. # 啟用swap  
  5. # 檢測根檔案系統,並以讀寫方式重新掛載  
  6. # 決定是否啟動SELinux和udev。  
  7. # 介面裝置的檢測與即插即用(pnp)引數的測試。  
  8. # 使用者自定義模組的載入。使用者可以再"/etc/sysconfig/modules/*.modules"加入自定義的模組,此時會載入到系統中。  
  9. # 載入核心的相關設定。按"/etc/sysctl.conf"這個檔案的設定值配置功能。  
  10. # 設定系統時間(clock)。  
  11. # 設定終端的控制檯的字形。  
  12. # 設定raid及LVM等硬碟功能。  
  13. # 以方式檢視檢驗磁碟檔案系統。  
  14. # 進行磁碟配額quota的轉換。  
  15. # 重新以讀取模式載入系統磁碟。  
  16. # 啟動quota功能。  
  17. # 啟動系統隨機數裝置(產生隨機數功能)。  
  18. # 清楚啟動過程中的臨時檔案。  
  19. # 將啟動資訊載入到"/var/log/dmesg"檔案中。 

3、然後執行 /etc/rc.d/rc 指令碼

此指令碼執行的時候此指令碼的時候,會讀取/etc/rc.d/rc3.d/下的所有指令碼,來控制系統啟動的時候啟動或者關閉那些服務

wKiom1PSA-mDbCDSAAZ9kiqbBP4645.jpg

  1. # 這裡面的指令碼大致分為 2 類,以 S 開頭的和以 K 開頭的指令碼。  
  2. # S 代表開機時啟動的,K 表示開機時不啟動。  
  3. # 每個檔案的命名格式,例如:S01sysstat S 開機啟動 01 啟動次序 sysstat 啟動指令碼名  
  4. # 啟動的定義是在每個指令碼中定義的:例如  
  5. # # chkconfig: - 85 15  
  6. # 預設級別 啟動次序 不啟動次序 

這些指令碼是否開機自啟動,可由 chkconfig 命令來管理。

  1. # 常用選項:  
  2. # chkconfig --add SRV_SCRIPT 可以將自己寫的一些指令碼,讓此命令統一管理。例如:chkconfig --add httpd  
  3. # chkconfig --del SRV_SCRIPT 將服務刪除,意思就是服務不由chkconfig這種機制來管理  
  4. # chkconfig SRV_SCRIPT {on|off} 設定服務開機是否自啟動,預設管理的級別是2345.  
  5. # --level 2345 等,指定預設級別,可以與其他選項一起使用 

4、執行/etc/rc.d/rc.local指令碼,此指令碼是啟動過程中最後啟動的一個指令碼。

最後會執行 /bin/login 登入使用者。至此係統啟動過程完成。

相關推薦

CentOS6 啟動流程圖文解剖 + 引導檔案損壞處理方法

轉載此文章是確實幫助到我,也希望能幫助到其它人; 解決 VFS:Unable to mount root fs on Unknown-block(0,0) 的問題,有可能是核心升級過程中引導檔案損壞造成,如有老核心,可進入系統重新重成新核心的引導檔案放到/boot/ 下即可

CentOS6啟動流程

load 模塊 rc.d test disk fstab文件 rip tab 開始 CentOS6啟動流程 1.加載BIOS的硬件信息,獲取第一個啟動設備 在通電之後,CentOS6會進行加電自檢(Power On Self Test),這個過程主要是由BIOS完成的。

CentOS6啟動流程呢個以及刪除boot分區相關實驗

同步數據 app 超級 config c# status sim 重啟 b- centos6啟動流程 主動讀取BIOS,通過CMOS加載硬件信息 ,並進行POST,指定第一個可啟動的設備 ROM:BIOS,Basic Input and Output System,保

centos6啟動流程詳解

linux centos6 當我們在平常的工作學習的環境中使用linux時,我們只需要按一下開機鍵,系統就會自動為我們加載好相關配置,然後為我們打開操作界面,那麽在這個過程中究竟都發生了什麽,如果系統突然起不來了,那麽到底是啟動時的哪一部分發生了錯誤呢,下面,我們就來看看linux中的centos6啟動的

Activity啟動流程,介面繪製到事件處理的整個流程(基於Android6.0原始碼)(2)

void setLayoutParams(WindowManager.LayoutParams attrs, boolean newView) { synchronized (this) { ...... mWindowAttributes

VMware虛擬機器檔案損壞修復方法

http://www.bsdown.com/html/201010/1506.html 時間: 2010-10-09來源: 網際網路 作者: tonxi 點選: 10次 一、說明一下起因:今天在XP虛擬機器中一衝動下載一個5點多GB的PT檔案,忘記此虛擬檔案(vmdk檔案)

Oracle - 各類檔案損壞處理辦法(附實驗步驟)

一、概述 本文將給大家介紹oracle各類檔案損壞的現象和應對策略,請注意所有的恢復都是基於有備份的情況,所以請開啟資料庫的日常備份。文章將從以下檔案展開 a. 密碼檔案 b. 引數檔案 c. 控制檔案 d. 資料檔案(分普通表空間資料檔案,其它表空間資料檔案如system、sysaux、undo) e. 日

Ubuntu14.04在系統啟動logo過後無法進入桌面的處理方法

Dongdong Bai 2013年9月至今在國防科技大學計算機學院攻讀博士學位,師從天河一號超級計算機總設計師楊學軍院士。我目前研究方向是將深度學習技術融入到機器人和自動駕駛汽車中。研究興趣主要包括CNN、計算機視覺、SLAM和機器學習等。我目前在騰訊 AI Lab 作基礎研究

properties檔案加密處理方法

1.在application.xml檔案中載入config.properties檔案方式(會將config.properties的配置載入進來)<bean class="com.paic.utils.EncryptPropertyConfigurer這個工具類">

Spring 關於MyEclipse下建立Maven專案找不到application.xml檔案處理方法

博主之前沒有用maven建立專案的時候,application.xml檔案是放在src資料夾下的,web.xml配置檔案也找得到。後來因為專案問題,又重新用maven新建了專案,檔案的位置什麼的都沒變,但web.xml這個檔案就是找不到application.xml配置檔案。

iOS-svn工具Cornerstone上傳忽略.a檔案處理方法

工程檔案上傳到svn中,.a檔案會自動遮蔽(應該叫遮蔽,反正就是上傳不上去) 用Cornerstone工具,解決這個問題 1.開啟Cornerstone左上角,點Cornerstone->Preferences->Subversion 2.Global lgno

centos6,7的啟動流程

centosCentOS 6 系統啟動流程: POST --> BootSequence(BIOS) --> Bootloader --> kernel [-->ramfs] -->rootfs(ro) --> /sbin/init --> 設定默認運行級別 --&g

centos6之前版本的啟動流程

核心模塊 系統 處理 優先級 ble kernel tty nlog 訪問 centos6 之前的系統啟動: linux啟動流程: 1)加電自檢 2)讀取MBR,引導加載程序grub,完成grub的三個階段。 3)加載系統內核kernel,執

系統檔案損壞無法正常啟動--記一次蕩氣迴腸的自己挖坑自己跳然後爬出來的開心事

安裝某virtual無法written,某博主指引替換system32下的uxtheme.dll重啟即可。照做後重啟…桌面沒了,只能看見堅強的某鳥桌布。無奈,重啟,採用最近一次的正確配置等…無果;求助各路大牛:“系統檔案都敢替換,hhhh……”,無語,問度娘:如果安全模式跟恢復正確配置都不行就重灌系統吧…心中

類system32\drivers\**mom.sys檔案損壞導致宕機無法啟動Windows解決方法

類system32\drivers\**mom.sys檔案損壞導致宕機無法啟動Windows解決方法可利用第三方工具修改原系統登錄檔的方法來修復系統,即通過WinPE進入系統。1、  在protal介面將故障虛擬機器啟動方式修改為光碟機啟動(操作>>選項>&

MySQL之——表資料檔案損壞導致資料庫無法啟動

一、問題日誌 2017-08-31 14:18:05 4122 [Note] InnoDB: Database was not shutdown normally! 2017-08-31 14:18:05 4122 [Note] InnoDB: Starting cra

ssm框架中,Java web專案的啟動流程及web.xml配置檔案

一、web.xml配置檔案 專案啟動與web.xml配置檔案密不可分,web.xml配置檔案用於初始化配置資訊,包括welcome、context-param、listener、filter、filter-mapping、servlet、servlet-mapping、其他。如下

iOS/iPhone 程式檔案目錄結構以及啟動流程

要想清晰的理解IOS應用程式的啟動過程,毫無疑問需要深入瞭解一下ios應用程式的檔案系統。一個ios應用程式都有一個屬於自己沙盒(sandbox),應用沙盒就是檔案系統目錄,並且與檔案系統的其他部分隔離。應用必須待在自己的沙盒裡,應用既不能訪問其他應用的沙盒,其他應用也不能

uboot、核心、根檔案系統啟動流程

  0.設定cpu為svc模式,關中斷  1. 為核心的解壓做準備(記憶體,中斷等等)  2.核心自解壓 (vmlinux.lds)  3.跳轉到入口地址執行(head.S--->main.c)start_kernel執行核心  4.硬體的初始化(初始mm  mmu  中斷(request_irq),軟

學習筆記(二)——單使用者模式、救援模式、執行級別、啟動流程、登入檔案

1.單使用者模式:   Linux 中的單使用者模式可以類比一下 Windows 中的安全模式。在單使用者模式下很常用的功能是修改 root 密碼。如何進入單使用者模式:   重啟Linux,3秒鐘內按一下回車鍵,進入新畫面。如果 grub 加密,需要先按 p 鍵, 輸入 g