目前对于硬盘的分区方式有两种: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区,但是只要我们有相同分区类型的磁盘(注意:是完全相同的分区类型,其中的数据可以不一样,我们需要的是恢复启动引导和分区表位以及结束位。)也是可以同过这个方法来恢复的。把小编上面演示中的备份文件换成完好的磁盘设备就可以了。
希望小编的一番苦心可以帮到你!