GRUB

什么是GRUB

GRUB(boot loader):grub:GRand Unified Bootloader

    有兩個版本:grub 0.x:grub legacy經典版;grub 2.x

grub legacy:主要運行分三個階段

stage1(第一階段):安裝在mbr中

stage1.5(第1.5階段):存放在mbr之后的扇區中,讓stage1中的bootloader能識別stage2所在的分區上的文件系統(否則他是沒辦法加載第二階段的)

stage2(第2階段):這個就是我們開機能看到提供菜單,讓我們能夠編輯時的加載界面的那個階段,第二階段是存放在磁盤分區上的,一般都在/boot/grub/目錄下

=============================以上就是grub的組織格式=============================

    因此當我們系統啟動的時候如果要加載grub所在的磁盤時,會讀取這個磁盤上的MBR,從此能加載到stage1,stage1加載完以后會嘗試去加載stage1.5,stage1.5階段讀到以后,從而就能夠驅動stage2所在的磁盤分區;其實這個磁盤分區上不但有第二階段,還有內核文件和ramdisk等等,都在這個分區上放置著,這就是為什么grub能夠加載內核文件的原因。注意:主板bios必須能夠識別硬盤。然后bios才能去加載硬盤上的boot loader,磁盤上boot loader加載完以后就能夠直接識別當前主機能識別到的硬盤設備了,但是,硬盤設備能夠識別,并不以為著能夠識別硬盤中的文件系統,因為文件系統是額外附加的一層軟件組織的文件結構。所有要想能夠對接某種文件系統,必須要用到文件系統驅動。所謂的stage1.5階段也就是給grub提供了文件系統驅動,從而grub就能夠訪問對應的stage2和內核所在的分區了,這通常應該是一個基本磁盤分區,畢竟stage1.5不可能做的過于復雜。所以grub的第二階段,以及內核還有ramdisk文件通常都會放在一個基本磁盤分區。

    stage2及內核等通常放置于一個基本磁盤分區(就是一般的磁盤分區,不是lvm和軟raid;因為grub根本就驅動不了邏輯卷)

grub的功用:

    (1)提供菜單,并提供交互式接口

        e:編輯模式,用于編輯菜單;

        c:命令模式,交互式接口(對于grub來講他不用讀取配置文件,就能夠打開其內置的命令行提示符,在我們鍵入的命令的支持下,完成某些操作)

    (2)加載用戶選擇的內核或操作系統

        加載內核的同時允許用戶通過編輯菜單傳遞參數給內核,還可隱藏此菜單

    (3)為菜單提供了保護機制

        為編輯菜單進行認證

        為啟用內核或操作系統進行認證

