如何在 Windows 上更改 GPT 分区类型?

如何在 Windows 上更改 GPT 分区类型?

GPT 格式为元数据引入了更多空间。
要在 diskpart 中设置分区类型,可以使用:

DISKPART> create partition msr

或者

DISKPART> create partition efi

或者

DISKPART> create partition primary

但是如何在创建分区后更改类型,例如将主分区更改为 efi?

答案1

DiskPart 实际上可以做到这一点。选择适当的磁盘和分区,然后使用该set id命令。例如,这会将选定的分区更改为 EFI 分区:

set id=c12a7328-f81f-11d2-ba4b-00a0c93ec93b

使用TechNetset id文章并且detail partition,我发现了这些常见的可能值:

  • 恢复:de94bba4-06d1-4d40-a16a-bfd50179d6ac
  • 普通的:ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
  • 电喷:c12a7328-f81f-11d2-ba4b-00a0c93ec93b
  • 预订的:e3c9e316-0b5c-4db8-817d-f92df00215ae

最好查阅特定类型的分区的分区属性(查看健康的计算机),这样设置的标志才有意义。正如您所发现的,gpt attributes设置标志;detail partition显示它们。

危险区域:设置保留类型

TechNet 文档称 DiskPart 不允许你将分区设为 Microsoft 保留分区。这一说法属实,因此你可能需要使用其他工具。如果你真的想要使用 DiskPart,您必须打击 Windows 磁盘管理基础结构,以使其不知道哪些类型是不允许的。危险!我没有在可启动磁盘上测试以下步骤;它们仅供娱乐。请自行承担风险,最好在一次性计算机或虚拟机上进行。

打开一个十六进制编辑器 - 我喜欢 XVI32 - 并打开vdsbas.dll(在 System32 中) 的副本。这是为大多数与磁盘相关的操作提供服务的模块,它负责监管分区类型。对于 Windows 10 x64 附带的版本,Microsoft 保留类型的 GUID 从字节 0x21CD8 开始;您应该搜索十六进制字符串16 E3 C9 E3(小端字节序中的 0xE3C9E316)。在那里翻转一点会让被破坏的副本不知道您正在设置特殊类型。您必须更改原始副本上的安全设置,vdsbas.dll然后 Windows 才会允许您覆盖它。您还必须确保虚拟磁盘服务未运行(在服务中停止它是可以的),否则该文件将被使用。

请注意,此类保留分区不得与卷关联。我不知道 DiskPart 是否有办法以这种方式保留分区。

微软不允许您设置此类型可能有充分的理由,因此如果您决定采用这种方式,请备份驱动器上的所有重要内容。如果您迫切需要这样的分区,最好从官方媒体重新安装/修复 Windows。

答案2

这个问题及其讨论似乎有些混乱,或者至少是术语使用不准确。因此,回顾一下 GPT 数据结构可能会有所帮助,这些数据结构在维基百科上有关 GPT 的文章。(EFI 规范更权威,可以免费获取,但需要接受许可条款才能下载。请参阅这里来获取它。)GPT 类型代码实际上是 GUID 值——请参阅分区类型 GUID 表在 Wikipedia 文章中查看众所周知的值的列表。还有 GPT 属性和分区名称;这是三个完全独立的数据结构(尽管许多分区工具根据类型代码设置分区名称)。我不知道有 GPT 分区类型称为“主”。我怀疑提到这种类型是由于与 MBR 分区混淆,MBR 分区可以是主分区、扩展分区或逻辑分区;但这些概念在 GPT 中毫无意义。一些工具继续将术语“主”应用于全部GPT 分区,大概是因为这些工具最初是为 MBR 磁盘编写的,因此需要所有分区都有主/扩展/逻辑标识。

MBR 和 GPT 中的类型代码可识别分区的预期用途。Windows、OS X 和一些其他操作系统使用类型代码作为一种“过滤器”——这些操作系统会忽略不属于特定类型的分区,因此您可以在具有 Linux 特定类型代码的分区上设置(比如说)Linux 文件系统,而 Windows 不会尝试对其进行格式化。还有几个 Windows 特定的类型代码(请参阅 Wikipedia 表格),还有一些是跨操作系统的(例如 EFI 系统分区或 ESP 的代码)。

属性不太常用(类型代码是必需的),但它们可能会改变操作系统或固件处理分区的方式。例如,“隐藏”属性会告诉操作系统忽略该分区。这可能会或可能不会被接受,具体取决于操作系统。不同分区类型的属性可能有所不同。

