对于现在的系统来说,分区的类型千百种,但对于磁盘分区的layout来说,最常接触的只是三种而已: MBR(Master Boot Record), GPT(Globe Partition Table)和Apple Partition(Mixed分区)。

MBR分区表:  磁盘上最重要的数据结构,其中包含小段引导代码,磁盘信息,分区表等。在MBR的尾部有一个2-byte字段标记签名或分区结构的结束,总标记为0x55AA。

GUID分区表:对于GPT磁盘采用带有主备分区表结构的GUID分区表。这个结构分别保存在磁盘开头和结尾的部分。相比MBR采用扇区Sector来识别的方法,GPT采用logical Block Address(LBA)来识别。Protective MBR:  在GPT磁盘中,LBA 0的位置存放着第一个结构Protective MBR,紧跟着,在LBA 1的位置存放这主GPT头。随后是GUID的分区Entry信息。

MBR和GPT分区格式对比图

Apple分区表: Apple Partition Map (APM)是苹果计算机上用来定义磁盘分区的数据结构,它引用了Logical Block的概念,通常512 bytes定义为一个Block,第一个Block中存放了苹果特有的Block0结构。这种分区结构主要是在DOS分区的复杂性和BSD分区的数量限制中的一种折衷方案。苹果分区表能描述任意数量的分区,以及后续扇区的数据结构。

APPLE分区表结构

Protective MBR

在GPT分区表的最开头(LBA0),处于兼容性考虑仍然存储了一份传统的MBR,用来防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫做叫做保护MBR。在支持从GPT启动的操作系统中,这里也用于存储第一阶段的启动代码。在这个MBR中,只有一个标识为0xEE的分区,以此来表示这块硬盘使用GPT分区表。不能识别GPT硬盘的操作系统通常会识别出一个未知类型的分区,并且拒绝对硬盘进行操作,除非用户特别要求删除这个分区,这就避免了意外删除分区的危险。另外,能够识别GPT分区表的操作系统会检查保护MBR中的分区表,如果分区类型不是0xEE或者MBR分区表中有多个项,也会拒绝对硬盘进行操作。

Protective MBR

在使用MBR/GPT混合分区表的硬盘中,这部分存储了GPT分区表的一部分分区(通常是前四个分区),可以使不支持从GPT启动的操作系统从这个MBR启动,启动后只能操作MBR分区表中的分区。

MBR的分区表结构

MBR分区表是一个64-byte的数据结构,用来识别磁盘分区类型和位置。每个分区表项都是16bytes,最多4个分区表。每个分区表项在开始扇区的位置是预定的。

Partition 1   0x01BE   (446)

Partition 2   0x01CE   (462)

Partition 3   0x01DE   (478)

Partition 4   0x01EE   (494)

MBR分区表

GPT的分区表结构:

GPT分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量。分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小(位置总是在LBA 1)以及备份分区表头和分区表的位置和大小(在硬盘的最后)。它还储存着它本身和分区表的CRC32校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错了,可以使用软件从硬盘最后的备份GPT中恢复整个分区表,如果备份GPT也校验错误,硬盘将不可使用。所以GPT硬盘的分区表不可以直接使用16进制编辑器修改。

主分区表和备份分区表的头分别位于硬盘的第二个扇区(LBA 1)以及硬盘的最后一个扇区。备份分区表头中的信息是关于备份分区表的。

GPT Header Structure-Data

GPT Header Structure

GPT分区头信息依然占用一个完整的Block,其中在90-512未定义的字节都为预留。

对于分区表项,在64位系统的机器上,最多可以创建128个分区,即分区表中保留了128个项,其中每个都是128字节。(EFI标准要求分区表最小要有16,384字节,即128个分区项的大小)

GPT Partition Entry   Example

GPT Partition Entry

对于Apple系统需要注意:不要总是假定块大小总是512bytes。很多固态硬盘可能包含1024字节的LBAs,而MO驱动器采用2048-bytes的Sectore(MO通常都不分区)。

因此,对于分区表的操作,都是基于Block来处理。

LBA0   Protective MBR

LBA1   GPT Header

LBA2-33 GPT Partition Entry  (一个LBA里包含4个分区表信息,512/128=4)。

注意:在对磁盘分区的规范中,不是从字节或者Sector。而是LBA角度进行了定义,也就是说即使有磁盘格式并不是512的block,而是1024或者4096的,但是存放分区表的位置依然是34个Block。

