标签:free table 部分 字节 系统引导 标准 sys code 其他
MBR引导扇区介绍MBR
位于物理硬盘的第一个扇区(512
字节),该扇区又称为主引导扇区(MBR
扇区),除了包含系统引导程序的部分数据外,还包含整个硬盘的分区表记录。当主引导扇区发生故障时,将可能无法进入引导菜单,或者因无法找到正确的分区位置而无法加载系统,通过该硬盘引导主机时很可能进入黑屏状态。
下面将通过示例介绍对MBR
扇区进行备份、模拟破坏、修复的过程。由于 MBR 扇区中包含了整个硬盘的分区表记录,因此该扇区的备份文件必须存放到其他的存储设备中。
dd命令——用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换
命令格式
dd [if=<文件>][of=<文件>][bs=<字节数>][count=<区块数>][cbs=<字节数>][conv=<关键字>][ibs=<字节数>][obs=<字节数>][seek=<区块数>][skip=<区块数>][--help][--version]
参数说明
if=文件名:输入文件名,默认为标准输入。即指定源文件。
of=文件名:输出文件名,默认为标准输出。即指定目的文件。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
conv=<关键字>,关键字
ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
--help:显示帮助信息
--version:显示版本信息
1、首先,我们在虚拟机中添加一块新的硬盘,并重启Linux系统,识别硬盘,然后,将新添加的硬盘进行分区设置、格式化(创建文件系统)与挂载。
[root@localhost ~]# ls /dev //查看是否识别新添加的硬盘
agpgart input rtc tty12 tty34 tty56 vcs2
autofs kmsg rtc0 tty13 tty35 tty57 vcs3
block log sda tty14 tty36 tty58 vcs4
bsg loop-control sda1 tty15 tty37 tty59 vcs5
btrfs-control lp0 sda2 tty16 tty38 tty6 vcs6
bus lp1 sda3 tty17 tty39 tty60 vcsa
cdrom lp2 sda4 tty18 tty4 tty61 vcsa1
char lp3 sda5 tty19 tty40 tty62 vcsa2
console mapper sdb tty2 tty41 tty63 vcsa3
...//省略部分内容... //系统识别新添加硬盘sdb
[root@localhost ~]# fdisk /dev/sdb //进行分区管理
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x62f310d1 创建新的 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.
正在同步磁盘。
[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
[root@localhost ~]# mkdir /data //创建挂载目录
[root@localhost ~]# mount /dev/sdb1 /data //挂载sdb1
[root@localhost ~]# df -h //查看信息
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 20G 3.8G 17G 19% /
devtmpfs 898M 0 898M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 9.1M 903M 1% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda5 10G 37M 10G 1% /home
/dev/sda1 6.0G 174M 5.9G 3% /boot
tmpfs 183M 4.0K 183M 1% /run/user/42
tmpfs 183M 24K 183M 1% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
/dev/sdb1 20G 33M 20G 1% /data //成功挂载
2、将MBR引导扇区备份到第二块硬盘中。
[root@localhost ~]# dd if=/dev/sda of=/data/sda.mbr.bak bs=512 count=1
记录了1+0 的读入 //将MBR引导扇区复制到data目录中,文件名为sda.mbr.bak方便系统识别文件
记录了1+0 的写出
512字节(512 B)已复制,0.00222438 秒,230 kB/秒
[root@localhost ~]# ls /data //查看目录中是否有创建的文件
sda.mbr.bak
3、模拟 MBR 扇区故障 。
[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1
记录了1+0 的读入 //从zero中拿去文件覆盖MBR扇区
记录了1+0 的写出
512字节(512 B)已复制,0.000130793 秒,3.9 MB/秒
[root@localhost ~]# init 6 //重启服务器
4、下面我们来修复MBR引导扇区,由于 MBR 扇区被破坏以后,就无法再从该硬盘启动系统,所以需要使用其他硬盘中的操作系统进行引导,或者直接使用 CentOS 系统的安装光盘进行引导。不管使用哪种方式,目的都是相同的——获得一个可以执行命令的 Shell 环境,以便从备份文件中恢复 MBR 扇区中的数据。 首先,我们需要在VMware 15虚拟机光驱中添加CentOS 7镜像文件,并使光驱处于连接状态,使Linux系统启动时可以识别(和我们安装Linux系统时相同方式),然后重启虚拟机,在读条界面点击ESC键,进入BOOT模式选择从光驱启动。
5、选择从光驱启动后进入系统安装引导界面,这个时候我们选择最下面的一个选项疑难问题解决,回车,进入界面,然后选择第二个选项诊断CentOS 7系统,加载进入界面后输入1选择进入基本镜像模式,这个时候我们就会进入shell终端模式,我们就可以通过命令来进行修复操作。
6、通过命令模式输入命令将备份的扇区信息恢复到sda中,然后重启系统,看是否可以正常开启系统。
通过上面的操作完成了MBR引导扇区的恢复,希望可以帮助到大家!!!
标签:free table 部分 字节 系统引导 标准 sys code 其他
原文地址:https://blog.51cto.com/14473285/2432406