Linux环境下MBR简介、如何修复MBR扇区故障
1. MBR简介
(1)MBR
主引导记录(MBR,Main Boot Record)是位于磁盘最前边的一段引导代码。它负责磁盘操作系统对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统在对硬盘进行初始化时产生的;
通常,将包含MBR引导代码的扇区称为主引导扇区(MBR扇区)。MBR扇区作为管理整个磁盘空间的一个特殊空间,它不属于磁盘上的任何分区,因而分区空间内的格式化命令不能清除主引导记录的任何信息。
主引导扇区由三个部分组成(共占用512个字节):
- 主引导程序即主引导记录(MBR)(占446个字节);可在FDISK程序中找到,它用于硬盘启动时将系统控制转给用户指定的并在分区表中登记了的某个操作系统。
- 磁盘分区表项(DPT,Disk Partition Table);由四个分区表项构成(每个16个字节),负责说明磁盘上的分区情况
- 结束标志(占2个字节);
(2)主引导扇区的读取流程
系统开机或者重启时主引导扇区的读取流程如下:
- BIOS 加电自检 。BIOS执行内存地址为 FFFF:0000H 处的跳转指令,跳转到固化在ROM中的自检程序处,对系统硬件(包括内存)进行检查。
- 读取主引导记录(MBR)。当BIOS检查到硬件正常并与 CMOS 中的设置相符后,按照 CMOS 中对启动设备的设置顺序检测可用的启动设备。BIOS将相应启动设备的第一个扇区(也就是MBR扇区)读入内存地址为0000:7C00H 处。
- 检查0000:7CFEH-0000:7CFFH(MBR的结束标志位)是否等于55AAH,若不等于则转去尝试其他启动设备,如果没有启动设备满足要求则显示“NO ROM BASIC”然后死机。
- 当检测到有启动设备满足要求后,BIOS将控制权交给相应启动设备。启动设备的MBR将自己复制到0000:0600H处,然后继续执行。
- 根据MBR中的引导代码启动引导程序。
2. 如何修复MBR扇区故障
(1)关机挂载一块新硬盘
(2)开机进入Linux系统,对新硬盘分区
2.1> fdisk -l(查看硬盘设备分区列表,是否存在/dev/sdb设备信息)
2.2> 对新硬盘分区
fdisk /dev/sdb
执行如下命令:
n(新分区)
p(主分区)
1(第1个分区)
1(起始扇区)
+10G(分区容量)
w(保存)
(3)建立新硬盘的文件系统(格式化文件系统)
3.1> fdisk -l /dev/sdb(查看sdb分区列表信息)
3.2> 对每个分区进行格式化
mkfs -t ext4 /dev/sdb1(格式化/dev/sdb1分区)
mkfs -t ext4 /dev/sdb5(格式化/dev/sdb5分区)
mkfs -t ext4 /dev/sdb6(格式化/dev/sdb6分区)
(或mkfs.ext4 /dev/sdb1(格式化/dev/sdb1分区))
(4)挂载sdb1分区
mkdir /sdb1
mount /dev/sdb1 /sdb1
(5)备份MBR扇区数据
dd if=/dev/sda of=/sdb1/sda.mbr.bak bs=512 count=1
(6)模拟MBR被破坏的故障
dd if=/dev/zero of=/dev/sda bs=512 count=1
(7)接下来重启虚拟机,如果没有采用光盘引导,则系统一直处于如下状态,不能启动;
(8)重启虚拟机,采用RHEL6.5光盘引导,进入急救模式(第3项)
(9)从备份文件中恢复MBR扇区
fdisk -l (能看到sdb1分区,看不到sda设备,因为sda设备的MBR被破坏)
10. 重新挂载sdb1分区
mkdir /sdb1(在急救模式下的虚拟磁盘中建立sdb1分区的挂载点目录)
mount /dev/sdb1 /sdb1
dd if=/sdb1/sda.mbr.bak of=/dev/sda bs=512 count=1
11. 重启虚拟机,可以发现系统正常启动,MBR扇区故障已经被修复;