linux系統啓動流程及 MBR損壞,grub內容,文件誤刪,boot目錄,分區誤刪修復

轉自http://tanxin.blog.51cto.com/6114226/1167151 

操作環境:linux Redhat 5.8

一.首先簡單看一下系統啓動的流程圖,然後再作詳細的解釋

二.
1,BIOS自檢,檢測硬件,決定啓動介質
  BIOS爲寫入到主板上的一塊閃存或EEPROM的程序,它可以在開機的時候執行,並通過BIOS程序去加載CMOS的信息,並通過CMOS內的設置取得主機的各項硬件配置(CMOS:CMOS的主要功能就是記錄主板上面的重要參數,包括系統時間,CPU電壓與頻率,各項設備的I/O地址與IRQ等),BIOS程序也可以修改CMOS當中的參數,用BIOS設定程序的按鍵都不同,一般常見的使用Del按鍵進入BIOS設置界面
2,從硬盤啓動,讀硬盤的第一個扇區MBR,然後將啓動引導工作交給boot loader
  MBR引導記錄位於物理硬盤的第一塊扇區的一段引導代碼(第一塊扇區512個字節,其中MBR佔446字節,分區表佔64字節,結束標誌佔2字節),該扇區又稱爲主引導扇區(MBR扇區)
 
3,boot loader去找 grub,grub讀取配置文件grub.conf,決定默認啓動項,找到內核(kernel)和驅動(initrd)
   @1. Boot loader:它的主要功能是認識操作系統的文件格式並加載內核到內存中去執行,由於不同的操作系統的文件格式不一致,因此每種操作系統都有自己的bootloader,bootloader分爲兩個階:                                           
           1、stage1: 執行boot loader加載文件系統驅動     
           2、stage2:加載真正的配置文件: grub.conf  
 
   @2.  grub.conf裏面有內核和驅動的信息,下面會對grub.conf文件做具體的介紹
4,內核會主動調用init進程,讀取配置文件 /etc/inittab,決定啓動級別, 運行初始化腳本/etc/rc.d/rc.sysinit,運行相應的啓動級別下的腳本 /etc/rc.d/rcN.d/
  @1.  vim /etc/inittab
id:5:initdefault:             //默認的runlevel設置,此處爲5            
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit     //準備系統軟件執行的環境的腳本執行文件
l0:0:wait:/etc/rc.d/rc 0         //0 - 關機(千萬不要把initdefault 設置爲0 )
l1:1:wait:/etc/rc.d/rc 1        //1 - 單用戶模式
l2:2:wait:/etc/rc.d/rc 2        //2 - 多用戶,但是沒有 NFS服務
l3:3:wait:/etc/rc.d/rc 3        //3 - 完全多用戶模式
l4:4:wait:/etc/rc.d/rc 4        //4 - 沒有用到(系統保留功能)
l5:5:wait:/etc/rc.d/rc 5       //5 - X11(與 3類似,但是加載使用X    Window)
l6:6:wait:/etc/rc.d/rc 6       //6 - 重新啓動 (千萬不要把initdefault 設置爲6 )

ca::ctrlaltdel:/sbin/shutdown -t3 -r now     //是否允許按【ctrl】【alt】【del】就重新啓動的選項
 
#不斷電系統的pf,pr兩種機制,一個是沒電時的關機,一個是覆電的處理
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
 
#tty1~tty6是由這六行決定的
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
#啓動X window是由這裏決定的
x:5:respawn:/etc/X11/prefdm -nodaemon
 
   @2./etc/rc.d/rc.sysinit作用:這裏簡單說幾個
 
1.取得網路環境和主機類型
2.測試與掛載內存設備/proc及USB設備 /sys
3.決定是否啓動SELinux
4.啓動系統的隨機數生成器
5.用戶自定義模塊
6.加載內核的相關設置
7.初始化軟件磁盤陣列,lvm
8.啓動相關信息加載/var/log/dmesg文件中
 
5.依據/etc/inittab 執行/etc/rc.d/rc0~6.d
    找到/etc/rc.d/rcN.d/K??*開頭的文件,並進行  /etc/rcN.d/K??* stop 的動作
    找到/etc/rc.d/rcN.d/S??* 開頭的文件,並進行  /etc/rcN.d/S??* start 的動作
    如果默認啓動是文本開啓6個文本控制檯 [ALT+F1~F6]
    如果默認啓動項是圖形則開啓圖形界面以及6個文本控制檯
    用戶自定義的開機啓動程序/etc/rc.d/rc.local 
 
