前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux下MBR分区表修复/恢复

linux下MBR分区表修复/恢复

作者头像
大大大黑白格子
发布2020-06-10 19:15:09
6.2K0
发布2020-06-10 19:15:09
举报
文章被收录于专栏:云服务笔记云服务笔记
linux 下 MBR 方式分区后分区表损坏/误删的修复/恢复:

主引导记录(Master Boot Record,MBR),位于一个硬盘的0柱面、0盘面、1扇区,共512字节。具体划分依次为:引导代码区440字节、磁盘签名4字节、空白(Ox0000)2字节、MBR分区表(Disk Partition Table,DPT)64字节、结束标志(Ox55AA)2字节,所以磁盘的前512个字节存储的内容是 MBR主引导记录和分区表

注意:涉及数据的敏感操作一定一定做好备份,然后再尝试做文件系统修复、恢复等操作,出问题可以回滚到操作前的状态,备份精神,备份精神,备份精神

场景一:

磁盘整个空间分为一个分区使用(没有定义特殊的扇区起始位置)
1. 创建分区 > 挂载分区 > 写入数据
代码语言:javascript
复制
root@BJ-CentOS7 ~ # fdisk -l /dev/vdb             
磁盘 /dev/vdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x3785996d
   设备 Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    20971519    10484736   83  Linux
root@BJ-CentOS7 ~ # mount /dev/vdb1 /vdb1/
root@BJ-CentOS7 ~ # df -Th /dev/vdb1 
文件系统       类型  容量  已用  可用 已用% 挂载点
/dev/vdb1      ext4  9.8G   44M  9.2G    1% /vdb1
root@BJ-CentOS7 ~ # ll -h /vdb1/
总用量 7.1M
-rw------- 1 root root 1.7K 12月  7 22:48 1.key
-rw-r--r-- 1 root root   45 12月  7 16:24 1.sh
-rw-r--r-- 1 root root    5 12月  7 16:24 1.txt
-rw-r--r-- 1 root root 7.1M 12月 27 21:11 go2tencentcloud_x64
2. 模拟分区表损坏
代码语言:javascript
复制
root@BJ-CentOS7 ~ # umount /dev/vdb1; dd if=/dev/zero of=/dev/vdb bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000377549 秒,1.4 MB/秒
root@BJ-CentOS7 ~ # lsblk /dev/vdb 
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb  253:16   0  10G  0 disk 
root@BJ-CentOS7 ~ # mount /dev/vdb /vdb1
mount: 文件系统类型错误、选项错误、/dev/vdb 上有坏超级块、
       缺少代码页或助手程序,或其他错误
       有些情况下在 syslog 中可以找到一些有用信息- 请尝试
       dmesg | tail  这样的命令看看。
3. 修复分区表
代码语言:javascript
复制
root@BJ-CentOS7 ~ # fdisk /dev/vdb 
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):
将使用默认值 20971519
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/vdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x41c882ec
   设备 Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    20971519    10484736   83  Linux
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
4. 挂载验证
代码语言:javascript
复制
root@BJ-CentOS7 ~ # mount /dev/vdb1 /vdb1; ll -h /vdb1/
总用量 7.1M
-rw------- 1 root root 1.7K 12月  7 22:48 1.key
-rw-r--r-- 1 root root   45 12月  7 16:24 1.sh
-rw-r--r-- 1 root root    5 12月  7 16:24 1.txt
-rw-r--r-- 1 root root 7.1M 12月 27 21:11 go2tencentcloud_x64

场景二:

磁盘空间分为多个分区使用
1. 创建2个分区 > 挂载分区 > 写入数据
代码语言:javascript
复制
root@BJ-CentOS7 ~ # fdisk -l /dev/vdb 
磁盘 /dev/vdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x41c882ec
   设备 Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    12584959     6291456   83  Linux
/dev/vdb2        12584960    20971519     4193280   83  Linux
root@BJ-CentOS7 ~ # lsblk /dev/vdb
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb    253:16   0  10G  0 disk 
├─vdb1 253:17   0   6G  0 part /vdb1
└─vdb2 253:18   0   4G  0 part /vdb2
root@BJ-CentOS7 ~ # ll -h /vdb1 /vdb2
/vdb1:
总用量 7.1M
drwx------ 2 root root  16K 12月 30 18:41 lost+found
-rw-r--r-- 1 root root 7.1M 1月   1 17:23 o2tencentcloud_x64_1
-rw-r--r-- 1 root root    6 1月   1 17:24 test1
/vdb2:
总用量 7.1M
drwx------ 2 root root  16K 12月 30 18:41 lost+found
-rw-r--r-- 1 root root 7.1M 1月   1 17:23 o2tencentcloud_x64_2
-rw-r--r-- 1 root root    6 1月   1 17:24 test2
2. 模拟分区表损坏

