在使用 gdisk 时,有一个选项可以指定十六进制代码。我想知道它是什么以及为什么需要它,请参见下文。例如,如果我在驱动器上创建软件 RAID,我假设我需要代码 fd00。但为什么呢?它是什么,我必须使用它吗?为什么我不能使用 8300(不管它是什么意思)创建我的 RAID 阵列?
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-5860533134, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-5860533134, default = 5860533134) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): L
0700 Microsoft basic data 0c01 Microsoft reserved 2700 Windows RE
4100 PowerPC PReP boot 4200 Windows LDM data 4201 Windows LDM metadata
7501 IBM GPFS 7f00 ChromeOS kernel 7f01 ChromeOS root
7f02 ChromeOS reserved 8200 Linux swap 8300 Linux filesystem
8301 Linux reserved 8302 Linux /home 8400 Intel Rapid Start
8e00 Linux LVM a500 FreeBSD disklabel a501 FreeBSD boot
a502 FreeBSD swap a503 FreeBSD UFS a504 FreeBSD ZFS
a505 FreeBSD Vinum/RAID a580 Midnight BSD data a581 Midnight BSD boot
a582 Midnight BSD swap a583 Midnight BSD UFS a584 Midnight BSD ZFS
a585 Midnight BSD Vinum a800 Apple UFS a901 NetBSD swap
a902 NetBSD FFS a903 NetBSD LFS a904 NetBSD concatenated
a905 NetBSD encrypted a906 NetBSD RAID ab00 Apple boot
af00 Apple HFS/HFS+ af01 Apple RAID af02 Apple RAID offline
af03 Apple label af04 AppleTV recovery af05 Apple Core Storage
be00 Solaris boot bf00 Solaris root bf01 Solaris /usr & Mac Z
bf02 Solaris swap bf03 Solaris backup bf04 Solaris /var
bf05 Solaris /home bf06 Solaris alternate se bf07 Solaris Reserved 1
bf08 Solaris Reserved 2 bf09 Solaris Reserved 3 bf0a Solaris Reserved 4
bf0b Solaris Reserved 5 c001 HP-UX data c002 HP-UX service
ea00 Freedesktop $BOOT eb00 Haiku BFS ed00 Sony system partitio
ef00 EFI System ef01 MBR partition scheme ef02 BIOS boot partition
Press the key to see more codes:
fb00 VMWare VMFS fb01 VMWare reserved fc00 VMWare kcore crash p
fd00 Linux RAID
答案1
kyodake 的回答是正确的,但它也相当以 MBR 为中心。在 GPT 下,同样的原则也适用——即分区类型代码标识分区的预期用途。不同之处在于 GPT 类型代码是 128 位 GUID,而 MBR 下使用的是 8 位代码。GUID 的性质意味着不需要向中央机构注册代码以避免冲突;从统计上讲,两个 GUID 不太可能偶然相同。
据我所知,没有 GPT 类型代码的官方存储库,但它们记录在有关 GPT 的维基百科页面。GPT 类型代码的一个缺点是,作为 GUID,它们很长而且很笨拙——例如,Linux 文件系统数据的 0FC63DAF-8483-4772-8E79-3D69D8477DE4 是 MBR 的等效代码,而 0x83 是 MBR 的等效代码。因此,大多数用于对 GPT 磁盘进行分区的工具在其用户界面中使用某种形式的“简写”或“自然语言翻译”。我是 GPT fdisk 的作者,由于我编写它的目的是创建fdisk
尽可能类似于 (MBR) 的东西,因此我采用了使用 MBR 代码作为基础的方法;但是,由于 GPT 和 MBR 类型代码之间的对应关系不是 1:1,因此我将 MBR 类型代码乘以 0x100 以获得 GPT 等效代码。因此,MBR 的 0x83 变成了 8300。这还启用了 MBR 中不存在的相关后续代码,例如 8301、8302 等。这些代码对于已经熟悉 MBR 等效代码的人来说很容易使用,但对于不知道 MBR 代码的人来说,它们无疑是任意的。在内部,GPT fdisk 将这些代码转换为 GUID。您可以通过查看详细的分区信息(例如,通过i
中的选项gdisk
)来查看实际的 GUID。如果您愿意或需要使用 GPT fdisk 不支持的代码,您也可以输入任意 GUID,而不是使用 GPT fdisk 四字符代码。
其他工具使用其他方法。libparted 库(以及parted
GParted 和其他基于 libparted 的工具)将一些类型代码转换为“标志”,并完全隐藏其他代码。这有助于为某些用户简化操作,但会使某些任务变得不可能——例如,您无法使用基于 libparted 的任何内容设置任意类型代码。OS X 的磁盘实用程序将已知的 GUID 转换为纯文本描述。(如果我没记错的话,当您创建分区时,它会根据分区中创建的文件系统设置适当的类型代码,类似于 GParted 所做的。)
在大多数情况下,Linux 不使用类型代码,无论是 MBR 还是 GPT。也就是说,您可以将标准 Linux 文件系统放在 (GPT fdisk) 8300 分区(“Linux 文件系统”)上,或者使用 0700(“Microsoft 基本数据”,过去很常见),或者分配您自己的随机 GUID。类似的注释适用于 RAID、LVM、交换和其他分区类型。不过,这条规则也有一些例外。首先,分发安装程序通常会查看和设置类型代码,因此您可能需要在分区上设置正确的类型代码,然后才能正确使用它。另一个例外是,如果/etc/fstab
未正确配置,systemd 开始使用类型代码作为后备。(这就是 GPT fdisk 的大多数 830x 代码的来源——它们是可发现分区规范,这是 Freedesktop/systemd 的一项举措。)目前,Ubuntu 仅使用主 Linux 文件系统类型代码(GPT fdisk 中的 8300)作为文件系统,以及 LVM、RAID、交换等的相应代码。“Linux 不使用类型代码”规则的一个大例外是 BIOS 启动分区代码(21686148-6449-6E6F-744E-656564454649;GPT fdisk 中的 ef02 或 libpartedbios_grub
中的标志)。此类型代码标识 GRUB 使用的分区,当您运行 时grub-install
,GRUB 会将自身的一部分安装到该分区。如果在具有 GPT 磁盘的 BIOS 启动系统上安装 GRUB,则通常必须存在 BIOS 启动分区。(不过,有办法绕过此规则。)更重要的是,如果您错误地在错误的分区上设置了此类型代码,安装 GRUB 时该分区将被损坏!我在各种在线论坛上看到很多人都犯了这个错误。
在处理其他操作系统时,类型代码变得更加重要。例如,Windows 和 OS X 往往不会触碰它们无法识别的类型代码的分区。它们的类型代码列表不包括常见的 Linux 特定类型代码,因此使用 Linux 特定的类型代码有助于降低 Windows 或 OS X 破坏您的 Ubuntu 安装的风险。不过,这些操作系统并不关心您是否使用 GPT fdisk 8300 或 fd00 代码。如果您使用这些其他操作系统可识别的代码,则可能会出现问题。例如,Linux 文件系统类型 GUID(0FC63DAF-8483-4772-8E79-3D69D8477DE4)曾经不存在。我创建了它并将其推送到我自己的 GPT fdisk 和 libparted 中,因为使用“Microsoft Basic Data”类型代码 (EBD0A0A2-B9E5-4433-87C0-68B6B72699C7) 的常见做法会导致双启动设置出现问题。具体来说,某些 Windows 工具会认为 Linux 分区是损坏或未初始化的 Windows 分区,并提供维修它会。用户在此提示处犯的错误将是灾难性的。请参阅我的这个页面了解有关此主题的更多信息。
答案2
分区表中使用的分配分区类型列表最初由 IBM 和 Microsoft 内部维护。
随着 PC 操作系统和磁盘工具市场的发展和解放,其他供应商也需要为其产品分配特殊的分区类型。
20 世纪 90 年代,一些行业专家开始研究分区类型并发布分区类型列表,以帮助记录行业事实上的标准,从而降低进一步发生冲突的风险。
如何解释该值取决于操作系统的引导加载程序和/或内核。因此,该表指定了哪些操作系统或磁盘相关产品最初引入了 ID,以及它们将其映射到哪个文件系统或特殊分区类型。
分区 ID:83h。类型:文件系统。来源:GNU/Linux。描述:任何原生 Linux 文件系统。
分区 ID:FDh。来源:GNU/Linux。支持:Linux。描述:具有自动检测功能的 Linux RAID 超级块。