6, 加載X Window界面,等待用戶輸入用戶名和密碼
   @1. 通過/etc/passwd、/etc/shadow
驗證,如果用戶名和密碼輸入正確
讀取4個初始化文件:
/etc/profile、/etc/bashrc、~/.bashrc、~/.bash_profile
文本界面直接開啓shell
圖形界面開啓桌面,進入X Window,通過開啓終端打開shell
 
  @2.系統還會自定義設備與模塊對應文件爲/etc/modprobe.conf
 
三. 介紹一下grub.conf這個文件
#vim /etc/grub.conf
default=0   # 默認的啓動項,也就是啓動那個title,從0開始計數。
timeout=5
#timout=5,就是默認在啓動選擇界面停留的時間,等待5秒自動進入默認操作系統 
splashimage=(hd0,0)/grub/splash.xpm.gz
#splashimage是grub啓動背景畫面,這個可以不要 
#hiddenmenu 是隱藏菜單隻有按上下鍵纔會出現

title Red Hat Enterprise Linux Server (2.6.18-308.el5)
#title後面就是系統在啓動時候顯示的名字 
        root (hd0,0)
#root      分指定你的內核所在的分區。hd0表示第一塊硬盤設備。  0表示第一個分區  也是/boot所在的分區
 kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet
#kernel 內核在哪裏;ro 只讀;root=LABEL=/ 根分區是誰;rhgb (圖形化顯示啓動過程) ;quiet (靜默式啓動,不顯示dmesg信息)
        initrd /initrd-2.6.18-53.el5.img
#initrd內核鏡象的名字
#rhgb:表示redhat graphics boot,就是用圖片來代替啓動過程中顯示的文本信息,這些信息在啓動後用dmesg可以看到 
#quiet:表示在啓動過程中只顯示要信息,類似硬件自檢的消息不回顯示
四. 下面是幾個故障修復的例子
@1
1.我們把title下面的三行刪掉,然後重啓系統,

2,重啓系統後,會卡在這裏,因爲修改了grub.conf這個文件,

3,這裏就需要吧grub.conf裏的那三行手動添加進去了,需要指定/boot所在的分區,linux內核,和initrd文件,然後boot啓動

4,看到紅色的Red Hat就證明你的內核加載成功了

5,啓動成功後再把/etc/grub.conf文件的那三行加回去

@2 
 1.把/boot/grub/grub.conf刪掉,會怎樣呢?
   可以把這個文件備份到其他地方,這樣啓動後可以把文件恢復回去,   運行root或find /vmlinuz-2.6.18-53el5(可以使用TAB補全),可以搜索vmlinuz所在分區

2. 內核成功被加載

3.把之前備份好的grub文件還原回去
 
@3 .  MBR損壞
# dd  if=/dev/zero of=/dev/hda bs=446 count=1     //模擬Boot loader 損壞
#reboot
1.從光盤啓動,在這之前要把鏡像掛載上

2.輸入linux rescue進入救援模式

3.選擇語言

4.選擇美式鍵盤

5.這裏我們不啓動網絡接口,選擇NO

6.這裏是系統自動幫你掛載以前的系統,選擇Continue

 

7. 真正進入救援模式的操作
#chroot /mnt/sysimage root虛擬家目錄
#grub-install /dev/hda
# reboot


@4. 把/boot/下的內容刪了再試一下


1. 同樣是同光盤啓動,進入linux rescue模式,看一下/boot下什麼都沒有了

 

2.把光盤掛上,然後安裝kernel

3.內核安裝完,還需要安裝grub

4.  安裝grub    

5.沒有grub.conf文件,手動添加進去,然後重啓

6.內核加載成功

@5.    如果boot分區刪了(前提是df可以看到/dev/hda1是boot分區記錄),也可以恢復


 

從光盤進入到救援模式後,把那個boot分區添加回去,按照上面安裝內核和grub就可以啓動系統了,添加grub.conf文件
 
注:如果重啓後出現fsck.ext3: Unable to resolve 'LABEL=boot',重新進入救援模式
解決方法:# e2label /dev/hda1 /boot   #e2label可以給分區加上label(這個地方糾結了我好長時間,本想再截張圖,可是弄了好幾次,都沒有那個錯誤出現了)
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章