备份方法:

根据以上对磁盘分区的理解,对于GPT格式的磁盘,备份及恢复可以采用以下方式(未完全验证)

1、备份分区表信息

sudo fdisk -l >hda.txt  #分区表信息重定向输出到文件中

parted  p

2、备份分区表

a, 备份Protective MBR

linux#dd if=/dev/sda of=gpt-mbr bs=512 count=1  #输入文件/dev/sda, 输出文件mbr(自己定义),输入(出)块大小512字节,复制一次,由于mbr是512个字节,所以读取写到mbr文件中了

1+0 records in

1+0 records out

512 bytes (512 B) copied,4.0728e-05 秒,12.6 MB/秒

b,备份完整的GPT分区表(含Protective MBR, GPT头,以及分区表)

linux#dd if=/dev/sda of=gpt-partition bs=512 count=34

c,  仅备份GPT头和GPT分区

linux#dd if=/dev/sda of=gpt-partition bs=512 skip=1 count=33

3、恢复分区表

a, 恢复Protective MBR的分区信息

#dd if=gpt-mbr of=/dev/sda bs=1 skip=446 count=66  #输入文件mbr,输出 /dev/sda ,块大小1个字节,输入跳过446字节,恢复66个字节,看来恢复的只有66个字节

如果逻辑分区都没有了,则用fdisk 照着hda.txt的信息重分一下就行了。

b, 恢复完整的Protective MBR

(在Mac OSX中对磁盘进行抹盘操作后(通常会创建一个128M的无数据区,或者一个Recovery HD区),非常容易将磁盘修改为混合磁盘模式,后续的Windows系统将无法正确识别磁盘,导致系统无法启动)

#dd if=gpt-mbr of=/dev/sda bs=512 count=1

c, 恢复完整的GPT分区表信息

#dd if=gpt--partition of=/dev/sda bs=512 count=34

d, 恢复单独的GPT分区信息(感觉意义不大)

#dd if=gpt-partition of=/dev/sda bs=512 skip=1 seek=1 count=33 (跳过备份表的一个bs, 再跳过sda的第一个bs然后再恢复数据)

另外有采用更为精致的脚本对分区进行恢复的方式(豆瓣不支持附件,就不对脚本进行上传了)。

1、首先下载附件,将gpt.surgeon.py文件放在任意目录下。

2、打开“终端”

3、输入:cd xxxx  (这里的xxxx是刚才文件的存放目录,如果你放在桌面那么就直接:cd desktop)

4、输入:chmod +x gpt_surgeon.py

5、输入:sudo ./gpt_surgeon.py list /dev/disk1  (disk1是需要修复的磁盘,可以在磁盘工具中看到这个标识)

6、输入管理员密码后看到:

Read MBR and GPT from /dev/disk1.

partition 0:

type: EFI System

name: u'EFI System Partition'

flags: 0x00000000

partition 1:

type: Microsoft Basic Data

name: u'\u672a\u547d\u540d 1'

flags: 0x00000000

7、可以看到磁盘所有可以识别的分区信息,找到你要恢复的分区表的编号。

6、输入:sudo ./gpt_surgeon.py repair /dev/disk1 1 (disk1后面的1就是需要修复的分区表的编号)

7、完成。

