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
下一篇 2017-09-03

相關推薦

  • shell編程——讓你又愛又恨的東西

    變量類型:      不同的數據類型在系統中所占資源不同,并且表示的范圍也不同      數值型:          短整型short:      &…

    Linux干貨 2016-08-12
  • 馬哥網絡教育班第21期+第六周課程練習

    請詳細總結vim編輯器的使用并完成以下練習題 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; [root@localhost ~]# cp /etc/rc.d/rc.sysinit /tmp/ [root@localho…

    Linux干貨 2016-08-02
  • PHP字符串的編碼問題

        大家都知道,不同字符編碼,其在內存占用的字節數不一樣。如ASCII編碼字符占用1個字節,UTF-8編碼的中文字符是3字節,GBK為2個字節。     PHP 也自帶幾種字符串截取函數,其中常用到的就是 substr 和 mb_substr。     使用substr截取中…

    Linux干貨 2015-10-22
  • Linux中文件管理類命令初探

    Linux中文件管理類命令初探 文件管理通常指的是對文件或者目錄進行的類似復制、移動、刪除操作。 1. 文件的復制 cp 在Linux中使用cp指令完成文件復制工作,即copy之意。實際操作中又可以分為以下兩種情況: 單源復制 單源復制即復制的源只有一個,這個源可以為文件或者目錄。命令語法:cp [OPTION]… [-T] SOURCE DEST在實際…

    Linux干貨 2016-11-06
  • vim簡單操作

    vim第一講 光標在屏幕文本中的移動既可以用箭頭鍵,也可以使用 hjkl 字母鍵。 h (左移) j (下行) k (上行) l (右移) 欲進入 Vim 編輯器(從命令行提示符),請輸入:vim 文件名 <回車> 欲退出 Vim 編輯器,請輸入 <ESC> :q! <回車> 放棄所有改動。 或者輸入 <ESC&gt…

    Linux干貨 2017-07-29
  • centos7編譯安裝zabbix

    centos7源碼編譯安裝zabbix3 centos7源碼編譯安裝zabbix3 centos7源碼編譯安裝zabbix3 系統配置和必要的安裝包 編譯安裝nginx 編譯安裝php 安裝MariaDB 安裝JDK 安裝Zabbix3.0 前戲準備 開始編譯 開始安裝 zabbix虛擬主機創建 前戲準備 開始編譯 開始安裝 php配置 前戲準備 開始編譯 …

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