注:先备份一份分区表内容,损坏分区表后磁盘没有分区了,无法正常挂载使用

代码语言:javascript
复制
root@BJ-CentOS7 ~ # dd if=/dev/vdb of=./vdbmbr.bak bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000157049 秒,3.3 MB/秒
root@BJ-CentOS7 ~ # umount /dev/vdb1 /dev/vdb2; dd if=/dev/zero of=/dev/vdb bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000431802 秒,1.2 MB/秒
root@BJ-CentOS7 ~ # lsblk /dev/vdb 
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb  253:16   0  10G  0 disk 
3. 修复分区表

方法1: 使用之前备份的分区表还原恢复受损/不小心删除的分区表

代码语言:javascript
复制
root@BJ-CentOS7 ~ # dd if=./vdbmbr.bak of=/dev/vdb bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000423296 秒,1.2 MB/秒
root@BJ-CentOS7 ~ # lsblk /dev/vdb
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb    253:16   0  10G  0 disk 
├─vdb1 253:17   0   6G  0 part 
└─vdb2 253:18   0   4G  0 part 
root@BJ-CentOS7 ~ # mount /dev/vdb1 /vdb1; mount /dev/vdb2 /vdb2
root@BJ-CentOS7 ~ # df -hT | grep vdb
/dev/vdb1      ext4      5.8G   32M  5.5G    1% /vdb1
/dev/vdb2      ext4      3.9G   24M  3.7G    1% /vdb2
root@BJ-CentOS7 ~ # ll -h /vdb1 /vdb2
/vdb1:
总用量 7.1M
drwx------ 2 root root  16K 12月 30 18:41 lost+found
-rw-r--r-- 1 root root 7.1M 1月   1 17:23 o2tencentcloud_x64_1
-rw-r--r-- 1 root root    6 1月   1 17:24 test1
/vdb2:
总用量 7.1M
drwx------ 2 root root  16K 12月 30 18:41 lost+found
-rw-r--r-- 1 root root 7.1M 1月   1 17:23 o2tencentcloud_x64_2
-rw-r--r-- 1 root root    6 1月   1 17:24 test2

方法2: 重建分区表 ,前提是知道之前分区的扇区起始位置,可以重新分区时手动指定扇区起始位置,重建完分区验证挂载没问题,分区表损坏前存入的数据也存在 注意: 创建分区1、分区2时扇区起始位置需要指定为和原来分区一致

代码语言:javascript
复制
root@BJ-CentOS7 ~ # fdisk /dev/vdb 
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):12584959
分区 1 已设置为 Linux 类型,大小设为 6 GiB
命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
分区号 (2-4,默认 2):2
起始 扇区 (12584960-20971519,默认为 12584960):
将使用默认值 12584960
Last 扇区, +扇区 or +size{K,M,G} (12584960-20971519,默认为 20971519):20971519
分区 2 已设置为 Linux 类型,大小设为 4 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/vdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x16e5f126
   设备 Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    12584959     6291456   83  Linux
/dev/vdb2        12584960    20971519     4193280   83  Linux
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
root@BJ-CentOS7 ~ # mount /dev/vdb1 /vdb1; mount /dev/vdb2 /vdb2
root@BJ-CentOS7 ~ # df -hT | grep vdb
/dev/vdb1      ext4      5.8G   32M  5.5G    1% /vdb1
/dev/vdb2      ext4      3.9G   24M  3.7G    1% /vdb2
root@BJ-CentOS7 ~ # ll -h /vdb1 /vdb2
/vdb1:
总用量 7.1M
drwx------ 2 root root  16K 12月 30 18:41 lost+found
-rw-r--r-- 1 root root 7.1M 1月   1 17:23 o2tencentcloud_x64_1
-rw-r--r-- 1 root root    6 1月   1 17:24 test1
/vdb2:
总用量 7.1M
drwx------ 2 root root  16K 12月 30 18:41 lost+found
-rw-r--r-- 1 root root 7.1M 1月   1 17:23 o2tencentcloud_x64_2
-rw-r--r-- 1 root root    6 1月   1 17:24 test2
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • linux 下 MBR 方式分区后分区表损坏/误删的修复/恢复:
  • 场景一:
    • 磁盘整个空间分为一个分区使用(没有定义特殊的扇区起始位置)
      • 1. 创建分区 > 挂载分区 > 写入数据
      • 2. 模拟分区表损坏
      • 3. 修复分区表
      • 4. 挂载验证
  • 场景二:
    • 磁盘空间分为多个分区使用
      • 1. 创建2个分区 > 挂载分区 > 写入数据
      • 2. 模拟分区表损坏
      • 3. 修复分区表
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档