专栏首页云服务笔记linux下MBR分区表修复/恢复

linux下MBR分区表修复/恢复

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. 创建分区 > 挂载分区 > 写入数据
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. 模拟分区表损坏
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. 修复分区表
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. 挂载验证
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个分区 > 挂载分区 > 写入数据
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. 模拟分区表损坏

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

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: 使用之前备份的分区表还原恢复受损/不小心删除的分区表

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时扇区起始位置需要指定为和原来分区一致

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 宝塔面板开启SSL并自定义证书

    使用宝塔面板,后台选择开启面板SSL时,默认为自签证书,也可以选择 Let's Encrypt 证书

    大大大黑白格子
  • nslookup: isc_socket_bind: address in use

    进一步确认发现系统中存在过多JAVA进程的UDP会话,系统可用内存不足,新会话无法创建

    大大大黑白格子
  • nslookup: isc_socket_bind: address in use

    问题现象: ping IP 提示 connect: Resource temporarily unavailable ping 域名(如baidu.com)提示...

    大大大黑白格子
  • Cephfs的快照功能

    Cephfs的快照功能在官网都很少提及,因为即使开发了很多年,但是由于cephfs的复杂性,功能一直没能达到稳定,这里,只是介绍一下这个功能,怎么使用,并且建议...

    用户2772802
  • linux基础命令4

    创建文件夹 # mkdir note # ll -d note/ drwxr-xr-x. 2 root root 4096 Feb 22 15:53 note...

    零月
  • 快速学习-Linux root密码丢失的解决办法

    和UNIX系统相同,Linux超级用户root拥有系统的最高权限。当由于用户的疏忽,遗忘了root 密码,或者系统受到黑客的入侵,无法用root 账号登录系统时...

    cwl_java
  • leetcode: 110. Balanced Binary Tree

    JNingWei
  • LeetCode 117. 填充每个节点的下一个右侧节点指针 II(递归&循环)

    填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。

    Michael阿明
  • 如何避免Cephfs被完全毁掉

    一套系统的最低要求是可恢复,也就是数据不丢失,但是在各种各样的原因下,整套系统都有被毁掉的可能,一直以来有个观点就是存储是需要两套的,一般情况下很难实现,但是如...

    用户2772802
  • fdisk管理分区

    格式化:centos7 : 文件系统:XFS centos6: 文件系统:ext4

    致码DevOps

扫码关注云+社区

领取腾讯云代金券