grub如何去識別設備:

    (hd#,#)

        hd#:磁盤編號,用數字表示

        #:分區編號用數字表示;從0開始編號

grub的命令行接口

    help:獲取幫助列表

    helo KEYWORD:獲取詳細幫助信息

    find (hd#,#)/PATH/TO/SOMEFILE:

    root (hd#,#):表示把哪一個磁盤分區識別為根設備

    kernel /PATH/TO/KERNEL_FILE;設定本次啟動時用到的內核文件;額外還可以添加許多內核支持使用的命令行參數

    例如:

        init=/path/to/init :表示我使用這個文件做init程序都可以

        selinux=0:表示禁用內核中的selinux功能

        initrd /PATH/TO/INITRAMFS_FILE:設定為選定的內核提供額外文件的ramdisk

    boot:引導啟動選定的內核

如何手動在grub命令行接口啟動系統

    grub> root (hd#,#)

    grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE

    grub> initrd /initramfs-VERSION-RELEASE.img

    grub> boot

grub也有配置文件/boot/grub.conf通常有個符號連接文件在/etc/grub.conf(/boot/grub/grub.conf <– /etc/grub.conf)

配置文件:/boot/grub/grub.conf

    配置項:

    default=#:設定默認啟動的菜單項:菜單項(title)編號從0開始;

    timeout=#:指定菜單項等待用戶選擇的時長;

    splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑;

    hiddenmenu:隱藏菜單;

    password [–md5] STRING:設定認證方式:菜單編輯認證

    title TITLE:定義菜單項“標題”,可出現多次;用來引導不同的內核或操作系統

    root (hd#,#):grub查找stage2及kernel文件所在的設備分區;為grubd的“根”;

    kernel /PATH/TO/VMLINUZ_FOLE [PARAMETERS]:啟動的內核

    initrd /PATH/TO/INITRAMFS_FILE:內核匹配的ramfs文件 

    password [–md5] STRING:啟動選定的內核或操作系統時進行認證;

blob.png

grub的保護機制;

    在配置文件中的主配置行加上password [–md5] STRING:設定認證方式:菜單編輯認證

    在配置文件中的菜單配置行加上password [–md5] STRING::啟動選定的內核或操作系統時進行認證;

    加密密碼串的命令

    openssl可以生成密碼串

    grub-md5-crypt命令

如何進入單用戶模式:

    (1)編輯grub菜單(選定要編輯的title,而后使用e命令:先選定tatle(菜單)再敲e鍵);

    (2)在選定的kernel后按鍵

        1,s,S或single都可以;

    (3) 在kernel所在行,鍵入“b”命令:

如何安裝grub;兩種方法

    (1)grub-install

        grub-install –root-directory=ROOT(boot目錄的父目錄) /dev/DISK

        注意:此種方法不要求當前指定的根下有boot目錄

    (2)grub

        grub> root (hd#,#)

        grub> setup (hd#)

        注意:此種方法要求指定的root設備上必須事先存在有一個grub目錄以及grub目錄里的各種stage1,1.5,2文件都得存在才行。



實驗啟動流程排錯

為GRUB菜單項和內核加上啟動密碼

在grub.conf配置文件中每個菜單項和內核項加上加密項(密文加密)

]# grub-md5-crypt 使用此命令生成密文,然后將密文添加進配置文件中相對應的菜單和內核,添加完以后下次重啟必須輸入密碼才能進入。

blob.png

blob.png


使用菜單項編輯模式修復配置文件kernel配置項

先在配置文件中對kernel文件進行破壞

blob.png

在菜單項選定內核然后敲e鍵進入編輯模式,可看到kernel一欄為空

blob.png

選定kernel欄敲擊e鍵鍵入以下內容保存敲擊b鍵啟動(/vmlinuz-2.6*表示內核核心文件,root=/dev/sda2表示操作系統的根,而且只是臨時生效)

blob.png

啟動后在需要在配置文件中恢復配置。

blob.png


手動破壞grub.conf配置文件

刪除后啟動會直接進入grub命令行界面,這就時需要手動執行命令進行配置內容。 

blob.png

啟動之后手段編輯/boot/grub/grub.conf配置文件

blob.png


給菜單加上背景圖片

先準備一張640*480大小的圖片,并將圖片放至家目錄(這里圖片名稱問shan.jpg)。在centos下載圖片處理工具]# yum -y install ImageMagick

]# yum -y install ImageMagick
]# convert -resize 640x480 -colors 14 shan.png shan.xpm 將圖片格式轉化為xpm
]# file shan.xpm 確認圖片格式
]# more shan.xpm 確認圖片大小
]# gzip shan.xpm 壓縮圖片
]# cp shan.xpm.gz /boot/grub/ 拷貝圖片至grub目錄
]# vim /boot/grub/grub.conf 編輯grub配置文件添加圖片路徑,然后重啟

確認圖片格式大小

blob.png

在配置文件中添加背景圖片路徑

blob.png

重啟成功

blob.png


手動破壞grub第一階段

]# dd if=/dev/zero of=/dev/sda bs=1 count=446 grub第一階段是安裝在mbr中的,所有破壞mbr的前446個字節即可,然后重啟進入救援模式;
注意:不要破壞分區表,grub修復不了分區表

進入救援模式之后先切根,因為grub這個工具并不在救援模式中存放,進入模式后系統會把根掛載至/mnt/sysimage,要重建grub第一階段必須擁有grub這個工具才行,切根就是為了如此。

注意:如果/etc/fstab文件損壞的話。救援模式就不會自動把根掛載至/mnt/sysimage目錄下。

blob.png 切根

blob.png安裝grub 指明安裝位置為/dev/sda,mbr是在磁盤的0磁道1扇區的,grub第一階段就是在mbr中。與分區無關

blob.png重啟,注意:重啟時系統會進行修復動作,略耗時間


手動破壞grub第1.5階段,使用grub命令進行修復

]# dd if=/dev/zero of=/dev/sda bs=512 count=2 seek=1  注意:不要破壞分區表,grub修復不了分區表