android磁盘分区格式,转:磁盘分区表格式之android分区GPT相关推荐

  1. oracle增加分区时报ora14036,增加分区表2009年的分区报ORA-14074错误

    各位老师,我现在遇到了一个问题,我们单位有一张表需要扩充2009年的分区,我的操作步骤是: 1.添加了存放2009年数据和索引的表空间,TBS_DAT_PAR_05和TBS_IDX_PAR_05. 2 ...

  2. uefi+guid分区与legacy+mbr分区_硬盘分区表格式GUID和MBR知识普及

    我们的电脑硬盘分区格式一共有两种,一种是GUID(GPT),一种是MBR. 啥是硬盘分区呢?举个例子你就明白了,很多人去买电脑的时候,比如你买的电脑只有一块硬盘,店家就会给你分区,把这一块硬盘分成好几 ...

  3. MBR分区表格式 - 简明概述

    目前硬盘主要有MBR和GPT分区两种格式,前者是Windows XP之前时代主流的分区格式,后者则是现在Windows 8之后主流的分区格式.(Windows 7需要通过一些手段能实现支持GPT,而W ...

  4. linux无损转换磁盘成gpt分区,Linux下数据无损动态修改MBR分区表格式为GPT

    个人博客站点:https://www.hiecho.cn 1.简介 腾讯云官网中有一篇帮助文档"扩容Linux文件系统,https://www.qcloud.com/document/pro ...

  5. 硬盘突然变raw格式_磁盘分区变成RAW格式怎么办?手把手教你解决方法

    分区变成RAW格式怎么办? 移动硬盘.U盘.硬盘.SD卡都是很常用的数据存储设备,用户在平时使用这些设备的时候难免会因各种原因而遇到一些问题,例如分区变成RAW格式.无法访问.提示格式化.误删除等.遇 ...

  6. 计算机硬盘分区类型,常见磁盘分区格式的区别是什么?

    常见磁盘分区格式的区别是什么?就目前电脑技术的发展,电脑磁盘应该包括:电脑硬盘.U盘.手机内存卡.MP3,MP4等存储介质.而且这些硬件的储存空间越来越大,比如目前有些U盘的储存容量已超过原先奔三时代 ...

  7. 初始化磁盘选哪个格式 初始化磁盘分区形式选什么好

    在初始化磁盘之前,我们应该先明确什么时候需要初始化磁盘,通常是在电脑安装了SSD固态硬盘,计算机无法正常读取该固态硬盘时.或者需要腾空移动磁盘,以做它用时.那么初始化磁盘时,有哪些格式呢?如今主流的是 ...

  8. 萌新小白详细U盘安装系统笔记 //重点——windows无法安装到这个磁盘,选中的磁盘采用GPT分区格式这个问题

    今天帮同学安装系统,结果遇到这个问题,和大家分享一下,希望大家不要重蹈我的覆辙(第一次遇到真滴累) 1.刻录系统 首先格式化u盘为ntfs格式,   //额,同学电脑只有这个和exfat格式 下载-- ...

  9. 打开虚拟机磁盘类型无效_[图文]VMWARE虚拟机如何打开.VMDK格式的磁盘映像

    最近在折腾安卓虚拟机时使用Android x86项目组提供的镜像,架构问题本身无法直接在电脑安装安卓系统. 而Android x86项目则是国外团队通过源代码进行移植的版本,虽然不能同步更新但现在也倒 ...

  10. GPT格式的磁盘扩容

    GPT格式的系统盘已经满了,现在需要扩充系统盘 1.怎么查看是不是GPT格式:fdisk -l 2.查看磁盘挂载分区情况 lsblk 2.使用parted对分区进行操作 parted /dev/sda ...

最新文章

  1. windows根据端口号找进程
  2. c++类名字查找与类的作用域
  3. Python字符串介绍
  4. c++生成光栅条纹程序_共享屋:一文让你认识光栅尺和编码器
  5. 三大缓存框架(Ehcache+Memcache+Redis)基础
  6. 在线html链接提取工具
  7. 基于java社区疫情防控管理系统(java毕业设计)
  8. 校招软件测试面经篇二(国企、银行、运营商等)
  9. 天猫行业资深店长认证
  10. Java中swing修改左上角的图标
  11. Windows网上邻居 授权访问设置
  12. java操作word转换pdf加水印
  13. 服务端性能测试入门指南
  14. static关键字的用法
  15. impala与hive标准差函数的差异
  16. 全民一起玩python提高篇,全民一起玩Python 基础篇+提高篇+笔记2019年
  17. java毕业生设计大学生兼职平台计算机源码+系统+mysql+调试部署+lw
  18. Linq的Distinct方法
  19. iS-RPA2022.1.0 | 艺赛旗RPA新版本正式发布
  20. oracle数据库的数据日增量怎么统计

热门文章

  1. oa系统怎么安装服务器配置,OA系统安装配置及维护手册-金蝶在线服务中心.DOC
  2. 如何自学软件编程?零基础自学编程入门指南
  3. 磁力计的基本工作原理
  4. 单片机阵列式键盘实验C语言,单片机4×4矩阵式键盘的课程设计
  5. MyBatis防止SQL注入的方法
  6. 防止sql拼接的Java方法_JAVA程序防止SQL注入的方法
  7. 线性代数学习之行列式
  8. php如何使用代码生成pdf文件,教你利用PHP生成PDF文件
  9. 纯php员工管理,php企业员工信息管理系统
  10. 统计通话次数和时间的软件_通话时间统计app下载-通话时间统计v2.5 安卓版-腾牛安卓网...