1. 程式人生 > >磁盤分區中MBR的模擬損壞及修復

磁盤分區中MBR的模擬損壞及修復

恢復 數據

目前對於硬盤的分區方式有兩種:MBR和GPT。本文只是為了介紹分區中的MBR的備份和恢復,所以不對GPT分區做過多的介紹。

我們先來對MBR的分區方式進行一個簡單的介紹:

上圖說明:

技術分享

采用MBR分區的硬盤中一共有四個分區:擴展分區最多有一個,如果不需要再分邏輯分區,可以沒有擴展分區。

我們都知道磁盤上有一個個的磁道,每個磁道上有很多的扇區,從磁盤的外圍向內,從0開始逐漸增加磁道編號,每次磁道中的扇區也是從0開始進行編號,而MBR這個數據塊就位於0磁道0扇區。每個扇區的大小為512字節,所以磁盤上的MBR的大小就為512字節,而這512字節又分為:

*主引導程序(偏移地址0000H--0088H),它負責從活動分 區中裝載,並運行系統引導程序。

*出錯信息數據區(偏移地址0089H--00E1H為出錯信息, 00E2H--01BDH全為0字節。)

*分區表(DPT,Disk Partition Table)含4個分區項,偏移地址01BEH--01FDH,每個分區表項長16個字節,共64字節為 分區項1、分區項2、分區項3、分區項4 v

*結束標誌字,偏移地址01FE--01FF的2個字節值為結束標誌 55AA

所以MBR存儲的信息很重要,前446字節的啟動引導信息,是當系統啟動時由BIOS自舉,進行首先查找的地方,根據啟動引導中的內容到指定的位置進行加載西東啟動文件,所以如果MBR損壞,則系統就啟動不起來了。如果啟動引導後面的64字節分區表位損壞了,則系統就不能正常識別磁盤中的分區,系統就會認為該磁盤沒有分區,也不能正常加載分區,每16位字節標識一個分區,所以一個采用MBR分區方式的硬盤只能分四個分區(除邏輯分區),最後的兩位結束為也是很重要的,如果沒有結束為,系統就不認為這是一個MBR,就會認為這是一個空盤,結束位標誌著分區表的結束,也是一個MBR數據區的結束。

在生產的過程中,我們需要對磁盤的MBR區進行一個備份,以備當MBR區損壞時能夠恢復。

而且這個備份的文件是不能還放在這個硬盤下的,一定要備份到遠程主機上。

我們在開始試驗之前需要了解兩個東西:

/dev/zero文件:這個是一個特殊的字符文件,會不斷產生返回值0,

dd 這個命令:這個命令可以對塊設備進行讀寫操作。

我們先來查看一下磁盤的MBR區數據,前512字節(我們以sda磁盤為例)

hexdump -C -n 512 /dev/sda

技術分享

對磁盤上的MBR區進行備份:(我們以sda盤為例)

dd if=/dev/sda of=/app/mbr bs=1 count=512

技術分享

這條命令將sda盤中的前512字節的數據讀入到/app/mbr這個文件中了,即使沒有這個文件,通過這條命令也會自動生成一個該文件,bs後面默認的是以字節為單位,我們也可以跟上單位自定義大小,count是表示有多少塊該大小的數據。

備份完之後我們來查看一下是否備份成功,進入/app下進行查看是否生成了備份文件:

技術分享

當然,這個備份的文件不能放到當前這個磁盤下,如果我們的MBR區域壞了,系統就啟動不起來,而且磁盤就進不去,我們的備份文件就根本找不到。所以通常備份文件都是放到遠程主機上的,我們將mbr文件遠程拷貝到我的另一臺Linux上:

技術分享

好了,既然已經備份好了,我們就可以直接進行mbr的破壞了,同樣我們通過dd 命令寫入數據,將sda磁盤中的mbr區的數據給破壞掉:dd if=/dev/zero of=/dev/sda bs=1 count=512

我們之前也提到過了,/dev/zero是一個特殊的字符設備,不斷的產生0值,我們將sda前512字節全部重置為0.

技術分享

通過hexdump -C -n 512 /dev/sda 查看:

技術分享

現在,我們的系統就不能正常的加載啟動了,我們需要把這塊破壞的硬盤安裝到另一臺主機上,通過另一臺主機進行修復。

在掛載之前我們要先查看一下我們用來添加磁盤的系統中的磁盤,以確定最後我們是否知道我們添加的是那一塊磁盤。

技術分享

首先,我們要知道被破壞的磁盤的磁盤名,否則我們怎麽知道我們要把那一個磁盤安裝到另一個主機上。打開虛擬機編輯,找到磁盤對應的磁盤文件名。這是為了方便我們接下來在虛擬機文件中找到這個磁盤文件。

技術分享

打開另一臺主機的編輯設置,添加磁盤,如圖所示:

技術分享

選擇SCSI磁盤類型

技術分享

要添加現有的虛擬磁盤

技術分享

在被破壞的虛擬機系統文件中找到與我們上面查看到的被破壞的磁盤文件編號相同的磁盤文件。

技術分享

添加確定完成即可:

技術分享

按照步驟來:

設備進行添加完成之後,我們進行入系統中查看有沒有將此硬盤添加進來

技術分享

通過查看,我們發現,雖然我們將磁盤進行了物理的添加,但是系統中,並沒有真正的識別,所以我們需要運行echo ‘- - -‘ > /sys/class/scsi_host0/scan 這條命令進行系統的識別,有些時候需要向scsi_host2中添加。之後我們在來查看會發現多出來一個sde磁盤,這個磁盤的大小正是我們添加的那塊磁盤的大小,所以確定這個就是我們需要修復的那一塊磁盤。

技術分享

為了進一步的確認這就是我們需要恢復的磁盤,我們再來查看一次。下圖中,我們發現磁盤的前512自己全部為0了。

技術分享


接下來我們將我們備份的文件,同樣的使用dd命令將備份文件寫入到被破壞的磁盤中,小編演示如下:

技術分享

恢復數據之後要進行查看確認,以確保萬無一失。

這個時候我們進行查看磁盤分區情況,看是否會有所改變:

技術分享

恢復過MBR分區後,sde中的分區信息就顯示出來了。說明我們恢復成功了。我們將磁盤卸載掉,重新掛回原來的系統上,測試一下看是否能夠開機成功。

技術分享

小編這裏顯示已經成功的開機了!你那邊怎麽樣了?

一般當我們恢復過之後,其中的分區信息能夠顯示出來就表明恢復已經成功,我們這個實驗是在虛擬機上進行的,現實中的磁盤跟我們的操作思想是一樣的。只不過是我們要把磁盤拔下來,插到另一個主機上進行恢復,其思想是完全一樣的。

有時候我們沒有備份磁盤的MBR區,但是只要我們有相同分區類型的磁盤(註意:是完全相同的分區類型,其中的數據可以不一樣,我們需要的是恢復啟動引導和分區表位以及結束位。)也是可以同過這個方法來恢復的。把小編上面演示中的備份文件換成完好的磁盤設備就可以了。

希望小編的一番苦心可以幫到你!技術分享

本文出自 “Linux運維” 博客,請務必保留此出處http://jk6627.blog.51cto.com/12002684/1957816

磁盤分區中MBR的模擬損壞及修復