一次磁盤異常引發的系統恢復歷程

問題現象

服務器發生內核panic,根據panic堆棧來看,是ext4文件系統報錯,基本意思是訪問特定扇區位置出錯了,從而導致了內核panic,日誌如下:

image2016-4-27 16-11-20.png

panic重啓後,發現系統無法啓動,從bmc上面來看,系統完成BIOS關於硬件初始化後,grub沒有出現,bmc上面呈現黑屏狀態,沒有任何信息。

解決過程

問題定位

一般linux發佈版系統都會提供修復模式的系統,需要在grub中選擇啓動的系統,但是這次的問題是grub都沒有看到,基本上就是在BIOS完成後就沒有了下文了,基本可以確定了問題大概原因:

  • 磁盤硬件損壞;
  • 磁盤分區損壞;
  • grub損壞。

這裏僅僅是猜測,需要先確定硬件是否正常。需要有一個可用的系統把服務器驅動起來,第一個想到的是livecd。
通過bmc把livecd iso掛載到服務器上,成功啓動了服務器。啓動後,因爲當前主機上存儲較多的磁盤,需要通過fdisk找到先前的系統盤(因爲是livecd系統,所以sda不一定是系統盤)。看到的磁盤有Linux swap / Solaris之類的分區,基本上就是系統盤了。

image2016-4-27 16-11-44.png

接下來就要判斷磁盤是否正常,直接簡單的方法就是mount,先mount /dev/sda3,因爲該分區較大,可以大膽猜測是根分區,

# mkdir /data
# mount /dev/sda3 /data
發現可以成功mount,那麼根分區沒有問題,再去mount /dev/sda1,
# mount /dev/sda1 /data/boot
mount也是成功的,裏面的內容是/boot分區內容,兩個主要分區均是正常的,那麼可以斷定硬盤沒有出問題,至少文件系統沒有出錯。
補充內容:
Linux系統基本的啓動簡要流程是:硬件從EPROM的0地址開始啓動,也就是從BIOS所在的存儲0地址開始啓動,也就是加載BIOS相關代碼,BIOS在運行最後會加載啓動磁盤的0號扇區內容,也就是我們經常說的MBR扇區,0號扇區記錄的內容很少,最重要的是會有一個跳轉地址,會加載grub的主體代碼,會有更豐富的啓動功能。這裏的0號扇區內容也就是經常說的bootloader中boot的功能,而grub則對應了loader功能,grub提供選擇內核鏡像功能,傳入內核參數等,最好會把內核從磁盤加載到內存中,完成一個loader該做的事情,接下來就是內核初始化的過程了。這裏不再詳細說明,有興趣的可以去看內核啓動流程代碼。

根據補充資料中來看,當前的問題出在了bootloader階段,就要看0號扇區boot部分的數據是否正常,再看grub部分的數據是否正常。方法如下:
1、查看0號扇區內容

# dd if=/dev/sda of=/root/sda bs=512 count=1
# hexdump -Cv /root/sda

image2016-4-27 16-12-2.png
這個截圖是正常的MBR扇區內容,當時出問題的時候,hexdump的數據是混亂的,和正常的MBR扇區內容差距較大,到這時候,基本可以判斷是MBR扇區數據異常。
數據恢復
那麼如何恢復呢?在CentOS的/boot/grub中會有關於grub相關內容備份文件
image2016-4-27 16-12-14.png
其中stage1就是MBR的內容,而stage2就是grub的代碼內容,可以都hexdump出來進行查看。同時grub提供的好用的工具:grub-install,恢復方法如下:

# mount /dev/sda3 /data
# mount /dev/sda1 /data/boot
# grub-install --root-directory=/data /dev/sda

這裏掛載方式需要注意,這裏我是把要修復的磁盤/dev/sda中根分區/dev/sda1掛在在/data/boot中,因爲grub-install在修復的時候,會根據指定的根目錄位置找到/boot/grub中的相關備份文件。這種修復方式會保證無論在boot階段還是在loader階段的數據異常,都會進行修復。
修復後,重啓服務器,從指定磁盤啓動,發現grub成功加載,同時與出問題前保持一致,選擇啓動內核,系統成功啓動後,再恢復虛擬機,恢復虛擬機中相關業務,從而之前出現的服務問題均迎刃而解。

參考資料

https://zh.wikipedia.org/wiki/%E4%B8%BB%E5%BC%95%E5%AF%BC%E8%AE%B0%E5%BD%95
http://www.ahlinux.com/start/desk/19644.html
http://balistardut.github.io/2016/01/30/Linux%E7%A3%81%E7%9B%98%E7%9B%B8%E5%85%B3-%E5%88%86%E5%8C%BA%E4%B8%8E%E4%BF%AE%E5%A4%8D/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章