Linux 發行版本衆多,現如今也得到了越來越廣泛的應用,同時也面臨着系統出現故障的潛在風險,本文将以發行版本 RHEL6 為例詳細介紹幾種 Linux 災難恢複技術和方法,以確定 Linux 系統的安全恢複。
在介紹 Linux 災難恢複方法之前,我們先來了解下 MBR,其全稱為 Master Boot Record,即硬碟的主引導記錄。它由三個部分組成,主引導程式、硬碟分區表和硬碟有效标志。在總共 512 位元組的主引導扇區裡主引導程式(Bootloader)占 446 個位元組,第二部分是硬碟分區表,占 64 個位元組,硬碟有多少分區以及每一分區的大小都記錄在其中。第三部分是硬碟有效标志,占 2 個位元組。具體如圖示:
圖 1. MBR

系統硬碟分區表破壞
生産環境中的 Linux 伺服器可能會因為病毒或者意外斷電而引起硬碟分區表被破壞,通常恢複硬碟分區表需要之前我們先備份其分區表的資訊,一般我們使用 USB 外接裝置來備份主機硬碟的分區表。
在主機上挂載 USB 裝置後我們檢視系統目前磁盤裝置:
現在我們在 sdb 這個裝置上建立一個新的分區:
在新分區 sdb1 上建立檔案系統:
挂載新的檔案系統:
通常我們通過備份硬碟的 MBR 來備份硬碟分區表:
現在我們來寫零硬碟分區表來實作類似分區表被破壞的結果:
查詢硬碟 sda 上的分區資訊,發現其已不包含任何分區:
當主機硬碟分區表丢失了之後,再次啟動後 GRUB 會因找不到配置檔案而進入指令行模式:
圖 2. 分區表丢失
接下來我們挂載 RHEL6 的安裝盤,同時也接入我們之前備份的 USB 裝置,然後重新開機主機,選擇 CD-ROM 為第一引導裝置,啟動後選擇“Rescue installed system”。
圖 3. 選擇援救
按照提示,最終我們選擇一個 shell。
圖 4. 選擇 shell
我們查詢系統磁盤資訊,發現硬碟裝置 sda 沒有包含任何分區。
我們來恢複它的硬碟分區表,建立一個目錄并且挂載之前備份的 USB 裝置,我們看到它的裝置名是 /dev/sdb。
通過原來備份的 sda.mbr 檔案來恢複硬碟裝置 sda 的硬碟分區表:
再次查詢系統磁盤資訊:
硬碟裝置 sda 的分區表已經恢複,重新開機後系統便可正常引導。
系統 GRUB 損壞
類似得我們可以來寫零 Bootloader 來實作 GRUB 被破壞的結果:
重新開機後系統會因找不到 GRUB 而卡在“Booting from Hard Disk …”
挂載系統安裝CD光牒然後選擇進入 Rescue 模式,然後恢複 GRUB:
圖 5. 恢複 GRUB
重新開機主機後,系統可正常引導。
系統核心檔案丢失
系統丢失核心 kernel 檔案,再次啟動後會提示找不到檔案。
圖 6. 核心丢失
挂載系統安裝盤進入援救模式,檢查 /boot 目錄下發現沒有 kernel 檔案。
從挂載的系統安裝盤強制重新安裝核心:
在 /boot 目錄下已經生成新的 kernel 檔案 vmlinuz-2.6.32-71.el6.x86_64
系統鏡像檔案丢失
系統丢失鏡像檔案,主機啟動後黑屏。
圖 7. 鏡像丢失
挂載系統安裝盤進入援救模式 , 檢查 /boot 目錄下發現沒有鏡像檔案。
重新生成鏡像檔案 initramfs-2.6.32-71.el6.x86_64.img。
重新開機主機後 , 系統可正常引導。
系統 /boot 分區損壞
一般來說系統 /boot 分區損壞,我們會先嘗試修複檔案系統。如果檔案系統損壞不能修複,那麼我們可以參照前述的方法來依次建立 /boot 分區,重新安裝核心和鏡像,然後安裝 GURB 再手工編輯引導菜單,以最終來恢複系統可正常引導。通常我們需要按照如下的步驟來恢複。
建立分區
碰到比較嚴重的情況就是 /boot 分區已經完全損壞,啟動時會提示找不到引導裝置。
圖 8. 引導分區損壞
挂載安裝盤後進入援救模式,檢視分區情況,發現分區 /dev/sda1 不存在。
建立一個分區并且設定它為啟動分區。
重新開機主機以更新分區表,然後進入援救模式,并在我們新建立的分區上建立檔案系統。
安裝核心鏡像檔案
通過前述的方法我們安裝核心和鏡像檔案。
安裝 GRUB
我們安裝 GRUB 到硬碟裝置 sda 上。
編輯引導菜單
由于我們建立了新的分區,其對應的 UUID 會發生變化,可以通過指令 blkid 來查詢分區的 UUID。
上述的 sda3 為根分區,編輯 /boot/grub/grub.conf 檔案更新其對應的 UUID,其内容如下。
更新 /etc/fstab
類似的我們也需要更新 /etc/fstab 裡 /boot 分區對應的新 UUID,其内容如下。
現在我們的恢複步驟已經完成,重新開機主機後 GRUB 中可見我們配置的系統清單。
圖 9. GRUB 菜單
至此 /boot 分區已恢複,系統可正常引導啟動。
圖 10. 系統啟動
總結
本文闡述了常見的 Linux 災難恢複技術和方法,及其出現嚴重災難時應注意的恢複順序,以確定 Linux 系統在出現災難時得以安全恢複。