Linux系統啟動過程中grub故障與修復(一)

   GRUB 是引導裝入器 -- 它負責裝入內核并引導 Linux 系統。GRUB 可以引導多種操作系統,如Linux、 DOS、 Windows 。
   GRUB共分為三個階段:stage1主要負責BIOS和GRUB之間的交接,載入存放于各個分區中的開機文件;stage1.5是連接stage1和stage2之間的通道,起著過渡的作用,負責識別stage2所在/boot分區的文件系統,以便進入stage2;stage2是grub的核心部分,在這個階段完成加載內核、加載根文件系統驅動、掛載根等工作。

1 破壞grub第1階段

這里寫圖片描述

如圖所示,用hexdump命令查看/dev/sda的mbr,即/dev/sda的前512個字節。mbr的前446個字節保存了與啟動相關的信息,即grub的第一階段。

這里寫圖片描述

使用dd命令將mbr的前446個字節清0,dd命令用指定大小的塊拷貝一個文件,并在拷貝的同時進行指定的轉換:
if=[STDIN],即輸入設備或文件
of=[STDOUT] ,即輸出設備或文件
bs指定每個塊的大小,默認以字節為單位
count指定塊的個數
skip指定跳過多少個塊之后再輸入
seek指定跳過多少個塊之后再輸出
dd if=/dev/zero of=/dev/sda bs=1 count=512表示用0設備將/dev/sda的前512個字節覆蓋,即清0。
    清0后用hexdump命令確認,如上圖,前446個字節已全部為0,清0后重啟。

這里寫圖片描述

這里寫圖片描述

由于破壞了第一階段需要用到的mbr前446個字節,所以系統認為硬盤已經不具備引導功能了,就不用硬盤啟動了,而是直接進入到光盤啟動界面。為了修復被破壞的第一階段,需要進入光盤救援模式,即Rescue installed system。

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

此步驟是在詢問是否同意將系統掛載到/mnt/sysimage,選擇continue即可

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

開啟shell,如圖所示。此時/mnt/sysimage是系統的根,進入/mnt/sysimage下就可以看到原來硬盤的根下的內容。接下來使用grub install命令進行修復。

這里寫圖片描述

直接執行grub install報錯,是因為在救援模式的/mnt/sysimage下沒有grub相關命令,需要使用chroot命令切根,切根后使用操作系統自帶的grub命令進行修復。

這里寫圖片描述

這里寫圖片描述

grub install /dev/sda 開始進行修復,修復過程中可能會報錯:Unknown parttition table signature 未知的分區表簽名,忽略即可,不影響修復結果。
    注意:grub install命令后需跟某個硬盤,不能跟具體的分區,因為mbr在硬盤的第一個扇區,不屬于任何一個分區。

這里寫圖片描述

如圖,修復成功。修復完成后,用sync將操作同步到磁盤。

這里寫圖片描述

用hexdump查看mbr,可發現前446個字節已寫入了新的內容。

這里寫圖片描述

grub install不僅能夠修復第1階段的相關內容,也可以修復第1.5階段和第2階段的內容,如圖所示,在/boot/grub下產生了第1.5階段和第2階段的相關配置文件。修復完成后重啟即可。

2 破壞第1.5階段

這里寫圖片描述

第1.5階段位于mbr后硬盤上的一小段空間,也不屬于任何分區。同樣可以使用dd命令將1.5階段清0,為了不破壞第一階段,需要跳過第一階段所處的前512個字節,清0后使用hexdump命令進行確認。

然后重啟,觀察能否啟動。 
這里寫圖片描述

這里寫圖片描述

如上圖,可以發現,與破壞1階段后的啟動界面不同,剛才破壞了1階段后,直接進入到了光盤啟動界面,因為系統認為硬盤沒有啟動功能了,不可引導了,所以直接用光盤啟動了,而這一次由于并沒有破壞第一階段,所以系統認為硬盤仍然可引導,就用硬盤進行引導,但由于1.5階段被破壞了,所以就卡在這個地方,無法進入到2階段。修復1.5階段仍然需要進入到光盤救援模式,按任意鍵進入下面的界面。

這里寫圖片描述

按ESC進入Boot Menu,以進入到救援模式中。

這里寫圖片描述

這里寫圖片描述

進入救援模式的過程與第1階段類似,此處不再贅述。
  開啟shell后,使用grub命令進行修復,同樣需要切根。

這里寫圖片描述

這里寫圖片描述

grub是交互式命令,輸入grub后進入交互模式,使用root(hd0,0)和setup(hd0)即可完成修復。
   root(hd#,#)hd#表示boot分區所在硬盤是系統的第幾塊硬盤,hd即hard disk硬盤,hd0表示第一塊硬盤(之前用sda表示第一塊硬盤);第二個#表示boot分區在該硬盤上的第幾個分區;
   setup(hd#)表示將grub安裝在哪個分區上。
   注意:此操作需依賴/boot/grub下的一些文件,若沒有這些文件,會導致修復失敗。

這里寫圖片描述

修復完成后,用hexdump命令可以看到mbr后1.5階段已不再為0,即已經寫入了有效內容。

這里寫圖片描述

修復完成后重啟即可。

原創文章,作者:以夢為馬,如若轉載,請注明出處:http://www.www58058.com/86167

(1)
以夢為馬以夢為馬
上一篇 2017-09-03 22:47
下一篇 2017-09-03 22:56

相關推薦

  • GPG——另一種加密信息的方式

    GPG ·使用gpg實現對稱加密 ·對稱加密file文件          gpg -c file          ls file.gpg ·在另一臺主機上解密file   &n…

    Linux干貨 2016-09-22
  • for、while、until循環

    一、for循環         ? for 變量名 in 列表;do             循環體     &nbsp…

    Linux干貨 2016-09-19
  • yum用法第二篇-自定義創建yum倉庫

    一、前言      上次寫了yum命令的介紹及常見使用說明,這次打算繼續整理下如何自定義創建yum倉庫,這在企業中也是非常常見的設置方式,有些公司為了服務器安全是不允許連接外網的,自定義創建yum倉庫正好可以實現局域網單獨安裝管理程序包這種需求。 二、用法說明      1.使用…

    Linux干貨 2015-09-22
  • 引導加載程序grub的使用詳解

    引導加載程序grub的使用詳解 為運行于虛擬機上的CentOS 6添加一個新硬件,提供兩個主分區 為硬盤建兩個主分區;并為其安裝grub 為硬盤的第一個主分區提供內核和ramdisk文件;為第二個分區提供rootfs 為rootfs提供bash、ls、cat程序以及所依賴的庫文件 為grub提供配置文件 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機 1.…

    Linux干貨 2017-09-04
  • Mysql 多表聯合查詢效率分析及優化

    1. 多表連接類型 1. 笛卡爾積(交叉連接) 在MySQL中可以為CROSS JOIN或者省略CROSS即JOIN,或者使用','  如:  SELECT * FROM table1 CROSS JOIN table2  &nb…

    Linux干貨 2015-04-13
  • GRUB——防止root密碼被破解

    GRUB(Boot Loader): ·grub:GRand Unified Bootloader          grub 0.x:grub leagacy          grub 1.x:g…

    Linux干貨 2016-09-11
欧美性久久久久