blob.png

破壞以后重啟系統會直接黑屏,因此需要再次進入救援模式,就如救援模式以后指明grub命令進入grub命令行;

blob.png

在grub命令行執行root (hd0,0)和setup(hd0)命令

blob.png

然后退出grub

blob.png

重啟

blob.png

注:重啟過程系統會執行修復動作,略耗時間。而且使用進入救援模式以后直接切根執行grub-install /dev/sda命令也可修復,

修復第二階段的前提是1和1.5階段沒有損壞,而且grub命令行的修復是基于/boot/grub/目錄下的各個文件的,如果沒有這些文件將無法修復。但是grub-install不依賴與那些個文件。


破壞整個grub目錄,用grub-install進行修復

]# rm -rf /boot/grub 刪除grub目錄
chroot /mnt/sysimage 進入救援模式切根
grub-install /dev/sda 救援模式下安裝grub到/dev/sda (/dev/sda相當于 --root-dircetory=/)
vim /boot/grub/grub.comf 編輯grub配置文件

blob.png

退出救援模式重啟



手動刪除整個/boot目錄,利用救援模式修復

]# rm -rf /boot/ 刪除整個boot目錄,命令執行完畢后會有一個報錯,不予理會,實際boot下的所有文件都已經刪除干凈

光盤啟動進入救援模式

chroot /mnt/sysimage 切根
mkdir /mnt/cdrom 創建掛載點
mount /dev/cdrom /mnt/cdrom/ 將光盤掛載至掛載點
rpm -ivh /mnt/cdrom/kernel-2*.rpm --replacepkgs|force 安裝內核

blob.png

grub-install /dev/sda 安裝grub

blob.png

vim /boot/grub/grub.conf 編輯grub配置文件

blob.png

退出救援模式重啟


手動破壞/boot/vmlinuz核心文件和/boot/initramfs偽根文件,利用開啟網絡服務的救援模式進行修復

]# rm -rf /boot/initramfs-2.6.32-642.el6.x86_64.img vmlinuz-2.6.32-642.el6.x86_64 破壞

在救援模式選擇開啟網絡

blob.png

選擇網絡設備

blob.png

配置網絡地址,如有dhcp服務可選dhcp,如沒有就需要自己配置,這里選擇dhcp

blob.png

等待獲取ip地址

blob.png

獲取成功Continue繼續

blob.png

兩次ok進入shell start shell

blob.png

進入以后依次執行如下命令

chroot /mnt/sysimage/ 切根
scp 10.1.252.189:/boot/vmlinuz* /boot/ 從網絡主機拷貝核心文件 需要知道目標主機ip地址和登錄密碼,而且要拷貝的核心文件必須與當前
主機版本號相同
scp 10.1.249.189:/boot/initramfs* /boot/ 從網絡主機拷貝偽根文件 需要知道目標主機ip地址和登錄密碼,同樣版本號需要相同
vim /boot/grub/grub.conf 檢查配置文件中核心文件與偽根文件版本號是否和復制的版本號相同,如相同則重啟,不同則修改后重啟

手動破壞/boot/目錄和/etc/fstab文件,利用救援模式修復

]# rm -rf /boot/ /etc/fstab 破壞

光盤進入救援模式,因為刪除了/etc/fstab所以體系無法自動根據/etc/fstab進行掛載(若/etc/fstab存在我們可以使用chroot /mnt/sysimage,現在無法使用此命令),會出現下列提示;表示找不到系統分區情況,這是因為沒有/etc/fstab文件,所以找不到掛載關系了,這個時候的修復工作就麻煩一些。

blob.png

fdisk -l 先查看分區情況

blob.png得知/dev/sda1為boot引導分區,但是不知道哪個是根

mkdir /mnt/sda1
mkdir /mnt/sda2
mkdir /mnt/sda3 分別創建各分區的掛載點
mount /dev/sda1 /mnt/dev/sda1
mount /dev/sda2 /mnt/dev/sda2
mount /dev/sda3 /mnt/dev/sda3 依次掛載并查看內容

blob.png 可看到根文件系統在sda2中

vi /mnt/sda2/etc/fstab 編輯自動掛載配置文件 也可以echo 進去

blob.png

保存退出,在救援模式重啟,重新進入救援模式,讓系統自動掛載/mnt/sysimage

blob.png重啟

