centos 啓動流程及grub、initramfs修復

啓動流程、grub配置及修復、initramfs修復


目錄:

  1. centos啓動流程

  2. grup配置及修復

    2.1 grub配置

    2.2 grub命令啓動

    2.3 grub修復

  3. initramfs修復

  4. boot破壞修復



1.centos啓動流程


   在centos5和6中啓動流程如下:

(1).POST加電自檢

硬件加電自檢程序(安裝在CMOS中的BIOS程序)BIOS負責檢測硬件設備是否正常運行,如cpu、內存、硬盤、外接設備等是否正常,在生產中服務器內存較大,由多條內存組成較大內存的服務器,因此對內存的安裝順序等要嚴格的控制,不同品牌服務器要根據各自廠家的設計及要求進行安裝。

BIOS初始化硬件後會關聯硬盤分區格式, 如:新購PC機自帶Windows10(GPT分區)系統修改爲Windows7(MBR)系統時,將BOIS中boot菜單的boot mode默認格式UEFI修改爲Legacy Support。因爲不同的硬盤分區格式,需要不同的硬件啓動程序支持。

(2).MBR主引導分區

在BIOS初始化硬件後,調動INT13硬件讀取MBR信息,其中MBR在硬盤的第一個扇區,一個扇區大小爲512byte,前446byte存儲bootloader,64byte存儲硬盤分區表,2byte存儲硬盤標誌位。但446byte不足以啓動系統,因此會在MBR後面的扇區存儲1.5階段的引導啓動程序,其中1.5階段主要負責讀取boot分區(存儲內核、虛擬文件系統和grup的配置文件),真正的分區一般從第63個扇區開始進行分區。

系統引導分爲三個階段:

第1階段:在MBR分區中,主要作用加載boot loader,進入1.5階段;

第1.5階段:主要作用加載/boot分區的文件系統驅動,進入文件系統;