分区名称主要供人使用,以便您识别分区。我还没有深入研究过,但我认为 OS X 对于分配给其Recovery HD分区的名称很挑剔;在我的(简短)测试中,当重命名此分区时,它就失败了。我还没有遇到过任何其他操作系统或实用程序关心分区名称的情况,尽管它们通常在创建分区时分配给与类型代码相关的描述。

我不太熟悉微软的diskpart工具,但正如 Ben N 在他的回答中指出的那样,可以使用它将类型代码设置为任意 GUID 值。其他工具也可以做到这一点,或者可以以其他方式设置类型代码。我自己的GPT fdisk ( gdisk),例如,使用四位(双字节)十六进制值作为已知 GUID 值的“快捷方式”;或者您可以输入“原始”GPT 值。请参阅gdisk演练有关如何执行此操作的信息,请参阅文档的 部分。libparted 库(由多个 Linux 工具使用)根据您指定将在分区上使用的文件系统设置类型代码;但您可以通过设置“标志”在有限的范围内更改它们,其中一些标志对应于类型代码,一些对应于属性。这是两个独立的底层数据结构的相当令人困惑的混合。

答案3

Cygwinfdisk可以更改分区类型。(我猜 WSL 也会让你这样做,但我既没有尝试也没有检查过。)磁盘设备通常命名为/dev/sda(第一个磁盘)到/dev/sdz(第 26 个磁盘)。下面是我更改第二个外部磁盘的分区类型的方法/dev/sdc

从 Cygwin 管理员的 shell 开始。我将在这里交错命令和输出。输出将缩进。我#在一行上使用符号来开始注释,您不能复制/输入:

fdisk /dev/sdc

    Welcome to fdisk (util-linux 2.33.1).
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.

Command (m for help): p    # Print the partition table

    Disk /dev/sdc: 465.8 GiB, 500107862016 bytes, 976773168 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 0EB10471-5858-9090-8081-828310111213
    
    Device         Start       End   Sectors   Size Type
    /dev/sdc1       2048    546208    544161 265.7M Microsoft basic data
    /dev/sdc2     546816    594403     47588  23.2M Microsoft basic data
    /dev/sdc3     595968 315179233 314583266   150G Microsoft basic data
    /dev/sdc4  948752384 950774893   2022510 987.6M Microsoft basic data
    /dev/sdc5  950775808 976768063  25992256  12.4G Microsoft basic data

Command (m for help): t    # Set the partition type
Partition number (1-5, default 5): 1

    Partition type (type L to list all types): l
      1 EFI System                     C12A7328-F81F-11D2-BA4B-00A0C93EC93B
      2 MBR partition scheme           024DEE41-33E7-11D3-9D69-0008C781F39F
      3 Intel Fast Flash               D3BFE2DE-3DAF-11DF-BA40-E3A556D89593

Partition type (type L to list all types): 1

    Changed type of partition 'Microsoft basic data' to 'EFI System'.

Command (m for help): p

    Disk /dev/sdc: 465.8 GiB, 500107862016 bytes, 976773168 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 0EB10471-5858-9090-8081-828310111213
    
    Device         Start       End   Sectors   Size Type
    /dev/sdc1       2048    546208    544161 265.7M EFI System
    /dev/sdc2     546816    594403     47588  23.2M Microsoft basic data
    /dev/sdc3     595968 315179233 314583266   150G Microsoft basic data
    /dev/sdc4  948752384 950774893   2022510 987.6M Microsoft basic data
    /dev/sdc5  950775808 976768063  25992256  12.4G Microsoft basic data

依次对每个分区重复该过程,直到将它们全部更改为适当的值:

Command (m for help): p

    Disk /dev/sdc: 465.8 GiB, 500107862016 bytes, 976773168 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 0EB10471-5858-9090-8081-828310111213
    
    Device         Start       End   Sectors   Size Type
    /dev/sdc1       2048    546208    544161 265.7M EFI System
    /dev/sdc2     546816    594403     47588  23.2M Microsoft reserved
    /dev/sdc3     595968 315179233 314583266   150G Microsoft basic data
    /dev/sdc4  948752384 950774893   2022510 987.6M Windows recovery environment
    /dev/sdc5  950775808 976768063  25992256  12.4G Microsoft basic data

最后,将更改写入磁盘:

Command (m for help): w    # Write to disk (and quit)

    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.

请注意,这将允许您设置 Microsoft 保留分区类型。至少对于分区标签而言。

相关内容