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

目前對於硬盤的分區方式有兩種:MBR和GPT。本文只是爲了介紹分區中的MBR的備份和恢復,因此不對GPT分區作過多的介紹。
app

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

上圖說明:測試

 

wKioL1mYMurQcYu9AAU9a3P5GpA620.png

採用MBR分區的硬盤中一共有四個分區:擴展分區最多有一個,若是不須要再分邏輯分區,能夠沒有擴展分區。spa

咱們都知道磁盤上有一個個的磁道,每一個磁道上有不少的扇區,從磁盤的外圍向內,從0開始逐漸增長磁道編號,每次磁道中的扇區也是從0開始進行編號,而MBR這個數據塊就位於0磁道0扇區。每一個扇區的大小爲512字節,因此磁盤上的MBR的大小就爲512字節,而這512字節又分爲:3d

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

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

*分區表(DPT,Disk Partition Table)含4個分區項,偏移地址01BEH--01FDH,每一個分區表項長16個字節,共64字節爲 分區項一、分區項二、分區項三、分區項4 v 虛擬機

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

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

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

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

咱們在開始試驗以前須要瞭解兩個東西:

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

dd 這個命令:這個命令能夠對塊設備進行讀寫操做。

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

    hexdump -C -n 512 /dev/sda

wKiom1mYOIKy9swkAADQ0LRe-60341.png

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

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

wKioL1mYNbmhqK3GAAAUUvib9Gg087.png

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

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

wKioL1mYQ5eiWigWAAARNUTPyis073.png

固然,這個備份的文件不能放到當前這個磁盤下,若是咱們的MBR區域壞了,系統就啓動不起來,並且磁盤就進不去,咱們的備份文件就根本找不到。因此一般備份文件都是放到遠程主機上的,咱們將mbr文件遠程拷貝到個人另外一臺Linux上:

wKioL1mYRw_i1Cn4AAASaH0NoQ0603.png

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

咱們以前也提到過了,/dev/zero是一個特殊的字符設備,不斷的產生0值,咱們將sda前512字節所有重置爲0.

wKiom1mZGbiDIXSOAAATY9Cr_vE905.png

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

wKioL1mZI9nxGu03AABr60i4WKM765.png

如今,咱們的系統就不能正常的加載啓動了,咱們須要把這塊破壞的硬盤安裝到另外一臺主機上,經過另外一臺主機進行修復。

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

wKioL1mZKA3gxvS4AAAwx5pPFCs217.png

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

wKioL1mZJaTAp1ikAADa9aFYcSU126.png

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

wKioL1mZJMjAWw2qAAFtbW-taek194.png

    選擇SCSI磁盤類型

wKiom1mZJM7iy-4-AABilBXI13I166.png

    要添加現有的虛擬磁盤

wKioL1mZJMmzfXNuAABdk6ZWRG4584.png

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

wKiom1mZJM-Bx_THAAEhaCz0mxE856.png

    添加肯定完成便可:

wKioL1mZJMrjNSrQAABhZS5dJ7g307.png

按照步驟來:

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

wKioL1mZJ77A7kClAAAwx5pPFCs958.png

    經過查看,咱們發現,雖然咱們將磁盤進行了物理的添加,可是系統中,並無真正的識別,因此咱們須要運行echo '- - -' > /sys/class/scsi_host0/scan 這條命令進行系統的識別,有些時候須要向scsi_host2中添加。以後咱們在來查看會發現多出來一個sde磁盤,這個磁盤的大小正是咱們添加的那塊磁盤的大小,因此肯定這個就是咱們須要修復的那一塊磁盤。

wKiom1mZJ8SBI-eZAABC3tW0Y1M069.png

   爲了進一步的確認這就是咱們須要恢復的磁盤,咱們再來查看一次。下圖中,咱們發現磁盤的前512本身所有爲0了。

wKioL1mZKhXAm6PKAABcbtTd4fU193.png


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

wKiom1mZK3LDtUYcAADpEXi_yf8762.png

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

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

wKiom1mZLj2BDHQ7AABJvIYQniE695.png

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

    

wKiom1mZL2eAxbxIAAQn2dmGV6Q948.png

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

    通常當咱們恢復過以後,其中的分區信息可以顯示出來就代表恢復已經成功,咱們這個實驗是在虛擬機上進行的,現實中的磁盤跟咱們的操做思想是同樣的。只不過是咱們要把磁盤拔下來,插到另外一個主機上進行恢復,其思想是徹底同樣的。

    有時候咱們沒有備份磁盤的MBR區,可是隻要咱們有相同分區類型的磁盤(注意:是徹底相同的分區類型,其中的數據能夠不同,咱們須要的是恢復啓動引導和分區表位以及結束位。)也是能夠同過這個方法來恢復的。把小編上面演示中的備份文件換成無缺的磁盤設備就能夠了。

    但願小編的一番苦心能夠幫到你!i_f01.gif

相關文章
相關標籤/搜索