Linux系統一切皆檔案,是以任何系統檔案的損壞或者丢失,都有可能導緻系統啟動不了,/etc/fstab檔案存放的是作業系統分區挂載的資訊,如果這個檔案丢失了也就意味着linux系統啟動的過程中無法去挂載之前已經建立好的各個檔案系統,帶來的麻煩是不言而喻的,boot目錄或者分區下的所有檔案是作業系統啟動時引導加載所必須的檔案,如果這些引導檔案都不能正常加載運作,作業系統根本無從談起正常啟動。那麼今天筆者就給大家分享一下fstab檔案和boot分區下的所有檔案都被删除後如何修複linux系統的話題。
首先讓我們來看一下系統正常時狀态(fstab檔案存在,分區挂載正常)

Boot分區上的系統檔案完好無損
删除/etc/fstab檔案,删除boot分區上的所有檔案,重新開機
系統啟動由于無法找到grub.conf檔案,是以無法顯示系統啟動菜單,即使我們手動輸入啟動菜單也無法啟動系統,因為系統啟動所需要的引導檔案全部放在boot目錄下,而現在我的boot目錄下的檔案全部被删除了
現在隻能啟動CD光牒救援系統才能進行修複
由于我使用CD光牒修複,是以就不用配置網絡了,當然也可以通過網絡使用伺服器上的系統鏡像檔案進入網絡救援模式
這一步明确的提示我們沒有任何linux分區,實際上是因為沒有找到fstab檔案所導緻的CD光牒救援系統無法讀取分區挂載資訊
修複的第一步:通過系統上的分分區資訊以及分區上存放的檔案識别boot分區和根分區以及其它分區,并重建fstab檔案(當然也可以先隻去識别boot分區和根分區,隻要有boot分區和根分區,系統可以正常啟動了再去補充)。當然如果工程師在當初安裝系統時有給系統分區加卷标的話,使用blkid指令讀取一下分區資訊,就一目了然了,是以筆者在這裡建議大家以後做系統的同時最好給系統分區也加一個醒目的卷标,即便是出現了fstab檔案被删除了,啟用救援模式去修複的工作也好做的多。
由于我這裡安裝系統之初就給系統分區加好卷标了,是以在這裡就比較簡單了,如果沒有卷标資訊的話,隻能通過fdisk –l檢視分區大小以及起始柱面資訊做一個大概的判斷,正常情況下,作業系統的第一個分區/dev/sda1都是boot分區,/dev/sda2是根分區,如果還有分區隻能通過在目前救援系統上臨時把它們挂載起來,再通過分區上的檔案特殊來進行判斷了
Vi(當然有人會說為什麼不使用vim了,那是因為救援模式下是沒有加載vim指令的)擴充指令模式下使用r!blkid讀入目前硬碟上所有的分區資訊,這樣一來fstab檔案所需要的分區UUID以及檔案系統,全都都能保證正确無誤了。
當然在這裡筆者一定提醒大家的是,這個UUID通過blkid讀入進來的時候是帶有雙引号的,但是這個雙引号就會導緻整個修複結果不成功,筆者曾經就是傷痕累累的人,被這個不起眼的雙引号折騰了一天,才發現最終修複失敗就是因為在fstab檔案中多了這個雙引号。是以特此把這個問題寫出來了。
這就是當初筆者的錯誤寫法,UUID直接讀取進來了,沒有去掉雙引号就直接使用了
這麼寫的殘局如圖所示,也就是系統啟動時無法自動挂載已經寫入fstab檔案裡的分區資訊,即便手動挂載,boot分勉強可以挂載,根檔案系統根本無法挂載,是以就導緻安裝grub時報出了一個錯誤資訊。
忽略錯誤資訊繼續,是以帶的最終結果就是,每次啟動系統時手動去寫系統啟動菜單,可以正常啟動系統,fstab檔案和boot分區檔案一切正常,但就是不能自動啟動,看起來似乎沒有什麼任何被修複過的迹象
正确手工建立的fstab檔案如下
第一步已經完成了,分區挂載資訊表fstab已經恢複正常,現在必須重新開機再次進入CD光牒救援是系統才可以正常切換到原系統的根下進行修複boot目錄的操作
第二步:重建boot分區上的所有檔案
由于啟動CD光牒救援系統前面的一些進入步驟和前一次一樣,就省略了,這裡就給出了fstab檔案修複完成後所出現的不同畫圖,當你看到些提示時,恭喜你!你的fstab檔案已經重建成功
接下來就安裝相原系統CD光牒上的核心檔案到boot分區,再次就是安裝grub到boot分區,當然首先是切換系統根目錄,使用chroot /mnt/sysp_w_picpath(前面啟動畫面不同之處一屏上明确辨別的目錄),安裝核心檔案時,必需使用—force選項強行安裝,否則會提示系統上已經安裝過核心了
最後就是手寫/boot/grub/grub.conf檔案了,當然grub.Conf檔案也是有其标準格式的,是以各位在手工建立的時同時一定不要寫錯格式,否則系統也是會卡在啟顯示啟動菜單那裡啟動不的,感覺似乎沒有修複過一樣,但其實隻要前面的步驟沒有出錯,隻是菜單檔案菜單檔案寫錯,我們在系統啟動停留的grub提示符後面臨時輸入啟動菜單也是可以啟動作業系統的,但這的确不能算是正常修複過了。
grub.conf檔案最簡化格式:
default=#(預設啟動系統選項0:第一個作業系統;1:第二個作業系統)
timeount=#系統留給使用者的選擇時間(系統預設安裝值是5,機關s,如果不寫這一行,系統會一直等待使用者按ENTER鍵之後才會繼續啟動系統)
tile Cento6.8(2.6.32-642.el6.x86_64)(也就是我們在系統啟動菜單上所看到的名稱)
root (hd0,0)表示的是boot分區:第一塊硬碟的第一個分區,如果你是多作業系統的話,括号裡面也就不一定是這個預設值了
kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0
/vmlinuz-2.6.32-642.el6.x86_64:系統核心檔案的路徑(由于hd0,0已經表示了/boot,是以直接寫/boot後面的路徑就可以了)
root=UUID=062befd6-d27d-4e45-8675-e9b5771ac934 指定了根分區的位置,也可以使用root=/dev/sda2表示(前面說過的,多作業系統也就不一定是這個預設值了)
Selinux=0實際這是禁用了核心自動裝載selinux安全子產品,如果不禁用的話,系統修複完成後會重新開機兩次才會正常
initrd /initramfs-2.6.32-642.el6.x86_64.img 指定了檔案系統驅動加載檔案
這裡展示的其實是vi的進階用法,如何在vi裡面讀入其它指令的執行結果,以保證配置檔案某些參數是正确無誤的,例如這裡的系統核心檔案名稱,以及裝置的UUID等等
因為已經使用chroot /mnt/sysp_w_picpath了,就必須先退一步後才能使用CD光牒救援系統中的reboot指令重新開機系統檢驗修改效果了
成功菜單修複
成功啟動作業系統
再次檢視修複後的系統檔案狀态,和破壞前的系統檔案狀态相比,雖然少了一些檔案,但是使用效果和之前是沒有兩樣的。是以不用擔心,整個修複過程是完美的。
好了,關于修複系統的話題應給大家分享到這兒。如有其它檔案損壞可以參考此修複過程舉一反三也就沒什麼問題了。
轉載于:https://blog.51cto.com/183530300/1853816