第2階段:主要作用通過/boot/grub/grub.conf配置文件進行加載內核等,其中在/boot/grub/*下只有grub.conf配置文件生效,其他都是第1階段和1.5階段的備份文件。

(3).Kernel、initrd/initramfs

在系統通過Boot loader引導進入boot分區後,先是通過grub.conf中的參數root (hd0,0)從第一塊磁盤中的第一個分區進行讀取數據,參數kernel/vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2讀取內核數據及真正加載根的爲,參數initrd /initramfs-2.6.32-696.el6.x86_64.img讀取初始化虛擬根系統(注意:一定要先讀取內核,然後再讀取虛根系統,因爲只有加載內核後才能),然後加載啓動過程中所定義的內核模塊,最後釋放虛根,切換爲真實的根文件系統。

(4).init

當系統切換爲真正的根後,系統從內核空間轉到用戶空間,執行第一個初始化程序/sbin/init,通過init初始化程序將用戶空間預定義的啓動級別進行執行/etc/rc.d/rc#.d/S*.sh腳本啓動相關服務。


2.grub配置及修復


    grub配置文件存儲位置爲/boot/grub/*,其中在此目錄下能夠看到關於啓動第1階段、第1.5階段、第2階段的備份文件和grub的配置文件grub.conf


  2.1 grub配置文件

    grub配置文件通過參數的配置控制默認啓動的菜單、菜單超時時間、單用戶模式登錄的密碼、菜單的背景圖片設置、引導boot的磁盤如hd0,0(第一塊磁盤的第一分區),kernel的指定、initrd的指定等相關

[root@centos6 grub]# grub-crypt                    #對密碼進行256位加密算法計算
Password:
Retype password:
$6$7KtGRwtyOq5ves0w$ujUp94VFUA0m8oeXN1/kF/mgzi5l0UPfdqox8fs0PeSIe0EfyyNJBkogOCSWI1P2XqVgTbH1hE2nJQRABJQFN0

[root@centos6 grub]# vim /boot/grub/grub.conf                                              

default=0                   #默認

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

password --encrypted $6$7KtGRwtyOq5ves0w$ujUp94VFUA0m8oeXN1/kF/mgzi5l0UPfdqox8fs0PeSIe0EfyyNJBkogOCSWI1P2XqVgTbH1hE2nJQRABJQFN0                       #經過加密後的密碼,此密碼是進入防止單用戶的密碼

hiddenmenu                                            有次密碼,普通用戶就無法進入單用戶模式破解密碼

title CentOS 6 (2.6.32-696.el6.x86_64)

    root (hd0,0)

    kernel  /vmlinuz-2.6.32-696.el6.x86_64 ro  root=UUID=/dev/sda2 rhgb quiet #rhgb是開機轉圈的動作

    initrd  /initramfs-2.6.32-696.el6.x86_64.img                              #quiet內核啓動隱藏顯示

title CentOS 6 (4.6.32-696.el6.x86_64)    

    root (hd0,0)

    kernel  /vmlinuz-2.6.32-696.el6.x86_64 ro  root=UUID=/dev/sda2 quiet

    initrd  /initramfs-2.6.32-696.el6.x86_64.img

    password root0987                            #此密碼是引導加載內核的密碼也就是系統啓動密碼


 

2.2 grub命令啓動

    在開機啓動進入菜單後,按c命令進入grub提示符,在grub命令提示符下即可輸入相關啓動命令,啓動系統只需4條指令root、kernel、initrd、boot,分別加載boot分區位置、內核位置、虛根位置,最後重新啓動虛擬機即可完成通過命令加載系統,進入系統之後再選擇編輯/boot/grub/grub.conf的文件

    第一步:輸入"root (hd" 然後按兩次 TAB 鍵出現磁盤塊,選中需啓動的磁盤,再按兩次TAB鍵出現磁盤分區編號,選中boot分區所在的磁盤分區;

    第二步:輸入"kernel /vm"然後按兩次TAB鍵出現內核,再選中要選擇啓動的正根root=/dev/sda2

    第三步:輸入"initrd /init"然後按兩次TAB鍵出現虛根系統

    第四步:輸入boot啓動系統,完成加載系統

       GUN GRUB version 0.97 (635K lower /1046400K upper memory)                      

grub>kernel /boot/vmlinuz-2.6.15-26-386 ro dev=/dev/hda3          #啓動內核參數

grub>initrd /boot/initrd.img-2.6.15-26-386                        #啓動虛根參數

grub>root (hd0,0)                                                 #啓動boot的位置

grub>boot           

                                                         (具體也可參考http://man.linuxde.net/grub)


2.3 grub修復

    grub修改有兩種方法:

    第一種方法:重構grub引導程序

    在誤刪grub的第一階段(446byte字節)、第1.5階段或第三階段的數據導致系統無法正常啓動時,通過萬能的方法重新構建新的grub引導程序,但是如若分區表64tyte刪除則無法恢復,具體恢復如下令:

#!/bin/bash                                                                           

sh-4.1# grub-install /dev/sda                #安裝grub程序到/dev/sda這塊磁盤
Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

sh-4.1#reboot

#################################重啓後指定引導配置文件進入系統####################################

         GUN GRUB version 0.97 (635K lower /1046400K upper memory)                      

grub>kernel /boot/vmlinuz-2.6.15-26-386 ro dev=/dev/hda3          #啓動內核參數

grub>initrd /boot/initrd.img-2.6.15-26-386                        #啓動虛根參數

grub>root (hd0,0)                                                 #啓動boot的位置

grub>boot           

##################################登錄系統重構配置文件##############################################

[root@centos6 grub]# vim /boot/grub/grub.conf                                              

default=0                   #默認

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu                                          

title CentOS 6 (2.6.32-696.el6.x86_64)

    root (hd0,0)

    kernel  /vmlinuz-2.6.32-696.el6.x86_64 ro  root=UUID=/dev/sda2 rhgb quiet

    initrd  /initramfs-2.6.32-696.el6.x86_64.img                             


    第二種方法:利用備份文件恢復

    利用/boot/grub/*第1階段的備份文件和第1.5的備份文件進行恢復,此種方法有效率相對較高無需進入救援模式

GUN GRUB version 0.97 (635K lower /1046400K upper memory) 

grub>setup (hd0)                                                #利用備份文件恢復             

grub>kernel /boot/vmlinuz-2.6.15-26-386 ro dev=/dev/hda3          #啓動內核參數

grub>initrd /boot/initrd.img-2.6.15-26-386                        #啓動虛根參數

grub>root (hd0,0)                                                 #啓動boot的位置

grub>boot           


3.initramfs修復


    initramfs虛根系統是安裝系統時,系統利用自身的命令生成相關的文件系統,如若此文件系統可以利用mkinitrd

##################################生成虛擬文件系統##################################################

[root@centos6 bak]#mkinitrd /boot/initramfs-$(name -r).img $(name -r)                          


   











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章