主引导记录(MBR,Master Boot Record)是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。
通常,我们将包含MBR引导代码的扇区称为主引导扇区。因这一扇区中,引导代码占有绝大部分的空间,故而将习惯将该扇区称为MBR扇区(简称MBR)。由于这一扇区承担有不同于磁盘上其他普通存储空间的特殊管理职能,作为管理整个磁盘空间的一个特殊空间,它不属于磁盘上的任何分区,因而分区空间内的格式化命令不能清除主引导记录的任何信息。
主引导扇区由三个部分组成(共占用512个字节):
1.主引导程序即主引导记录(MBR)(占446个字节)
可在FDISK程序中找到,它用于硬盘启动时将系统控制转给用户指定的并在分区表中登记了的某个操作系统。
2.磁盘分区表项(DPT,Disk Partition Table)
由四个分区表项构成(每个16个字节)。
负责说明磁盘上的分区情况,其内容由磁盘介质及用户在使用FDISK定义分区时决定。(具体内容略)
3.结束标志(占2个字节)
其值为AA55,存储时低位在前,高位在后,即看上去是55AA(十六进制)。
故障原因
病毒木马等造成的破坏
不正确的分区操作、磁盘读写错误操作
故障现象
找不到引导程序,启动中断
无法加载操作系统,开机后黑屏
解决思路
应提前做好备份文件
以安装光盘引导进入急救模式
从备份文件中恢复
(1)添加硬盘(添加好后记得重启系统)
(2)创建分区,用fdisk命令进行分区的创建(这里不用去创建分区的类型,只是用来存储)
[root@localhost ~]# fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0x9476d677 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1): 起始 扇区 (2048-41943039,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039): 将使用默认值 41943039 分区 1 已设置为 Linux 类型,大小设为 20 GiB 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。
(3)格式化,用命令mkfs进行格式化
[root@localhost ~]# mkfs.xfs /dev/sdb1 meta-data=/dev/sdb1 isize=512 agcount=4, agsize=1310656 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=5242624, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
(4)创建挂载点/data,并进行挂载
[root@localhost ~]# mkdir /data [root@localhost ~]# mount /dev/sdb1 /data [root@localhost ~]# df -hT 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root xfs 20G 3.9G 17G 20% / devtmpfs devtmpfs 473M 0 473M 0% /dev tmpfs tmpfs 489M 0 489M 0% /dev/shm tmpfs tmpfs 489M 7.1M 482M 2% /run tmpfs tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sda1 xfs 6.0G 161M 5.9G 3% /boot /dev/mapper/centos-home xfs 10G 37M 10G 1% /home tmpfs tmpfs 98M 4.0K 98M 1% /run/user/42 tmpfs tmpfs 98M 20K 98M 1% /run/user/0 /dev/sdb1 xfs 20G 33M 20G 1% /data
(5)对第一个扇区进行备份
输入命令: dd if=/dev/sda of=/data/sda.mbr.bak bs=512 count=1
dd:复制
if 从/dev/sda目录中拿取文件
of=/data/sda.mbr.bak 生成到/data目录下生成一个文件sda.mbr.bak
bs=512 定义容量,512k
count=1 拿取的次数为1次
[root@localhost ~]# dd if=/dev/sda of=/data/sda.mbr.bak bs=512 count=1 记录了1+0 的读入 记录了1+0 的写出 512字节(512 B)已复制,0.00194802 秒,263 kB/秒
(1)从/dev/zero拿取文件把/dev/sda覆盖,输入命令:dd if=/dev/zero of=/dev/sda bs=512 count=1
[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1 记录了1+0 的读入 记录了1+0 的写出 512字节(512 B)已复制,0.000236773 秒,2.2 MB/秒
(2)用命令init 6重启,会发现重启失败
(1)光盘镜像必须先放进去,并选择连接
(2)对虚拟机进行重启,注意:有的电脑在点击重启开始加载进度条的时候,需要按按Esc键
(3)选择“Troubleshooting疑难问题解决”,用键盘上下键去进行选择,选择好后按回车键
(4)接下来选择第二行,进入系统自带的命令模式
(5)进入到命令模式中,输入“1”(Continue),按回车键,会自动加载进入带一个shell终端模式
(1)输入“ls”查看,并没有之前创建的/data目录
(2)创建一个挂载点名称叫/bak,然后你把/dev/sdb1挂载到/dak上,并查看/bak目录下,就会看到之前之前的那个备份文件sda.mbr.bak
(3)恢复文件操作,输入命令:dd if=/bak/sda.mbr.bak of=/dev/sda ,进行恢复,然后输入命令reboot重启
(4)重启成功