如果掛載成功就執行如下命令:如果掛載失敗有可能是邏輯卷問題,邏輯卷問題后續解決

chroot /mnt/sysimage/
mount /dev/cdrom /mnt/
rpm -ivh /mnt/Packages/kernel-* --foace 安裝內核
grub-install /dev/sda 安裝grub

blob.png

vim /boot/grub/grub.conf 編輯grub配置文件
default=0
timeout=3
title ali
root (hd0,0)
    kernel /vmlinux* root=/dev/sda2
    initrd /initramfs*

blob.png

最后重啟;恢復完成


邏輯卷情況下,刪除/boot 和/etc/fstab,救援模式恢復

rm -rf /boot/ /etc/fstab dd if=/dev/zero of=/dev/sda bs=446 count=1 破壞

重啟進入救援模式,出現掛載/mnt/sysimage失敗

blob.png

執行lvscan 掃描可看到邏輯卷是無效的

blob.png

執行vgchange -ay 激活邏輯卷

blob.png

激活后再lvscan可看到邏輯卷生效

blob.png

將/dev/vh0/root 掛載至 /mnt/sysimage

blob.png

編輯自動掛載配置文件/etc/fstab

blob.png

退出重啟

blob.png

再次光盤進入救援模式,讓系統自動掛載/mnt/sysimage,掛載成功雙ok選定shell

blob.png

blob.png

然后以次執行如下命令

chroot /mnt/sysimage
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
rpm -ivh /mnt/cdrom/kernel-* --force  安裝內核

blob.png

grub-install /dev/sda 安裝grub
vim /boot/grub/grub.conf 編輯配置文件

blob.png

最后退出救援模式重啟系統 恢復成功



原創文章,作者:M20-1馬星,如若轉載,請注明出處:http://www.www58058.com/45884

(0)
M20-1馬星M20-1馬星
上一篇 2016-09-21
下一篇 2016-09-21

相關推薦

  • LAMP運行環境搭建及部署php程序軟件

    前言     Linux+Apache+MySQL+PHP是大多數web服務器的運行環境,能熟練配置此運行環境是每個運維的必備基本技能,本文以安裝MySQL管理工具PHPmyadmin以及博客軟件wordpress為例,演示編譯安裝LAMP運行環境的過程。 一、實驗拓撲圖 二、安裝步驟 2.1 編譯安裝Apache h…

    2015-11-26
  • Linux系統文件管理

    1、Linux的文件類型:       –:普通文件;       d:目錄文件;       b:塊設備:     &nbsp…

    Linux干貨 2016-08-04
  • Linux基礎之—用戶和組管理

    導言:   我們在使用計算機資源時為了資源的合理規劃和利用,同時為了實現更好的管理,需要在計算機里有一個使用資源的憑證,這個憑證就是用戶,下面就來介紹Linux用戶和組管理。 1.資源分派:     資源的分派可以分為三個步驟,分別是    (1)認證(Authertication)   &nbsp…

    Linux干貨 2016-08-04
  • 第六周作業

    1、簡述osi七層模型和TCP/IP五層模型 應用層 運行著應用程序的協議http、ftp、tftp等 表示層 將應用層所編輯的數據進行加密或解密,沒有協議 會話層 決定一次數據傳輸發起和接收會話請求,沒有協議 傳輸層 根據選著的協議類型,決定是否將數據分割或重組,協議:tcp、udp等 網絡層 編輯邏輯地址信息(原站點、目的站點)和路由選著(ARP)協議:…

    2018-02-06
  • N25 第一周作業 2016/12/5

       1.描述計算機的組成及其功能         計算機組成由:CPU 內存 IO設備           功能:                cpu就是中…

    Linux干貨 2016-12-05
  • grep常見應用實例

      在我們實際應用中,正則表達式的應用是非常廣泛的,今天我就大家分享幾個比較常見的正則表達式的應用實例,不周之處,還望高人多多指點!   一:使用正則表達式搜索郵箱地址 二:使用正則表達式搜索手機號 三:使用正則表達式搜索身份證號 四:使用正則表達式取網絡配置文件中的IP地址的過程解析   一:使用正則表達式搜索郵箱地址: [r…

    系統運維 2016-08-08

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-23 10:03

    文章對CentOS開機啟動中grub啟動程序解析的很透徹,同時給出的示例也很實用,贊一個。

欧美性久久久久