精华内容
下载资源
问答
  • GPT分区一键安装.exe

    2021-03-01 08:59:43
    GPT分区一键安装.exe
  • 目前磁盘分区有两种形式:GPT分区和MBR分区。MBR相比而言比较常见,大多数磁盘都是采用这种分区形式。MBR分区和GPT分区的区别在于:MBR最多只支持4个主分区,GPT能够支持128个主分区。然而GPT分区形式在重装系统需要...
  • UEFI下使用Ghost一键安装还原GPT分区系统方法
  • GPT分区激活工具

    2016-01-24 10:44:53
    GPT分区激活工具
  • 支持多硬盘下的系统备份还原。可以系统下自己备份ghost。支持xp。win7,win8,win10.使用方法:直接解压到c盘根目录。如果是gpt分区,第一次跳出来是否重启系统,请点退出,即会开始备份c盘。
  • SGI映像总裁是一个电脑系统一键备份还原软件,有系统备份还原、拓展设置、分区克隆、磁盘克隆、系统安装等功能。可以在PE下使用
  • GPT分区安装Windows

    2020-11-22 12:00:37
    说明: 1、GPT分区是没法装Windows系统的,使用该分区工具进行磁盘分区 2、压缩包内包含系统磁盘分区工具和操作指导
  • 将从硬盘内部结构开始讲解文件系统组成。最后,将介绍软硬链接的创建。
  • Android Parted GPT分区工具包
  • 让xp 32位系统支持gpt分区硬盘
  • 删掉UEFI的GPT分区

    2014-03-25 18:16:15
    首先用U盘PE启动,备份出分区里的重要数据,如果没有数据需要保留可以忽略这一步。用win7的U盘映像启动机器,到了选择安装分区的步骤...然后输入covert mbr即可将gpt转换成mbr。最后退出命令行,重启后正常安装系统即可
  • xp系统支持gpt分区硬盘补丁
  • GPT 分区详解

    千次阅读 2021-01-07 17:57:56
    它的作用是阻止不能识别GPT分区的磁盘工具试图对其进行分区或格式化等操作,所以该扇区被称为“保护MBR”。实际上,EFI根本不使用这个分区表。 EFI部分 EFI部分又可以分为4个区域:EFI信息区(GPT头)、分区表、...

    保护MBR

    保护MBR包含一个DOS分区表(LBA0),只包含一个类型值为0xEE的分区项,在小于2TB的磁盘上,大小为整个磁盘;在更大的磁盘上,它的大小固定为2TB。它的作用是阻止不能识别GPT分区的磁盘工具试图对其进行分区或格式化等操作,所以该扇区被称为“保护MBR”。实际上,EFI根本不使用这个分区表。

    EFI部分

    EFI部分又可以分为4个区域:EFI信息区(GPT头)、分区表、GPT分区、备份区域。

    EFI信息区(GPT头)

    起始于磁盘的LBA1,通常也只占用这个单一扇区。其作用是定义分区表的位置和大小。GPT头还包含头和分区表的校验和,这样就可以及时发现错误。

    分区表

    分区表区域包含分区表项。这个区域由GPT头定义,一般占用磁盘LBA2~LBA33扇区。分区表中的每个分区项由起始地址、结束地址、类型值、名字、属性标志、GUID值组成。分区表建立后,128位的GUID对系统来说是唯一的。

    GPT分区

    最大的区域,由分配给分区的扇区组成。这个区域的起始和结束地址由GPT分区表定义。

    备份区

    备份区域位于磁盘的尾部,包含GPT头和分区表的备份。它占用GPT结束扇区和EFI结束扇区之间的33个扇区。其中最后一个扇区用来备份1号扇区的EFI信息,其余的32个扇区用来备份LBA2~LBA33扇区的分区表。

    EFI信息区数据结构

    EFI信息区位于磁盘的1号扇区(LBA1),也称为GPT头。其具体结构如下表所示

    EFI信息区结构
    相对字节偏移量
    (十六进制)
    字节数说明[整数皆以little endian方式表示]
    00~078GPT头签名“45 46 49 20 50 41 52 54”(ASCII码为“EFI PART”)
    08~0B4版本号,目前是1.0版,其值是“00 00 01 00”
    0C~0F4GPT头的大小(字节数),通常为“5C 00 00 00”(0x5C),也就是92字节。
    10~134GPT头CRC校验和(计算时把这个字段本身看做零值)
    14~174保留,必须为“00 00 00 00”
    18~1F8EFI信息区(GPT头)的起始扇区号,通常为“01 00 00 00 00 00 00 00”,也就是LBA1。
    20~278EFI信息区(GPT头)备份位置的扇区号,也就是EFI区域结束扇区号。通常是整个磁盘最末一个扇区。
    28~2F8GPT分区区域的起始扇区号,通常为“22 00 00 00 00 00 00 00”(0x22),也即是LBA34。
    30~378GPT分区区域的结束扇区号,通常是倒数第34扇区。
    38~4716磁盘GUID(全球唯一标识符,与UUID是同义词)
    48~4F8分区表起始扇区号,通常为“02 00 00 00 00 00 00 00”(0x02),也就是LBA2。
    50~534分区表总项数,通常限定为“80 00 00 00”(0x80),也就是128个。
    54~574每个分区表项占用字节数,通常限定为“80 00 00 00”(0x80),也就是128字节。
    58~5B4分区表CRC校验和
    5C~**保留,通常是全零填充

    分区项

    分区项结构
    相对字节偏移量
    (十六进制)
    字节数说明[整数皆以little endian方式表示]
    00~0F16用GUID表示的分区类型
    10~1F16用GUID表示的分区唯一标示符
    20~278该分区的起始扇区,用LBA值表示。
    28~2F8该分区的结束扇区(包含),用LBA值表示,通常是奇数。
    30~378该分区的属性标志
    38~7F72UTF-16LE编码的人类可读的分区名称,最大32个字符。

    注意,扇区尺寸不能假定为512字节,也就是说,一个扇区内可能存放4个以上的分区项,也可能只存放一个分区项的一部分。也就是说,除了头两个扇区(LBA 0 和 LBA 1)之外,GPT规范仅定义了数据结构的尺寸,而不关心使用多少个扇区进行存储。

    分区类型
    相关操作系统GUID[little endian]含义
    None00000000-0000-0000-0000-000000000000未使用
    None024DEE41-33E7-11D3-9D69-0008C781F39FMBR分区表
    NoneC12A7328-F81F-11D2-BA4B-00A0C93EC93BEFI系统分区[EFI System partition (ESP)],必须是VFAT格式
    NoneBC13C2FF-59E6-4262-A352-B275FD6F7172扩展boot分区,必须是VFAT格式
    None21686148-6449-6E6F-744E-656564454649BIOS引导分区,其对应的ASCII字符串是"Hah!IdontNeedEFI"。
    NoneD3BFE2DE-3DAF-11DF-BA40-E3A556D89593Intel Fast Flash (iFFS) partition (for Intel Rapid Start technology)
    WindowsE3C9E316-0B5C-4DB8-817D-F92DF00215AE微软保留分区
    WindowsEBD0A0A2-B9E5-4433-87C0-68B6B72699C7基本数据分区
    WindowsDE94BBA4-06D1-4D40-A16A-BFD50179D6ACWindows恢复环境
    Linux0FC63DAF-8483-4772-8E79-3D69D8477DE4数据分区。Linux曾经使用和Windows基本数据分区相同的GUID。
    这个新的GUID是由 GPT fdisk 和 GNU Parted 开发者根据Linux传统的"8300"分区代码发明的。
    Linux44479540-F297-41B2-9AF7-D131D5F0458Ax86根分区 (/) 这是systemd的发明,可用于无fstab时的自动挂载
    Linux4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709x86-64根分区 (/) 这是systemd的发明,可用于无fstab时的自动挂载
    Linux69DAD710-2CE4-4E3C-B16C-21A1D49ABED3ARM32根分区 (/) 这是systemd的发明,可用于无fstab时的自动挂载
    LinuxB921B045-1DF0-41C3-AF44-4C6F280D3FAEAArch64根分区 (/) 这是systemd的发明,可用于无fstab时的自动挂载
    Linux3B8F8425-20E0-4F3B-907F-1A25A76F98E8服务器数据分区(/srv) 这是systemd的发明,可用于无fstab时的自动挂载
    Linux933AC7E1-2EB4-4F13-B844-0E14E2AEF915HOME分区 (/home) 这是systemd的发明,可用于无fstab时的自动挂载
    Linux0657FD6D-A4AB-43C4-84E5-0933C84B4F4F交换分区(swap) 不是systemd的发明,但同样可用于无fstab时的自动挂载
    LinuxA19D880F-05FC-4D3B-A006-743F0F84911ERAID分区
    LinuxE6D6D379-F507-44C2-A23C-238F2A3DF928逻辑卷管理器(LVM)分区
    Linux8DA63339-0007-60C0-C436-083AC8230908保留

    Microsoft还进一步对分区的属性进行了细分:低位4字节表示与分区类型无关的属性,高位4字节表示与分区类型有关的属性。Microsoft目前使用了下列属性:

    分区属性
    Bit解释
    0系统分区(磁盘分区工具必须将此分区保持原样,不得做任何修改)
    1EFI隐藏分区(EFI不可见分区)
    2传统的BIOS的可引导分区标志
    60只读
    62隐藏
    63不自动挂载,也就是不自动分配盘符
    展开全文
  • RK3399 GPT分区

    2021-01-22 17:22:39
    RK3399 GPT分区前言一、RK3399烧写分区二、GPT分区1. MBR分区2. GPT分区总结参考资料 前言 之前学习s3c2440时,分区信息是保存在uboot的环境变量中。通过uboot的内核命令行给MTD层传递MTD分区信息, 内核读取到的分区...

    前言

    之前学习s3c2440时,分区信息是保存在uboot的环境变量中。通过uboot的内核命令行给MTD层传递MTD分区信息, 内核读取到的分区信息始终和u-boot中的保持一致。

    如: s3c2440分区信息

    /* uboot */
    $printenv
    bootargs=console=ttySAC0 root=/dev/mtdblock3 rootfstype=jffs2 mtdparts=nand_flash:128k(u-boot)ro,64k(u-boot envs),3m(kernel),30m(root.jffs2),30m(root.yaffs)
    
    /* kernel*/
    $cat /proc/cmdline
    console=ttySAC0 root=/dev/mtdblock3 rootfstype=jffs2 mtdparts=nand_flash:128k(u-boot)ro,64k(u-boot envs),3m(kernel),30m(root.jffs2),30m(root.yaffs)
    

    查看了RK3399的 uboot 环境变量、cmdline、dts,没有发现分区信息

    /* uboot */
    => printenv 
    bootargs=storagemedia=emmc androidboot.storagemedia=emmc androidboot.mode=normal 
    
    /* kernel */
    cat /proc/cmdline 
    storagemedia=emmc androidboot.storagemedia=emmc androidboot.mode=normal  androidboot.verifiedbootstate=orange androidboot.slot_suffix= androidboot.serialno=12f68f4f2233d049  rw rootwait earlycon=uart8250,mmio32,0xff1a0000 swiotlb=1 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rootfstype=ext4 coherent_pool=1m
    
    /* dts */
    chosen {
    	bootargs = "earlycon=uart8250,mmio32,0xff1a0000 swiotlb=1 console=ttyFIQ0 rw root=PARTUUID=614e0000-0000 rootfstype=ext4 rootwait coherent_pool=1m";
    };
    

    通过fdisk发现了一些蛛丝马迹,看到了分区信息。并且发现了一些眼熟的单词:GPT 和 MBR。装过系统的人,应该不陌生。

    # fdisk -l
    Found valid GPT with protective MBR; using GPT
    
    Disk /dev/mmcblk0: 30535680 sectors, 2622M
    Logical sector size: 512
    Disk identifier (GUID): 7d3a0000-0000-4f4c-8000-4940000036c4
    Partition table holds up to 128 entries
    First usable sector is 34, last usable sector is 30535646
    
    Number  Start (sector)    End (sector)  Size Name
         1           16384           24575 4096K uboot
         2           24576           32767 4096K trust
         3           40960          106495 32.0M boot
         4          172032          237567 32.0M backup
         5          368640        30535646 14.3G rootfs
    Disk /dev/mmcblk0boot1: 4 MB, 4194304 bytes, 8192 sectors
    128 cylinders, 4 heads, 16 sectors/track
    Units: cylinders of 64 * 512 = 32768 bytes
    
    Disk /dev/mmcblk0boot1 doesn't contain a valid partition table
    Disk /dev/mmcblk0boot0: 4 MB, 4194304 bytes, 8192 sectors
    128 cylinders, 4 heads, 16 sectors/track
    Units: cylinders of 64 * 512 = 32768 bytes
    
    Disk /dev/mmcblk0boot0 doesn't contain a valid partition table
    

    一、RK3399烧写分区

    1. 将RK3399的升级包update.img解包后,发现有 parameter.txt 一个文件,内容如下:
    FIRMWARE_VER: 8.1
    MACHINE_MODEL: RK3399
    MACHINE_ID: 007
    MANUFACTURER: RK3399
    MAGIC: 0x5041524B
    ATAG: 0x00200800
    MACHINE: 3399
    CHECK_MASK: 0x80
    PWR_HLD: 0,0,A,0,1
    TYPE: GPT
    CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(trust),0x00010000@0x0000a000(boot),0x00010000@0x0002a000(backup),-@0x0005a000(rootfs:grow)
    uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
    

    发现了熟悉的 CMDLINE,其中的确包含了分区信息。既然这个文件在升级包中,他应该会被烧入emmc中。
    可以阅读《Rockchip-Parameter-File-Format-Version1.4.pdf》文档,了解parameter.txt 文件中个字段的作用。

    1. 使用AndroidTool.exe烧写工具可以按分区烧写镜像,如下图:
      在这里插入图片描述

    通过上图推断 parameter.txt 会烧写到emmc的0地址处, LOADER 也烧写在0地址出。这2个东西都烧写在emmc的0地址处,这个也太奇怪了吧。
    我猜测:软件中可能设置了一个偏移量,其中的一个没有烧写在0地址处。

    1. 阅读《Rockchip-Parameter-File-Format-Version1.4.pdf》文档,发现了一些奇怪的东西:
      在这里插入图片描述
      这句话的意思是说, parameter.txt 不会烧录存储器件里面?
      还是 parameter.txt 中的 CMDLINE 不会烧录存储器件里面?
      3. 《Rockchip-Parameter-File-Format-Version1.4.pdf》文档,查看这个表格(所有数值的单位是sector,1个sector为512Bytes)

    从上表可以看出: GPT 烧写下 emmc 的 0 地址,LOADER 烧写下 emmc 的 0x40 * 512 地址。可以说明(2)中我的猜测是正确的。

    1. 在uboot中读取emmc中的内容,验证上面的内容。

    (1)读取emmc 0地址,读出的内容与 parameter.txt 不一致。

    => mmc read 0x0a200000 0 0x40
    MMC read: dev # 0, block # 0, count 64 ... 64 blocks read: OK
    => md.b 0x0a200000 0x8000
    

    在这里插入图片描述
    在这里插入图片描述
    (2) 读取 emmc 0x40 * 512 地址的内容,与 MiniLoaderAll.bin 不一致。

    /* 从 0x40 * 512 地址,读取1K */
    => mmc read 0x0a200000 40 2
    MMC read: dev # 0, block # 64, count 2 ... 2 blocks read: OK
    => md.b 0x0a200000 0x8000
    

    (3) 我再测试读取了 emmc 0x4000 * 512 地址出的uboot,读取的内容是一致的。

    结论: 我在uboot下读取emmc的数据是没有问题的,但是 parameter.txt 和 MiniLoaderAll.bin 却不一样,到底是为什么呢?继续往下看。

    百度中也没有找到关于 parameter.txt 烧写位置的详细资料。想到了2点可以继续入手分析的地方。
    (1)在uboot命令行中可以解析到分区信息,所以分析uboot源码,从 part list … 命令入手。大概看了下流程,涉及的函数调用也不少,暂未详细分析。

    => part list mmc 0                                                  
    
    Partition Map for MMC device 0  --   Partition Type: EFI
    
    Part    Start LBA       End LBA         Name
            Attributes
            Type GUID
            Partition GUID
      1     0x00004000      0x00005fff      "uboot"
            attrs:  0x0000000000000000
            type:   3b600000-0000-423e-8000-128b000058ca
            guid:   727b0000-0000-4069-8000-68d500005dea
      2     0x00006000      0x00007fff      "trust"
            attrs:  0x0000000000000000
            type:   bf570000-0000-440f-8000-42dc000079ef
            guid:   ff3c0000-0000-4d3a-8000-5e9c00006be6
      3     0x0000a000      0x00019fff      "boot"
            attrs:  0x0000000000000000
            type:   4f030000-0000-4744-8000-545300000e1e
            guid:   0c240000-0000-4f6a-8000-207e00006722
      4     0x0002a000      0x00039fff      "backup"
            attrs:  0x0000000000000000
            type:   d3460000-0000-4360-8000-37d9000037c0
            guid:   81500000-0000-4f59-8000-166100000c05
      5     0x0005a000      0x01d1efde      "rootfs"
            attrs:  0x0000000000000000
            type:   33770000-0000-401d-8000-505400004c3e
            guid:   614e0000-0000-4b53-8000-1d28000054a9
    

    (2)分区信息中提到了GPT,GPT分区的资料网上一大把,所以考虑从GPT入手继续分析

    二、GPT分区

    1. MBR分区

    MBR磁盘分区是一种使用最为广泛的分区结构,它也被称为DOS分区结构,但它并不仅仅应用于Windows系统平台,也应用于Linux,基于X86的UNIX等系统平台。它位于磁盘的0号扇区(一扇区等于512字节),是一个重要的扇区(简称MBR扇区)。

    MBR扇区由以下四部分组成:
    (1)引导代码:引导代码占MBR分区的前440字节,负责整个系统启动。如果引导代码被破坏,系统将无法启动。
    (2)Windows磁盘签名:占引导代码后面的4字节,是Windows初始化磁盘写入的磁盘标签,如果此标签被破坏,则系统会提示“初始化磁盘”。
    (3)MBR分区表:占Windows磁盘标签后面的64个字节,是整个硬盘的分区表。
    (4)MBR结束标志:占MBR扇区最后2个字节,一直为“55 AA”。

    2. GPT分区

    GPT磁盘分区结构解决了MBR只能分4个主分区的的缺点,理论上说,GPT磁盘分区结构对分区的数量好像是没有限制的。但某些操作系统可能会对此有限制。GPT磁盘分区结构由6部分组成,与MBR对比如下图:
    在这里插入图片描述
    LBA地址和GPT分区结构的对应关系:
    在这里插入图片描述
    其中LBA0表示第一个扇区,占512字节。LBA1表示第二个扇区,以此类推。

    (1)保护MBR
    在GPT分区表的最开头(LBA0),处于兼容性考虑仍然存储了一份传统的MBR,用来防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫做叫做保护MBR。

    在linux系统中直接读取LBA0的数据进行分析:

    # dd if=/dev/mmcblk0 skip=$((0x0)) count=1 | hexdump -C
    00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001c0  00 00 ee 00 00 00 01 00  00 00 ff ff ff ff 00 00  |................|
    000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
    00000200
    

    0x000001c0 - 2 地址是第一个主分区的分区表项开始地址.
    在这个MBR中,只有一个标识为0xEE的分区,以此来表示这块硬盘使用GPT分区表。
    MBR结束标志:占MBR扇区最后2个字节,一直为“55 AA”

    (2)GPT分区表头
    GPT分区表头(也称EFI信息)位于磁盘的1号扇区(LBA1),GPT分区表头会定义分区表的起始位置,分区表的结束位置、每个分区表项的大小、分区表项的个数及分区表的校验等信息。其具体结构如下表所示:

    相对字节偏移量 (十六进制)字节数说明[整数皆以little endian方式表示]
    00~078GPT头签名“45 46 49 20 50 41 52 54”(ASCII码为“EFI PART”)
    08~0B4版本号,目前是1.0版,其值是“00 00 01 00”
    0C~0F4GPT头的大小(字节数),通常为“5C 00 00 00”(0x5C),也就是92字节。
    10~134GPT头CRC校验和(计算时把这个字段本身看做零值)
    14~174保留,必须为“00 00 00 00”
    18~1F8EFI信息区(GPT头)的起始扇区号,通常为“01 00 00 00 00 00 00 00”,也就是LBA1。
    20~278EFI信息区(GPT头)备份位置的扇区号,也就是EFI区域结束扇区号。通常是整个磁盘最末一个扇区。
    28~2F8GPT分区区域的起始扇区号,通常为“22 00 00 00 00 00 00 00”(0x22),也即是LBA34。
    30~378GPT分区区域的结束扇区号,通常是倒数第34扇区。
    38~4716磁盘GUID(全球唯一标识符,与UUID是同义词)
    48~4F8分区表起始扇区号,通常为“02 00 00 00 00 00 00 00”(0x02),也就是LBA2。
    50~534分区表总项数,通常限定为“80 00 00 00”(0x80),也就是128个。
    54~574每个分区表项占用字节数,通常限定为“80 00 00 00”(0x80),也就是128字节。
    58~5B4分区表CRC校验和
    5C~**保留,通常是全零填充

    在linux系统中直接读取LBA1的数据进行分析:

    # dd if=/dev/mmcblk0 skip=$((0x1)) count=1 | hexdump -C
    00000000  45 46 49 20 50 41 52 54  00 00 01 00 5c 00 00 00  |EFI PART....\...|
    00000010  8d 7f 41 a7 00 00 00 00  01 00 00 00 00 00 00 00  |..A.............|
    00000020  ff ef d1 01 00 00 00 00  22 00 00 00 00 00 00 00  |........".......|
    00000030  de ef d1 01 00 00 00 00  00 00 3a 7d 00 00 4c 4f  |..........:}..LO|
    00000040  80 00 49 40 00 00 36 c4  02 00 00 00 00 00 00 00  |..I@..6.........|
    00000050  80 00 00 00 80 00 00 00  5a 07 ba 30 00 00 00 00  |........Z..0....|
    00000060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00000200
    

    a. GPT头的起始扇区号: 01
    b. GPT头的备份位置的扇区号: 0x01d1efff
    c. GPT分区区域的起始扇区号: 0x22,也即是LBA34
    d. GPT分区区域的结束扇区号,通常是倒数第34扇区:0x01d1efde
    e. GUID = 00 00 3a 7d 00 00 4c 4f 80 00 49 40 00 00 36 c4
    f. 分区表起始扇区号:02
    g. 分区表总项数: 128
    h. 每个分区表项占用字节数: 128
    i. 分区表CRC校验和: 5a 07 ba 30

    查看写备份GPT头:

    # dd if=/dev/mmcblk0 skip=$((0x1d1efff)) count=1 | hexdump -C
    00000000  45 46 49 20 50 41 52 54  00 00 01 00 5c 00 00 00  |EFI PART....\...|
    00000010  63 ea 98 31 00 00 00 00  ff ef d1 01 00 00 00 00  |c..1............|
    00000020  01 00 00 00 00 00 00 00  22 00 00 00 00 00 00 00  |........".......|
    00000030  de ef d1 01 00 00 00 00  00 00 3a 7d 00 00 4c 4f  |..........:}..LO|
    00000040  80 00 49 40 00 00 36 c4  df ef d1 01 00 00 00 00  |..I@..6.........|
    00000050  80 00 00 00 80 00 00 00  5a 07 ba 30 00 00 00 00  |........Z..0....|
    00000060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00000200
    

    对比结果:在这里插入图片描述
    a. 10~13Bytes:GPT头CRC校验和不一样,因为两个分区表不一样;
    b. GPT头的起始、备份扇区号互换了,这个没有问题;
    c. 分区表起始扇区号不一样,备份GPT头保存的是备份分区表起始扇区号。

    (3)GPT分区表
    GPT分区表位于磁盘的2-33号扇区(LBA2~32),一共占用32个扇区,能够容纳128个分区表项。每个分区表项大小为128字节。 每个分区表项中记录着分区的起始,结束地址,分区类型的GUID,分区的名字,分区属性和分区GUID。其具体结构如下表所示:

    相对字节偏移量(十六进制)字节数说明[整数皆以little endian方式表示]
    00~0F16用GUID表示的分区类型
    10~1F16用GUID表示的分区唯一标示符
    20~278该分区的起始扇区,用LBA值表示。
    28~2F8该分区的结束扇区(包含),用LBA值表示,通常是奇数。
    30~378该分区的属性标志
    38~7F72UTF-16LE编码的人类可读的分区名称,最大32个字符。

    注意: 扇区尺寸不能假定为512字节,也就是说,一个扇区内可能存放4个以上的分区项,也可能只存放一个分区项的一部分。也就是说,除了头两个扇区(LBA 0 和 LBA 1)之外,GPT规范仅定义了数据结构的尺寸,而不关心使用多少个扇区进行存储。

    在linux系统中直接读取LBA2的数据进行分析:

    #dd if=/dev/mmcblk0 skip=$((0x2)) count=1 | hexdump -C
    00000000  00 00 60 3b 00 00 3e 42  80 00 12 8b 00 00 58 ca  |..`;..>B......X.|
    00000010  00 00 7b 72 00 00 69 40  80 00 68 d5 00 00 5d ea  |..{r..i@..h...].|
    00000020  00 40 00 00 00 00 00 00  ff 5f 00 00 00 00 00 00  |.@......._......|
    00000030  00 00 00 00 00 00 00 00  75 00 62 00 6f 00 6f 00  |........u.b.o.o.|
    00000040  74 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |t...............|
    00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00000080  00 00 57 bf 00 00 0f 44  80 00 42 dc 00 00 79 ef  |..W....D..B...y.|
    00000090  00 00 3c ff 00 00 3a 4d  80 00 5e 9c 00 00 6b e6  |..<...:M..^...k.|
    000000a0  00 60 00 00 00 00 00 00  ff 7f 00 00 00 00 00 00  |.`..............|
    000000b0  00 00 00 00 00 00 00 00  74 00 72 00 75 00 73 00  |........t.r.u.s.|
    000000c0  74 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |t...............|
    000000d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00000100  00 00 03 4f 00 00 44 47  80 00 54 53 00 00 0e 1e  |...O..DG..TS....|
    00000110  00 00 24 0c 00 00 6a 4f  80 00 20 7e 00 00 67 22  |..$...jO.. ~..g"|
    00000120  00 a0 00 00 00 00 00 00  ff 9f 01 00 00 00 00 00  |................|
    00000130  00 00 00 00 00 00 00 00  62 00 6f 00 6f 00 74 00  |........b.o.o.t.|
    00000140  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00000180  00 00 46 d3 00 00 60 43  80 00 37 d9 00 00 37 c0  |..F...`C..7...7.|
    00000190  00 00 50 81 00 00 59 4f  80 00 16 61 00 00 0c 05  |..P...YO...a....|
    000001a0  00 a0 02 00 00 00 00 00  ff 9f 03 00 00 00 00 00  |................|
    000001b0  00 00 00 00 00 00 00 00  62 00 61 00 63 00 6b 00  |........b.a.c.k.|
    000001c0  75 00 70 00 00 00 00 00  00 00 00 00 00 00 00 00  |u.p.............|
    000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00000200
    

    可以粗略的看出,LBA2中有4个分区表,uboot、trust、boot、backup。就其中的第一个分区uboot,进行分析:
    a. GUID分区类型:00 00 60 3b 00 00 3e 42 80 00 12 8b 00 00 58 ca
    b. GUID分区唯一标示符:00 00 7b 72 00 00 69 40 80 00 68 d5 00 00 5d ea
    c. 分区的起始扇区:0x4000
    d. 分区的结束扇区:0x5fff
    e. 分区的属性标志:0x00
    f. 分区名称(UTF-16LE编码):uboot
    uboot分区的起始地址和大小与 parameter.txt 中的定义是一样的。

    查看写备份GPT分区表:

    # dd if=/dev/mmcblk0 skip=$((0x1d1efdf)) count=1 | hexdump -C
    00000000  00 00 60 3b 00 00 3e 42  80 00 12 8b 00 00 58 ca  |..`;..>B......X.|
    00000010  00 00 7b 72 00 00 69 40  80 00 68 d5 00 00 5d ea  |..{r..i@..h...].|
    00000020  00 40 00 00 00 00 00 00  ff 5f 00 00 00 00 00 00  |.@......._......|
    00000030  00 00 00 00 00 00 00 00  75 00 62 00 6f 00 6f 00  |........u.b.o.o.|
    00000040  74 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |t...............|
    00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00000080  00 00 57 bf 00 00 0f 44  80 00 42 dc 00 00 79 ef  |..W....D..B...y.|
    00000090  00 00 3c ff 00 00 3a 4d  80 00 5e 9c 00 00 6b e6  |..<...:M..^...k.|
    000000a0  00 60 00 00 00 00 00 00  ff 7f 00 00 00 00 00 00  |.`..............|
    000000b0  00 00 00 00 00 00 00 00  74 00 72 00 75 00 73 00  |........t.r.u.s.|
    000000c0  74 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |t...............|
    000000d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00000100  00 00 03 4f 00 00 44 47  80 00 54 53 00 00 0e 1e  |...O..DG..TS....|
    00000110  00 00 24 0c 00 00 6a 4f  80 00 20 7e 00 00 67 22  |..$...jO.. ~..g"|
    00000120  00 a0 00 00 00 00 00 00  ff 9f 01 00 00 00 00 00  |................|
    00000130  00 00 00 00 00 00 00 00  62 00 6f 00 6f 00 74 00  |........b.o.o.t.|
    00000140  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00000180  00 00 46 d3 00 00 60 43  80 00 37 d9 00 00 37 c0  |..F...`C..7...7.|
    00000190  00 00 50 81 00 00 59 4f  80 00 16 61 00 00 0c 05  |..P...YO...a....|
    000001a0  00 a0 02 00 00 00 00 00  ff 9f 03 00 00 00 00 00  |................|
    000001b0  00 00 00 00 00 00 00 00  62 00 61 00 63 00 6b 00  |........b.a.c.k.|
    000001c0  75 00 70 00 00 00 00 00  00 00 00 00 00 00 00 00  |u.p.............|
    000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00000200
    

    对比结果:一模一样
    在这里插入图片描述
    (4)分区区域
    uboot分区 : 0x00004000 ~ 0x00005fff
    trust分区 : 0x00006000 ~ 0x00007fff
    boot分区 :0x0000a000 ~ 0x00019fff
    backup分区 :0x0002a000 ~ 0x00039fff
    rootfs分区 :0x0005a000 ~ 0x01d1efde

    (5)备份GPT分区表
    (6)备份GPT分区表头

    总结

    1. 采用GPT分区的方式,不是将 parameter.txt 文件保存在emmc的0地址处,而是将其中的CMDLINE信息解析为标准的GPT分区结构,保存在emmc的0地址处。
    2. 通过上面的分析,GPT分区结构占用了1(MBR)+ 1(GPT Header) + 32(GPT Entry) = 34个扇区,从LBA34~LBA63读取的数据都是0,从LBA64开始有数据,与文档中的)LOADER位置一致,但是为什么读出的数据与MiniLoaderAll.bin不一致,我也不知道,请知道高手指教下,谢谢。

    参考资料

    1. Rockchip-Parameter-File-Format-Version1.4.pdf
    2. GPT 分区详解
    3. GPT分区表的备份与恢复
    展开全文
  • 获取权限 用于获取 gpt 分区表和 mbr 形成目标的工具。 与“/proc/partitions”不同; 直接从物理块中获取分区信息(GPT 表)。
  • GPT分区

    千次阅读 2016-07-27 11:24:50
    GPT的全称是GUID Partition Table,它是一种使用GUID来标示的标准分区表格式。 这种分区表格式是可以用于BIOS系统启动的,因为它保留了MBR分区。...我们接下来看一下GPT分区表的格式: LBA0———–Protect M

    GPT的全称是GUID Partition Table,它是一种使用GUID来标示的标准分区表格式。
    这种分区表格式是可以用于BIOS系统启动的,因为它保留了MBR分区。因此可以作为windows启动盘分区。

    MBR是一个固化的启动程序,一般是在BIOS系统中需要,它是存在于硬盘的第一个扇区,主要作用是加载win操作系统。
    我们接下来看一下GPT分区表的格式:
    LBA0———–Protect MBR
    LBA1———–GPT Header
    LBA2———–Entry1~Entry4
    LBA3———–Entry5~Entry8
    …… ……
    LBA33———Entry125~Entry128

    一个LBA代表一个逻辑块,也就是sector size的另一种说法,大小一般为512B,一个GPT Entry大小为128B。所以一个LBA中存放4个Entry。

    按照spec来说,对于Entry array最小需要16384 byte的空间。对于LBA大小为512的disk来说,LBA0保留为MBR使用,LBA1作为Header,从LBA2开始算起,需要16384/512=32个LBA空间作为Entry Array。所以如上图所示,LBA2~LBA33的区域都是作为Entry Array使用的。那么一个硬盘必须从LBA34之后才能被作为分区的空间来使用。当然我们不一定必须从LBA34开始分区,也可以保留一部分空间作为特殊用途,只要我们分区的起始是在LBA34之后即可。
    一些分区工具,如fdisk,不支持GPT,而gdisk、grub2之类的新工具支持GPT。

    对于传统的MBR分区方案,分区信息直接存储于主引导记录(MBR)中(主引导记录中还存储着系统的引导程序)。在主引导记录中可以支持4个主分区,当然还有方法来支持扩展分区,我们本文不做介绍。可以使用fdisk来分区硬盘或者SD卡,支持MBR格式。

    对于sfdisk,2.26版本以上才支持多种格式,MBR/GPT/SUN/SGI。不过默认是MBR格式的分区方案,如果想采用GPT,需要我们传入参数指定分区方式。

    parted通过参数传入也可以指定分区方式为GPT格式。

    展开全文
  • GPT分区是什么?如何创建GPT分区

    千次阅读 2019-07-08 07:53:31
    GPT分区是一种全新的分区结构,它是硬盘分区表结构的升级标准。MBR的分区结构已经不能满足当下科技发展的需求。它和电脑硬件升级是一个道理,所以说软件和硬件是相辅相成的关系,都需要更新换代。只不过软件的更新...

    GPT分区是一种全新的分区结构,它是硬盘分区表结构的升级标准。MBR的分区结构已经不能满足当下科技发展的需求。它和电脑硬件升级是一个道理,所以说软件和硬件是相辅相成的关系,都需要更新换代。只不过软件的更新换代是在硬件的基础之上开发并更新的。GPT分区也是硬件发展的需要,就像鱼儿离不开水一样。

                      图1、WIN10安装程序下的分区软件

    MBR分区与GPT分区

    GPT(GUID Partition Table)中文名称叫做全局唯一标识分区表。它和MBR分区的区别就是引导方式和分区结构的不同;支持硬盘分区的容量不同,MBR分区结构最高支持到2T硬盘,2T及以上分区就需要GPT分区结构;MBR分区直接存储数据和引导记录,GPT分区的数据和引导记录是分开存储的,并且理论上支持无限量的分区;GPT在win10系统中可以支持128个分区,最高可以管理18EB的磁盘。win10操作系统可以UEFI启动,也可以MBR启动。

                   图2、win10操作系统下的MBR分区结构

    UEFI GPT分区结构与创建GPT分区

    在使用UEFI GPT安装win10操作系统时,操作系统的数据只能安装到GPT分区。它的默认分区结构分为:恢复分区、ESP分区、MSR分区和Windows分区。ESP分区主要用于引导和启动系统,该分区默认为100M,文件格式为FAT32。创建GPT分区有2种方法。一种是用命令行的形式创建,另一种就是在系统安装过程中,以程序的图形界面的方式创建GPT分区,简称分区格式化。命令的方式需要掌握和熟练命令操作,不建议用户使用。建议大家在系统安装界面中,选择要安装win10操作系统的硬盘,单击“新建”,在弹出的分区框中输入分区容量并点击应用。最后,安装界面的软件会自动创建恢复分区、ESP分区、MSR分区和Windows分区并选择Windows分区安装操作系统。

                  图3、win10操作系统下的GPT分区结构

    附1:1G=1024M  1T=1024G  1P=1024T 1E=1024P

    附2:需要在PE或Dos下执行GPT系统分区的备份与还原操作。

    展开全文
  • Linux下的gpt分区

    千次阅读 2020-09-02 23:08:01
    get install parted #Docker docker run cmd.cat/parted parted 方式一: Linux下挂载大于2T的硬盘需要使用parted工具来实现gpt分区,步骤如下: 1、先用fdisk -l 查看硬盘识别情况(一定要看仔细了) 2、使用parted...
  • 有网友需要把磁盘分区GPT 分区调整为 MBR 分区,但是不知道GPT 分区如何调整为 MBR 分区。下面给大家讲讲具体的操作方法。 重要提示1:以下操作会删除硬盘所有数据,请提前做好备份 重要提示2:以下操作需要在PE...
  • 通用多操作系统引导程序 GRUB2.02~RC2 支持MBR/GPT分区 支持FAT/NTFS/EXT/HFS文件系统
  • C语言读取GPT分区信息

    千次阅读 2019-03-10 21:57:50
    文章目录GPT分区结构PMBRGPT HeaderGPT表项源代码结果分析磁盘信息读取PMBR读取GPT Header读取第1个分区表项第2个分区表项第3个分区表项第4个分区表项备份GPT Header备份分区表项 GPT分区结构  GPT的分区格式,比...
  • xp识别GPT分区的磁盘驱动

    热门讨论 2013-11-10 09:31:50
    替换32位XP系统里系统目录下的disk.sys文件后,可以识别GPT引导分区硬盘. 注意,系统备份驱动目录下的SP3.cab里的disk.sys也应替换,否则可能会自动恢复导致不能识别GPT分区
  • GPT分区表的备份与恢复

    千次阅读 2019-10-14 10:23:55
    对于现在的系统来说,分区的类型千百种,但对于磁盘分区的layout来说,最常接触的只是三种而已: MBR(Master Boot Record), GPT(Globe Partition Table)和Apple Partition(Mixed分区)。 MBR分区表: 磁盘上最重要的...
  • linux中GPT分区

    2020-01-19 11:39:03
    指定目标分区表的类型,使用mklabel命令,如果是MBR则为msdos,在fdisk命令中,只支持MBR分区,即分区表类型为msdos,省略了该步骤,在使用parted分区的时候,我们可以使用gpt分区类型,该分区类型突破了主分区最多4...
  • GPT 分区如何调整为 MBR 分区?具体的方法如下: 重要提示1:以下操作会删除硬盘所有数据,请提前做好备份。 重要提示2:以下操作需要在PE系统下进行,制作U盘PE系统的方法:小白u盘启动盘制作教程。 操作步骤: ...
  • UEFI启动+GPT分区

    千次阅读 2019-03-08 12:32:20
    那些之前认为自己已经精通电脑的人,遇到这个东西,忽然发现自己连以前自以为驾轻就熟的分区、装系统都不会了。  尽管UEFI以及GPT从诞生迄今已经十余年了,但是对于绝大多数人来讲它们是完全陌生的,甚...
  • MBR分区和GPT分区区别

    万次阅读 2019-06-07 23:21:24
    MBR分区和GPT分区区别 总结:UEFI是新式的BIOS,legacy是传统BIOS。你在UEFI模式下安装的系统,只能用UEFI模式引导;同理,如果你是在Legacy模式下安装的系统,也只能在legacy模式下进系统。UEFI只支持64为系统且...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,200
精华内容 7,280
关键字:

gpt分区