1*b5ff5246Skrw /* $OpenBSD: part.c,v 1.156 2023/04/11 16:34:51 krw Exp $ */ 2a1705421Sweingart 3a1705421Sweingart /* 4a1705421Sweingart * Copyright (c) 1997 Tobias Weingartner 5a1705421Sweingart * 610a68084Skrw * Permission to use, copy, modify, and distribute this software for any 710a68084Skrw * purpose with or without fee is hereby granted, provided that the above 810a68084Skrw * copyright notice and this permission notice appear in all copies. 9a1705421Sweingart * 1010a68084Skrw * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1110a68084Skrw * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1210a68084Skrw * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1310a68084Skrw * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1410a68084Skrw * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1510a68084Skrw * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1610a68084Skrw * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17a1705421Sweingart */ 18a1705421Sweingart 19a7568474Sderaadt #include <sys/types.h> 20a7568474Sderaadt #include <sys/disklabel.h> 21729290c0Skrw 22e8252b55Skrw #include <err.h> 2398952941Skrw #include <stdint.h> 24a1705421Sweingart #include <stdio.h> 25fba7235cSkrw #include <stdlib.h> 26184a329bSmillert #include <string.h> 27fba7235cSkrw #include <uuid.h> 28abc6f793Skrw 29199eafeaSkrw #include "part.h" 30a5472107Skrw #include "disk.h" 31a1705421Sweingart #include "misc.h" 3265deb39bSkrw #include "gpt.h" 33a1705421Sweingart 345308a554Skrw struct mbr_type { 355308a554Skrw int mt_type; 367d916471Skrw char *mt_desc; 375308a554Skrw }; 385308a554Skrw 39290491cbSkrw /* 40290491cbSkrw * MBR type sources: 41290491cbSkrw * OpenBSD Historical usage 42290491cbSkrw * https://en.wikipedia.org/wiki/Partition_type#List_of_partition_IDs 43290491cbSkrw * https://www.win.tue.nl/~aeb/partitions/partition_types-1.html 44290491cbSkrw */ 455308a554Skrw const struct mbr_type mbr_types[] = { 467d916471Skrw { 0x00, NULL }, /* unused */ 477d916471Skrw { 0x01, NULL }, /* Primary DOS with 12 bit FAT */ 487d916471Skrw { 0x02, NULL }, /* XENIX / filesystem */ 497d916471Skrw { 0x03, NULL }, /* XENIX /usr filesystem */ 507d916471Skrw { 0x04, NULL }, /* Primary DOS with 16 bit FAT */ 517d916471Skrw { 0x05, NULL }, /* Extended DOS */ 527d916471Skrw { 0x06, NULL }, /* Primary 'big' DOS (> 32MB) */ 537d916471Skrw { 0x07, NULL }, /* NTFS */ 547d916471Skrw { 0x08, NULL }, /* AIX filesystem */ 557d916471Skrw { 0x09, NULL }, /* AIX boot partition or Coherent */ 567d916471Skrw { 0x0A, NULL }, /* OS/2 Boot Manager or OPUS */ 577d916471Skrw { 0x0B, NULL }, /* Primary Win95 w/ 32-bit FAT */ 587d916471Skrw { 0x0C, NULL }, /* Primary Win95 w/ 32-bit FAT LBA-mapped */ 597d916471Skrw { 0x0E, NULL }, /* Primary DOS w/ 16-bit FAT, CHS-mapped */ 607d916471Skrw { 0x0F, NULL }, /* Extended DOS LBA-mapped */ 617d916471Skrw { 0x10, NULL }, /* OPUS */ 627d916471Skrw { 0x11, NULL }, /* OS/2 BM: hidden DOS 12-bit FAT */ 637d916471Skrw { 0x12, NULL }, /* Compaq Diagnostics */ 647d916471Skrw { 0x14, NULL }, /* OS/2 BM: hidden DOS 16-bit FAT <32M or Novell DOS 7.0 bug */ 657d916471Skrw { 0x16, NULL }, /* OS/2 BM: hidden DOS 16-bit FAT >=32M */ 667d916471Skrw { 0x17, NULL }, /* OS/2 BM: hidden IFS */ 677d916471Skrw { 0x18, NULL }, /* AST Windows swapfile */ 687d916471Skrw { 0x19, NULL }, /* Willowtech Photon coS */ 697d916471Skrw { 0x1C, NULL }, /* IBM ThinkPad recovery partition */ 707d916471Skrw { 0x20, NULL }, /* Willowsoft OFS1 */ 717d916471Skrw { 0x24, NULL }, /* NEC DOS */ 727d916471Skrw { 0x27, NULL }, /* Windows hidden Recovery Partition */ 737d916471Skrw { 0x38, NULL }, /* Theos */ 747d916471Skrw { 0x39, NULL }, /* Plan 9 */ 757d916471Skrw { 0x40, NULL }, /* VENIX 286 or LynxOS */ 767d916471Skrw { 0x41, NULL }, /* Linux/MINIX (sharing disk with DRDOS) or Personal RISC boot */ 777d916471Skrw { 0x42, NULL }, /* SFS or Linux swap (sharing disk with DRDOS) */ 787d916471Skrw { 0x43, NULL }, /* Linux native (sharing disk with DRDOS) */ 797d916471Skrw { 0x4D, NULL }, /* QNX 4.2 Primary */ 807d916471Skrw { 0x4E, NULL }, /* QNX 4.2 Secondary */ 817d916471Skrw { 0x4F, NULL }, /* QNX 4.2 Tertiary */ 827d916471Skrw { 0x50, NULL }, /* DM (disk manager) */ 837d916471Skrw { 0x51, NULL }, /* DM6 Aux1 (or Novell) */ 847d916471Skrw { 0x52, NULL }, /* CP/M or Microport SysV/AT */ 857d916471Skrw { 0x53, NULL }, /* DM6 Aux3 */ 867d916471Skrw { 0x54, NULL }, /* Ontrack */ 877d916471Skrw { 0x55, NULL }, /* EZ-Drive (disk manager) */ 887d916471Skrw { 0x56, NULL }, /* Golden Bow (disk manager) */ 897d916471Skrw { 0x5C, NULL }, /* Priam Edisk (disk manager) */ 907d916471Skrw { 0x61, NULL }, /* SpeedStor */ 917d916471Skrw { 0x63, NULL }, /* ISC, System V/386, GNU HURD or Mach */ 927d916471Skrw { 0x64, NULL }, /* Novell NetWare 2.xx */ 937d916471Skrw { 0x65, NULL }, /* Novell NetWare 3.xx */ 947d916471Skrw { 0x66, NULL }, /* Novell 386 NetWare */ 957d916471Skrw { 0x67, NULL }, /* Novell */ 967d916471Skrw { 0x68, NULL }, /* Novell */ 977d916471Skrw { 0x69, NULL }, /* Novell */ 987d916471Skrw { 0x70, NULL }, /* DiskSecure Multi-Boot */ 997d916471Skrw { 0x75, NULL }, /* PCIX */ 1007d916471Skrw { 0x80, NULL }, /* Minix 1.1 ... 1.4a */ 1017d916471Skrw { 0x81, NULL }, /* Minix 1.4b ... 1.5.10 */ 1027d916471Skrw { 0x82, NULL }, /* Linux swap */ 1037d916471Skrw { 0x83, NULL }, /* Linux filesystem */ 1047d916471Skrw { 0x84, NULL }, /* OS/2 hidden C: drive */ 1057d916471Skrw { 0x85, NULL }, /* Linux extended */ 1067d916471Skrw { 0x86, NULL }, /* NT FAT volume set */ 1077d916471Skrw { 0x87, NULL }, /* NTFS volume set or HPFS mirrored */ 1087d916471Skrw { 0x8E, NULL }, /* Linux LVM */ 1097d916471Skrw { 0x93, NULL }, /* Amoeba filesystem */ 1107d916471Skrw { 0x94, NULL }, /* Amoeba bad block table */ 1117d916471Skrw { 0x99, NULL }, /* Mylex EISA SCSI */ 1127d916471Skrw { 0x9F, NULL }, /* BSDI BSD/OS */ 1137d916471Skrw { 0xA0, NULL }, /* Phoenix NoteBIOS save-to-disk */ 1147d916471Skrw { 0xA5, NULL }, /* FreeBSD */ 1157d916471Skrw { 0xA6, NULL }, /* OpenBSD */ 1167d916471Skrw { 0xA7, NULL }, /* NEXTSTEP */ 1177d916471Skrw { 0xA8, NULL }, /* MacOS X main partition */ 1187d916471Skrw { 0xA9, NULL }, /* NetBSD */ 1197d916471Skrw { 0xAB, NULL }, /* MacOS X boot partition */ 1207d916471Skrw { 0xAF, NULL }, /* MacOS X HFS+ partition */ 1217d916471Skrw { 0xB7, NULL }, /* BSDI BSD/386 filesystem */ 1227d916471Skrw { 0xB8, NULL }, /* BSDI BSD/386 swap */ 1237d916471Skrw { 0xBF, NULL }, /* Solaris */ 1247d916471Skrw { 0xC0, NULL }, /* CTOS */ 1257d916471Skrw { 0xC1, NULL }, /* DRDOS/sec (FAT-12) */ 1267d916471Skrw { 0xC4, NULL }, /* DRDOS/sec (FAT-16, < 32M) */ 1277d916471Skrw { 0xC6, NULL }, /* DRDOS/sec (FAT-16, >= 32M) */ 1287d916471Skrw { 0xC7, NULL }, /* Syrinx (Cyrnix?) or HPFS disabled */ 1297d916471Skrw { 0xDB, NULL }, /* Concurrent CPM or C.DOS or CTOS */ 1307d916471Skrw { 0xDE, NULL }, /* Dell maintenance partition */ 1317d916471Skrw { 0xE1, NULL }, /* DOS access or SpeedStor 12-bit FAT extended partition */ 1327d916471Skrw { 0xE3, NULL }, /* DOS R/O or SpeedStor or Storage Dimensions */ 1337d916471Skrw { 0xE4, NULL }, /* SpeedStor 16-bit FAT extended partition < 1024 cyl. */ 1347d916471Skrw { 0xEB, NULL }, /* BeOS for Intel */ 1357d916471Skrw { 0xEE, NULL }, /* EFI Protective Partition */ 1367d916471Skrw { 0xEF, NULL }, /* EFI System Partition */ 1377d916471Skrw { 0xF1, NULL }, /* SpeedStor or Storage Dimensions */ 1387d916471Skrw { 0xF2, NULL }, /* DOS 3.3+ Secondary */ 1397d916471Skrw { 0xF4, NULL }, /* SpeedStor >1024 cyl. or LANstep or IBM PS/2 IML */ 1407d916471Skrw { 0xFF, NULL }, /* Xenix Bad Block Table */ 141a1705421Sweingart }; 142a1705421Sweingart 1435308a554Skrw struct gpt_type { 144f458660aSkrw int gt_attr; 145f458660aSkrw #define GTATTR_PROTECT (1 << 0) 146f458660aSkrw #define GTATTR_PROTECT_EFISYS (1 << 1) 1478ced0038Skrw char *gt_desc; /* NULL == try menu name (a.k.a. mi_name) */ 1486ba1b8a5Skrw char *gt_guid; 1495308a554Skrw }; 1505308a554Skrw 151290491cbSkrw /* 152290491cbSkrw * GPT GUID sources: 153290491cbSkrw * 154290491cbSkrw * UEFI: UEFI Specification 2.9, March 2021, Section 5.3.3, Table 5.7 155290491cbSkrw * Wikipedia: https://en.wikipedia.org/wiki/GUID_Partition_Table 156290491cbSkrw * NetBSD: /usr/src/sys/sys/disklabel_gpt.h 157290491cbSkrw * FreeBSD: /usr/src/sys/sys/disk/gpt.h. 158290491cbSkrw * DragonFlyBSD: /usr/src/sys/sys/disk/gpt.h. 159290491cbSkrw * Systemd:https://uapi-group.org/specifications/specs/discoverable_partitions_specification/ 160290491cbSkrw * https://www.freedesktop.org/software/systemd/man/systemd-gpt-auto-generator.html 161290491cbSkrw */ 162d6ffd808Skrw 163e89879fdSmiod #define UNUSED_GUID "00000000-0000-0000-0000-000000000000" 164e89879fdSmiod #define LEGACY_MBR_GUID "024dee41-33e7-11d3-9d69-0008c781f39f" 165e89879fdSmiod #define LINUX_SWAP_GUID "0657fd6d-a4ab-43c4-84e5-0933c84b4f4f" 166e89879fdSmiod #define LINUX_FILES_GUID "0fc63daf-8483-4772-8e79-3d69d8477de4" 167e89879fdSmiod #define BIOS_BOOT_GUID "21686148-6449-6e6f-744e-656564454649" 168e89879fdSmiod #define HIFIVE_BBL_GUID "2e54b353-1271-4842-806f-e436d6af6985" 169e89879fdSmiod #define BEOS_I386_GUID "42465331-3ba3-10f1-802a-4861696b7521" 170e89879fdSmiod #define MACOS_X_BOOT_GUID "426f6f74-0000-11aa-aa11-00306543ecac" 171e89879fdSmiod #define MACOS_X_HFS_GUID "48465300-0000-11aa-aa11-00306543ecac" 172e89879fdSmiod #define NETBSD_GUID "49f48d5a-b10e-11dc-b99b-0019d1879648" 173e89879fdSmiod #define FREEBSD_GUID "516e7cb4-6ecf-11d6-8ff8-00022d09712b" 174e89879fdSmiod #define APFS_RECOVERY_GUID "52637672-7900-11aa-aa11-00306543ecac" 175e89879fdSmiod #define MACOS_X_GUID "55465300-0000-11aa-aa11-00306543ecac" 176e89879fdSmiod #define HIFIVE_FSBL_GUID "5b193300-fc78-40cd-8002-e86c45580b47" 177e89879fdSmiod #define APFS_ISC_GUID "69646961-6700-11aa-aa11-00306543ecac" 178e89879fdSmiod #define SOLARIS_GUID "6a85cf4d-1dd2-11b2-99a6-080020736631" 179e89879fdSmiod #define APFS_GUID "7c3457ef-0000-11aa-aa11-00306543ecac" 180e89879fdSmiod #define OPENBSD_GUID "824cc7a0-36a8-11e3-890a-952519ad3f61" 181e89879fdSmiod #define LINUXSWAP_DR_GUID "af9b60a0-1431-4f62-bc68-3311714a69ad" 182e89879fdSmiod #define EFI_SYSTEM_PARTITION_GUID "c12a7328-f81f-11d2-ba4b-00a0c93ec93b" 183e89879fdSmiod #define WIN_RECOVERY_GUID "de94bba4-06d1-4d40-a16a-bfd50179d6ac" 184e89879fdSmiod #define LINUX_LVM_GUID "e6d6d379-f507-44c2-a23c-238f2a3df928" 185e89879fdSmiod #define MICROSOFT_BASIC_DATA_GUID "ebd0a0a2-b9e5-4433-87c0-68b6b72699c7" 186e89879fdSmiod #define CHROME_KERNEL_GUID "fe3a2a5d-4f32-41a7-b725-accc3285a309" 1873e1eb766Skrw #if 0 1883e1eb766Skrw #define CEPH_MULTIPATH_BLOCK_LOG_GUID "01b41e1b-002a-453c-9f17-88793989ff8f" 1893e1eb766Skrw #define MIDNIGHTBSD_UFS_GUID "0394ef8b-237e-11e1-b4b3-e89a8f7fc3a7" 1903e1eb766Skrw #define FUCHSIA_L_DATA_GUID "08185f0c-892d-428a-a789-dbeec8f55e6a" 1913e1eb766Skrw #define CHROMEOS_MINIOS_GUID "09845860-705f-4bb5-b16c-8a8a099caf52" 1923e1eb766Skrw #define FUCHSIA_RO_FACTORY_BOOT_GUID "10b8dbaa-d2bf-42a9-98c6-a7c5db3701e7" 1933e1eb766Skrw #define ANDROID_IA_BOOT2_GUID "114eaffe-1552-4022-b26e-9b053604cf84" 1943e1eb766Skrw #define CEPH_DMCRYPT_LUKS_BLOCK_DB_GUID "166418da-c469-4022-adf4-b30afd37f176" 1953e1eb766Skrw #define ANDROID_6_0_ARM_EXT_GUID "193d1ea4-b3ca-11e4-b075-10604b889dcf" 1963e1eb766Skrw #define ANDROID_6_0_ARM_META_GUID "19a710a2-b3ca-11e4-b026-10604b889dcf" 1973e1eb766Skrw #define FUCHSIA_L_MISC_GUID "1d75395d-f2c6-476b-a8b7-45cc1c97b476" 1983e1eb766Skrw #define ANDROID_IA_METADATA_GUID "20ac26be-20b7-11e3-84c5-6cfdb94711e9" 1993e1eb766Skrw #define FUCHSIA_L_ZIRCON_BOOTB_GUID "23cc04df-c278-4ce7-8471-897d1a4bcdf7" 2003e1eb766Skrw #define ANDROID_IA_BOOT_GUID "2568845d-2332-4675-bc39-8fa5a4748d15" 2013e1eb766Skrw #define FUCHSIA_L_BLOB_GUID "2967380e-134c-4cbb-b6da-17e7ce1ca45d" 2023e1eb766Skrw #define LINUX_X86_64_ROOT_VERITY_GUID "2c7357ed-ebd2-46d9-aec1-23d437ec2bf5" 2033e1eb766Skrw #define NETBSD_CONCATENATED_GUID "2db519c4-b10f-11dc-b99b-0019d1879648" 2043e1eb766Skrw #define NETBSD_ENCRYPTED_GUID "2db519ec-b10f-11dc-b99b-0019d1879648" 2053e1eb766Skrw #define CHROMEOS_FUTURE_USE_GUID "2e0a753d-9e48-43b0-8337-b15192cb1b5e" 2063e1eb766Skrw #define SOFTRAID_SCRATCH_GUID "2e313465-19b9-463f-8126-8a7993773801" 2073e1eb766Skrw #define CEPH_DMCRYPT_BLOCK_LOG_GUID "306e8683-4fe2-4330-b7c0-00a917c16966" 2083e1eb766Skrw #define CEPH_BLOCK_DB_GUID "30cd0809-c2b2-499c-8879-2d6b78529876" 2093e1eb766Skrw #define WINDOWS_IBM_GPFS_GUID "37affc90-ef7d-4e96-91c3-2d7ae055b174" 2103e1eb766Skrw #define COREOS_RESIZABLE_ROOT_GUID "3884dd41-8582-4404-b9a8-e9b84f2df50e" 2113e1eb766Skrw #define ANDROID_IA_SYSTEM_GUID "38f428e6-d326-425d-9140-6e0ea133647c" 2123e1eb766Skrw #define LINUX_SRV_GUID "3b8f8425-20e0-4f3b-907f-1a25a76f98e8" 2133e1eb766Skrw #define CHROMEOS_ROOTFS_GUID "3cb8e202-3b7e-47dd-8a3c-7ff2a13cfcec" 2143e1eb766Skrw #define U_BOOT_ENVIRONMENT_GUID "3de21764-95bd-54bd-a5c3-4abe786f38a8" 2153e1eb766Skrw #define CHROMEOS_HIBERNATE_GUID "3f0f8318-f146-4e6b-8222-c28c8f02e0d5" 2163e1eb766Skrw #define ANDROID_IA_RECOVERY_GUID "4177c722-9e92-4aab-8644-43502bfd5506" 2173e1eb766Skrw #define FUCHSIA_L_FVM_GUID "41d0e340-57e3-954e-8c1e-17ecac44cff5" 2183e1eb766Skrw #define FUCHSIA_VERIFIED_BOOT_META_GUID "421a8bfc-85d9-4d85-acda-b64eec0133e9" 2193e1eb766Skrw #define LINUX_IA_64_USR_GUID "4301d2a6-4e3b-4b2a-bb94-9e0b2c4225ea" 2203e1eb766Skrw #define LINUX_X86_ROOT_GUID "44479540-f297-41b2-9af7-d131d5f0458a" 2213e1eb766Skrw #define CEPH_MULTIPATH_JOURNAL_GUID "45b0969e-8ae0-4982-bf9d-5a8d867af560" 2223e1eb766Skrw #define CEPH_DMCRYPT_LUKS_JOURNAL_GUID "45b0969e-9b03-4f30-b4c6-35865ceff106" 2233e1eb766Skrw #define CEPH_DMCRYPT_JOURNAL_GUID "45b0969e-9b03-4f30-b4c6-5ec00ceff106" 2243e1eb766Skrw #define CEPH_JOURNAL_GUID "45b0969e-9b03-4f30-b4c6-b4b80ceff106" 2253e1eb766Skrw #define BAREBOX_BAREBOX_STATE_GUID "4778ed65-bf42-45fa-9c5b-287a1dc4aab1" 2263e1eb766Skrw #define FUCHSIA_L_INSTALL_GUID "48435546-4953-2041-494e-5354414c4c52" 2273e1eb766Skrw #define ANDROID_IA_BOOT3_GUID "49a4d17f-93a3-45c1-a0de-f50b2ebe2599" 2283e1eb766Skrw #define NETBSD_SWAP_GUID "49f48d32-b10e-11dc-b99b-0019d1879648" 2293e1eb766Skrw #define NETBSD_LFS_GUID "49f48d82-b10e-11dc-b99b-0019d1879648" 2303e1eb766Skrw #define NETBSD_RAID_GUID "49f48daa-b10e-11dc-b99b-0019d1879648" 2313e1eb766Skrw #define FUCHSIA_VOLUME_MANAGER_GUID "49fd7cb8-df15-4e73-b9d9-992070127f0f" 2323e1eb766Skrw #define MACOS_LABEL_GUID "4c616265-6c00-11aa-aa11-00306543ecac" 2333e1eb766Skrw #define LINUX_VAR_GUID "4d21b016-b534-45c2-a9fb-5c16e091fd2d" 2343e1eb766Skrw #define FUCHSIA_L_SYS_CFG_GUID "4e5e989e-4c86-11e8-a15b-480fcf35f8e6" 2353e1eb766Skrw #define LINUX_X86_64_ROOT_GUID "4f68bce3-e8cd-4db1-96e7-fbcaf984b709" 2363e1eb766Skrw #define CEPH_MULTIPATH_OSD_GUID "4fbd7e29-8ae0-4982-bf9d-5a8d867af560" 2373e1eb766Skrw #define CEPH_OSD_GUID "4fbd7e29-9d25-41b8-afd0-062c0ceff05d" 2383e1eb766Skrw #define CEPH_DMCRYPT_LUKS_OSD_GUID "4fbd7e29-9d25-41b8-afd0-35865ceff05d" 2393e1eb766Skrw #define CEPH_DMCRYPT_OSD_GUID "4fbd7e29-9d25-41b8-afd0-5ec00ceff05d" 2403e1eb766Skrw #define FREEBSD_SWAP_GUID "516e7cb5-6ecf-11d6-8ff8-00022d09712b" 2413e1eb766Skrw #define FREEBSD_UFS_GUID "516e7cb6-6ecf-11d6-8ff8-00022d09712b" 2423e1eb766Skrw #define FREEBSD_VINUM_VOL_MGR_GUID "516e7cb8-6ecf-11d6-8ff8-00022d09712b" 2433e1eb766Skrw #define FREEBSD_ZFS_GUID "516e7cba-6ecf-11d6-8ff8-00022d09712b" 2443e1eb766Skrw #define MACOS_RAID_GUID "52414944-0000-11aa-aa11-00306543ecac" 2453e1eb766Skrw #define MACOS_RAID_OFFLINE_GUID "52414944-5f4f-11aa-aa11-00306543ecac" 2463e1eb766Skrw #define MACOS_TV_RECOVERY_GUID "5265636f-7665-11aa-aa11-00306543ecac" 2473e1eb766Skrw #define MACOS_CORE_STORAGE_GUID "53746f72-6167-11aa-aa11-00306543ecac" 2483e1eb766Skrw #define WINDOWS_STORAGE_REPLICA_GUID "558d43c5-a1ac-43c0-aac8-d1472b2923d1" 2493e1eb766Skrw #define WINDOWS_LDM_METADATA_GUID "5808c8aa-7e8f-42e0-85d2-e1e90434cfb3" 2503e1eb766Skrw #define FUCHSIA_L_FACTORY_CFG_GUID "5a3a90be-4c86-11e8-a15b-480fcf35f8e6" 2513e1eb766Skrw #define CEPH_BLOCK_LOG_GUID "5ce17fce-4087-4169-b7ff-056cc58473f9" 2523e1eb766Skrw #define COREOS_USR_GUID "5dfbf5f4-2848-4bac-aa5e-0d9a20b745a6" 2533e1eb766Skrw #define FUCHSIA_L_BOOT_GUID "5ece94fe-4c86-11e8-a15b-480fcf35f8e6" 2543e1eb766Skrw #define FUCHSIA_L_SYSTEM_GUID "606b000b-b7c7-4653-a7d5-b737332c899d" 2553e1eb766Skrw #define LINUX_ARM32_ROOT_GUID "69dad710-2ce4-4e3c-b16c-21a1d49abed3" 2563e1eb766Skrw #define FUCHSIA_L_VERIFIED_BOOTM_R_GUID "6a2460c3-cd11-4e8b-80a8-12cce268ed0a" 2573e1eb766Skrw #define LINUX_IA_64_USR_VERITY_GUID "6a491e03-3be7-4545-8e38-83320e0ea880" 2583e1eb766Skrw #define SOLARIS_BOOT_GUID "6a82cb45-1dd2-11b2-99a6-080020736631" 2593e1eb766Skrw #define SOLARIS_SWAP_GUID "6a87c46f-1dd2-11b2-99a6-080020736631" 2603e1eb766Skrw #define SOLARIS_USR_MACOS_ZFS_GUID "6a898cc3-1dd2-11b2-99a6-080020736631" 2613e1eb766Skrw #define SOLARIS_BACKUP_GUID "6a8b642b-1dd2-11b2-99a6-080020736631" 2623e1eb766Skrw #define SOLARIS_RESERVED5_GUID "6a8d2ac7-1dd2-11b2-99a6-080020736631" 2633e1eb766Skrw #define SOLARIS_VAR_GUID "6a8ef2e9-1dd2-11b2-99a6-080020736631" 2643e1eb766Skrw #define SOLARIS_HOME_GUID "6a90ba39-1dd2-11b2-99a6-080020736631" 2653e1eb766Skrw #define SOLARIS_ALT_SECTOR_GUID "6a9283a5-1dd2-11b2-99a6-080020736631" 2663e1eb766Skrw #define SOLARIS_RESERVED1_GUID "6a945a3b-1dd2-11b2-99a6-080020736631" 2673e1eb766Skrw #define SOLARIS_RESERVED4_GUID "6a96237f-1dd2-11b2-99a6-080020736631" 2683e1eb766Skrw #define SOLARIS_RESERVED2_GUID "6a9630d1-1dd2-11b2-99a6-080020736631" 2693e1eb766Skrw #define SOLARIS_RESERVED3_GUID "6a980767-1dd2-11b2-99a6-080020736631" 2703e1eb766Skrw #define LINUX_ARM64_USR_VERITY_GUID "6e11a4e7-fbca-4ded-b9e9-e1a512bb664e" 2713e1eb766Skrw #define ATARI_TOS_BASIC_DATA_GUID "734e5afe-f61a-11e6-bc64-92361f002671" 2723e1eb766Skrw #define LINUX_ARM32_ROOT_VERITY_GUID "7386cdf2-203c-47a9-a498-f2ecce45a2d6" 2733e1eb766Skrw #define ONIE_BOOT_GUID "7412f7d5-a156-4b13-81dc-867174929325" 2743e1eb766Skrw #define FREEBSD_NANDFS_GUID "74ba7dd9-a689-11e1-bd04-00e081286acf" 2753e1eb766Skrw #define LINUX_X86_USR_GUID "75250d76-8cc6-458e-bd66-bd47cc81a812" 2763e1eb766Skrw #define HP_UX_DATA_GUID "75894c1e-3aeb-11d3-b7c1-7b03a0000000" 2773e1eb766Skrw #define ANDROID_IA_FASTBOOT_GUID "767941d0-2085-11e3-ad3b-6cfdb94711e9" 2783e1eb766Skrw #define LINUX_USER_HOME_GUID "773f91ef-66d4-49b5-bd83-d683bf40ad16" 2793e1eb766Skrw #define LINUX_X86_64_USR_VERITY_GUID "77ff5f63-e7b6-4633-acf4-1565b864c0e6" 2803e1eb766Skrw #define SPDK_BLOCK_DEVICE_GUID "7c5222bd-8f5d-4087-9c00-bf9843c7b58c" 2813e1eb766Skrw #define LINUX_ARM32_USR_GUID "7d0359a3-02b3-4f0a-865c-654403e70625" 2823e1eb766Skrw #define LINUX_VAR_TMP_GUID "7ec6f557-3bc5-4aca-b293-16ef5df639d1" 2833e1eb766Skrw #define CEPH_MULTIPATH_BLOCK_B_GUID "7f4a666a-16f3-47a2-8445-152ef4d03f6c" 2843e1eb766Skrw #define LINUX_PLAIN_DMCRYPT_GUID "7ffec5c9-2d00-49b7-8941-3ea10a5586b7" 2853e1eb766Skrw #define FREEBSD_BOOT_GUID "83bd6b9d-7f41-11dc-be0b-001560b84f0f" 2863e1eb766Skrw #define LINUX_X86_64_USR_GUID "8484680c-9521-48c6-9c11-b0720656f69e" 2873e1eb766Skrw #define MIDNIGHTBSD_DATA_GUID "85d5e45a-237c-11e1-b4b3-e89a8f7fc3a7" 2883e1eb766Skrw #define MIDNIGHTBSD_SWAP_GUID "85d5e45b-237c-11e1-b4b3-e89a8f7fc3a7" 2893e1eb766Skrw #define MIDNIGHTBSD_VINUM_VOL_MGR_GUID "85d5e45c-237c-11e1-b4b3-e89a8f7fc3a7" 2903e1eb766Skrw #define MIDNIGHTBSD_ZFS_GUID "85d5e45d-237c-11e1-b4b3-e89a8f7fc3a7" 2913e1eb766Skrw #define MIDNIGHTBSD_BOOT_GUID "85d5e45e-237c-11e1-b4b3-e89a8f7fc3a7" 2923e1eb766Skrw #define CEPH_DMCRYPT_LUKS_LOG_GUID "86a32090-3647-40b9-bbbd-38d8c573aa86" 2933e1eb766Skrw #define LINUX_IA_64_ROOT_VERITY_GUID "86ed10d5-b607-45bb-8957-d350f23d0571" 2943e1eb766Skrw #define CEPH_DMCRYPT_CREATNG_DISK_GUID "89c57f98-2fe5-4dc0-89c1-5ec00ceff2be" 2953e1eb766Skrw #define CEPH_DISK_IN_CREATION_GUID "89c57f98-2fe5-4dc0-89c1-f3ad0ceff2be" 2963e1eb766Skrw #define FUCHSIA_L_TEST_GUID "8b94d043-30be-4871-9dfa-d69556e8c1f3" 2973e1eb766Skrw #define VERACRYPT_ENCRYPTED_DATA_GUID "8c8f8eff-ac95-4770-814a-21994f2dbc8f" 2983e1eb766Skrw #define LINUX_RESERVED_GUID "8da63339-0007-60c0-c436-083ac8230908" 2993e1eb766Skrw #define LINUX_X86_USR_VERITY_GUID "8f461b0d-14ee-4e81-9aa9-049b6fb97abd" 3003e1eb766Skrw #define ANDROID_IA_FACTORY_GUID "8f68cc74-c5e5-48da-be91-a0c8c15e9c80" 3013e1eb766Skrw #define FUCHSIA_L_EMMC_BOOT1_GUID "900b0fc5-90cd-4d4f-84f9-9f8ed579db88" 3023e1eb766Skrw #define ARCAOS_TYPE_1_GUID "90b6ff38-b98f-4358-a21f-48f35b4a8ad3" 3033e1eb766Skrw #define VMWARE_RESERVED_GUID "9198effc-31c0-11db-8f78-000c2911d1b8" 3043e1eb766Skrw #define LINUX_HOME_GUID "933ac7e1-2eb4-4f13-b844-0e14e2aef915" 3053e1eb766Skrw #define CEPH_DMCRYPT_BLOCK_DB_GUID "93b0052d-02d9-4d8a-a43b-33a3ee4dfbc3" 3063e1eb766Skrw #define LINUX_IA_64_ROOT_GUID "993d8d3d-f80e-4225-855a-9daf8ed7ea97" 3073e1eb766Skrw #define FUCHSIA_ZIRCON_BOOT_ABR_GUID "9b37fff6-2e58-466a-983a-f7926d0b04e0" 3083e1eb766Skrw #define VMWARE_VMKCORE_GUID "9d275380-40ad-11db-bf97-000c2911d1b8" 3093e1eb766Skrw #define PPC_PREP_BOOT_GUID "9e1a2d38-c612-4316-aa26-8b49521e5a8b" 3103e1eb766Skrw #define ANDROID_IA_FACTORY_ALT_GUID "9fdaa6ef-4b3f-40d2-ba8d-bff16bfb887b" 3113e1eb766Skrw #define FUCHSIA_L_ZIRCON_BOOTR_GUID "a0e5cf57-2def-46be-a80c-a2067c37cd49" 3123e1eb766Skrw #define FUCHSIA_L_VERIFIED_BOOTM_A_GUID "a13b4d9a-ec5f-11e8-97d8-6c3be52705bf" 3133e1eb766Skrw #define LINUX_RAID_GUID "a19d880f-05fc-4d3b-a006-743f0f84911e" 3143e1eb766Skrw #define FUCHSIA_L_VERIFIED_BOOTM_B_GUID "a288abf2-ec5f-11e8-97d8-6c3be52705bf" 3153e1eb766Skrw #define FUCSHIA_BOOT_METADATA_GUID "a409e16b-78aa-4acc-995c-302352621a41" 3163e1eb766Skrw #define ANDROID_IA_CACHE_GUID "a893ef21-e428-470a-9e55-0668fd91a2d9" 3173e1eb766Skrw #define VMWARE_VMFS_FILESYSTEM_GUID "aa31e02a-400f-11db-9590-000c2911d1b8" 3183e1eb766Skrw #define ANDROID_IA_OEM_GUID "ac6d7924-eb71-4df8-b48d-e267b27148ff" 3193e1eb766Skrw #define LINUX_ARM64_USR_GUID "b0e01050-ee5f-4390-949a-9101b17104e9" 3203e1eb766Skrw #define FUCHSIA_L_EMMC_BOOT2_GUID "b2b2e8d1-7c10-4ebc-a2d0-4614568260ad" 3213e1eb766Skrw #define SOFTRAID_STATUS_GUID "b6fa30da-92d2-4a9a-96f1-871ec6486200" 3223e1eb766Skrw #define LINUX_ARM64_ROOT_GUID "b921b045-1df0-41c3-af44-4c6f280d3fae" 3233e1eb766Skrw #define SOFTRAID_CACHE_GUID "bbba6df5-f46f-4a89-8f59-8765b2727503" 3243e1eb766Skrw #define LINUX_BOOT_GUID "bc13c2ff-59e6-4262-a352-b275fd6f7172" 3253e1eb766Skrw #define ANDROID_IA_CFG_GUID "bd59408b-4514-490d-bf12-9878d963f378" 3263e1eb766Skrw #define COREOS_ROOT_RAID_GUID "be9067b9-ea49-4f15-b4f6-f36f8c9e1818" 3273e1eb766Skrw #define LENOVO_BOOT_GUID "bfbfafe7-a34f-448a-9a5b-6213eb736c22" 3283e1eb766Skrw #define LINUX_ARM32_USR_VERITY_GUID "c215d751-7bcd-4649-be90-6627490a4c05" 3293e1eb766Skrw #define ANDROID_IA_VENDOR_GUID "c5a0aeec-13ea-11e5-a1b1-001e67ca0c3c" 3303e1eb766Skrw #define PLAN9_GUID "c91818f9-8025-47af-89d2-f030d7000c2c" 3313e1eb766Skrw #define COREOS_OEM_GUID "c95dc21a-df0e-4340-8d7b-26cbfa9a03e0" 3323e1eb766Skrw #define LINUX_LUKS_GUID "ca7d7ccb-63ed-4c53-861c-1742536059cc" 3333e1eb766Skrw #define CHROMEOS_FIRMWARE_GUID "cab6e88e-abf3-4102-a07a-d4bb9be3c1d3" 3343e1eb766Skrw #define CEPH_MULTIPATH_BLOCK_A_GUID "cafecafe-8ae0-4982-bf9d-5a8d867af560" 3353e1eb766Skrw #define CEPH_DMCRYPT_LUKS_BLOCK_GUID "cafecafe-9b03-4f30-b4c6-35865ceff106" 3363e1eb766Skrw #define CEPH_DMCRYPT_BLOCK_GUID "cafecafe-9b03-4f30-b4c6-5ec00ceff106" 3373e1eb766Skrw #define CEPH_BLOCK_GUID "cafecafe-9b03-4f30-b4c6-b4b80ceff106" 3383e1eb766Skrw #define QNX_POWER_SAFE_FS_GUID "cef5a9ad-73bc-4601-89f3-cdeeeee321a1" 3393e1eb766Skrw #define LINUX_X86_ROOT_VERITY_GUID "d13c5d3b-b5d1-422a-b29f-9454fdc89d76" 3403e1eb766Skrw #define INTEL_FAST_FLASH_GUID "d3bfe2de-3daf-11df-ba40-e3a556d89593" 3413e1eb766Skrw #define ONIE_CFG_GUID "d4e6e2cd-4469-46f3-b5cb-1bff57afc149" 3423e1eb766Skrw #define FUCHSIA_ENCRYPTED_SYS_GUID "d9fd4535-106c-4cec-8d37-dfc020ca87cb" 3433e1eb766Skrw #define ANDROID_IA_DATA_GUID "dc76dda9-5ac1-491c-af42-a82591580c0d" 3443e1eb766Skrw #define FUCHSIA_L_ZIRCON_BOOTA_GUID "de30cc86-1f4a-4a31-93c4-66f147d33e05" 3453e1eb766Skrw #define LINUX_ARM64_ROOT_VERITY_GUID "df3300ce-d69f-4c92-978c-9bfb0f38d820" 3463e1eb766Skrw #define HP_UX_SERVICE_GUID "e2a1e728-32e3-11d6-a682-7b03a0000000" 3473e1eb766Skrw #define WINDOWS_RESERVED_GUID "e3c9e316-0b5c-4db8-817d-f92df00215ae" 3483e1eb766Skrw #define WINDOWS_STORAGE_SPACES_GUID "e75caf8f-f680-4cee-afa3-b001e56efc2d" 3493e1eb766Skrw #define ANDROID_IA_PERSISTENT_GUID "ebc597d0-2053-4b15-8b64-e0aac75f4db1" 3503e1eb766Skrw #define CEPH_MULTIPATH_BLOCK_DB_GUID "ec6d6385-e346-45dc-be91-da2a7c8b3261" 3513e1eb766Skrw #define ANDROID_IA_MISC_GUID "ef32a33b-a409-486c-9141-9ffb711f6266" 3523e1eb766Skrw #define SONY_BOOT_GUID "f4019732-066e-4e12-8273-346c5641494f" 3533e1eb766Skrw #define FUCHSIA_RO_FACTORY_SYS_GUID "f95d940e-caba-4578-9b93-bb6c90f29d3e" 3543e1eb766Skrw #define SOFTRAID_VOLUME_GUID "fa709c7e-65b1-4593-bfd5-e71d61de9b02" 3553e1eb766Skrw #define CEPH_DMCRYPT_KEYS_LOCKBOX_GUID "fb3aabf9-d25f-47cc-bf5e-721d1816496b" 3563e1eb766Skrw #define FUCHSIA_BOOT_GUID "fe8a2634-5e2e-46ba-99e3-3a192091a350" 3573e1eb766Skrw #endif 358d6ffd808Skrw 3595308a554Skrw const struct gpt_type gpt_types[] = { 3607d916471Skrw { GTATTR_PROTECT, 3618ced0038Skrw NULL, /* BIOS Boot */ BIOS_BOOT_GUID }, 3627d916471Skrw { GTATTR_PROTECT, 3638ced0038Skrw NULL, /* HiFive BBL */ HIFIVE_BBL_GUID }, 3647d916471Skrw { GTATTR_PROTECT, 3658ced0038Skrw NULL, /* HiFive FSBL */ HIFIVE_FSBL_GUID }, 3667d916471Skrw { GTATTR_PROTECT | GTATTR_PROTECT_EFISYS, 3678ced0038Skrw NULL, /* APFS Recovery */ APFS_RECOVERY_GUID }, 3687d916471Skrw { GTATTR_PROTECT | GTATTR_PROTECT_EFISYS, 3698ced0038Skrw NULL, /* APFS ISC */ APFS_ISC_GUID }, 3708ced0038Skrw { GTATTR_PROTECT | GTATTR_PROTECT_EFISYS, 3718ced0038Skrw NULL, /* APFS */ APFS_GUID }, 3728ced0038Skrw 3738ced0038Skrw { 0, NULL, /* Unused */ UNUSED_GUID }, 3748ced0038Skrw { 0, NULL, /* Legacy MBR */ LEGACY_MBR_GUID }, 3758ced0038Skrw { 0, NULL, /* Linux swap */ LINUX_SWAP_GUID }, 3768ced0038Skrw { 0, NULL, /* Linux files* */ LINUX_FILES_GUID }, 3778ced0038Skrw { 0, NULL, /* MacOS X */ MACOS_X_GUID }, 3788ced0038Skrw { 0, NULL, /* Solaris */ SOLARIS_GUID }, 3798ced0038Skrw { 0, NULL, /* BeOS/i386 */ BEOS_I386_GUID }, 3808ced0038Skrw { 0, NULL, /* MacOS X boot */ MACOS_X_BOOT_GUID }, 3818ced0038Skrw { 0, NULL, /* MacOS X HFS+ */ MACOS_X_HFS_GUID }, 3828ced0038Skrw { 0, NULL, /* NetBSD */ NETBSD_GUID }, 3838ced0038Skrw { 0, NULL, /* FreeBSD */ FREEBSD_GUID }, 3848ced0038Skrw { 0, NULL, /* OpenBSD */ OPENBSD_GUID }, 3858ced0038Skrw { 0, NULL, /* LinuxSwap DR */ LINUXSWAP_DR_GUID }, 3868ced0038Skrw { 0, NULL, /* EFI Sys */ EFI_SYSTEM_PARTITION_GUID }, 3878ced0038Skrw { 0, NULL, /* Win Recovery*/ WIN_RECOVERY_GUID }, 3888ced0038Skrw { 0, NULL, /* Linux VM */ LINUX_LVM_GUID }, 3898ced0038Skrw { 0, NULL, /* MS basic data */ MICROSOFT_BASIC_DATA_GUID }, 3908ced0038Skrw { 0, NULL, /* ChromeKernel */ CHROME_KERNEL_GUID }, 3913e1eb766Skrw #if 0 3923e1eb766Skrw /* Sorted as in https://en.wikipedia.org/wiki/GUID_Partition_Table */ 3933e1eb766Skrw { 0, "Intel Fast Flash (iFFS)", INTEL_FAST_FLASH_GUID }, 3943e1eb766Skrw { 0, "Sony boot", SONY_BOOT_GUID }, 3953e1eb766Skrw { 0, "Lenovo boot", LENOVO_BOOT_GUID }, 3963e1eb766Skrw 3973e1eb766Skrw /* Microsoft Windows */ 3983e1eb766Skrw { 0, "Windows Reserved (MSR)", WINDOWS_RESERVED_GUID }, 3993e1eb766Skrw { 0, "Windows LDM metadata", WINDOWS_LDM_METADATA_GUID }, 4003e1eb766Skrw { 0, "Windows IBM General Parallel FS", WINDOWS_IBM_GPFS_GUID }, 4013e1eb766Skrw { 0, "Windows Storage Spaces", WINDOWS_STORAGE_SPACES_GUID }, 4023e1eb766Skrw { 0, "Windows Storage Replica", WINDOWS_STORAGE_REPLICA_GUID }, 4033e1eb766Skrw 4043e1eb766Skrw /* HP-UX */ 4053e1eb766Skrw { 0, "HP-UX Data", HP_UX_DATA_GUID }, 4063e1eb766Skrw { 0, "HP-UX Service", HP_UX_SERVICE_GUID }, 4073e1eb766Skrw 4083e1eb766Skrw /* Linux */ 4093e1eb766Skrw { 0, "Linux RAID", LINUX_RAID_GUID }, 4103e1eb766Skrw { 0, "Linux x86 Root", LINUX_X86_ROOT_GUID }, 4113e1eb766Skrw { 0, "Linux x86-64 Root", LINUX_X86_64_ROOT_GUID }, 4123e1eb766Skrw { 0, "Linux Arm32 Root", LINUX_ARM32_ROOT_GUID }, 4133e1eb766Skrw { 0, "Linux Arm64 root", LINUX_ARM64_ROOT_GUID }, 4143e1eb766Skrw { 0, "Linux /boot", LINUX_BOOT_GUID }, 4153e1eb766Skrw { 0, "Linux /home", LINUX_HOME_GUID }, 4163e1eb766Skrw { 0, "Linux /srv (server data)", LINUX_SRV_GUID }, 4173e1eb766Skrw { 0, "Linux Plain dm-crypt", LINUX_PLAIN_DMCRYPT_GUID }, 4183e1eb766Skrw { 0, "Linux LUKS", LINUX_LUKS_GUID }, 4193e1eb766Skrw { 0, "Linux Reserved", LINUX_RESERVED_GUID }, 4203e1eb766Skrw 4213e1eb766Skrw /* FreeBSD */ 4223e1eb766Skrw { 0, "FreeBSD Boot", FREEBSD_BOOT_GUID }, 4233e1eb766Skrw { 0, "FreeBSD Swap", FREEBSD_SWAP_GUID }, 4243e1eb766Skrw { 0, "FreeBSD UFS", FREEBSD_UFS_GUID }, 4253e1eb766Skrw { 0, "FreeBSD Vinum volume manager", FREEBSD_VINUM_VOL_MGR_GUID }, 4263e1eb766Skrw { 0, "FreeBSD ZFS", FREEBSD_ZFS_GUID }, 4273e1eb766Skrw { 0, "FreeBSD nandfs", FREEBSD_NANDFS_GUID }, 4283e1eb766Skrw 4293e1eb766Skrw /* MacOS/Darwin */ 4303e1eb766Skrw { 0, "MacOS RAID", MACOS_RAID_GUID }, 4313e1eb766Skrw { 0, "MacOS RAID (offline)", MACOS_RAID_OFFLINE_GUID }, 4323e1eb766Skrw { 0, "MacOS Label", MACOS_LABEL_GUID }, 4333e1eb766Skrw { 0, "MacOS TV Recovery", MACOS_TV_RECOVERY_GUID }, 4343e1eb766Skrw { 0, "MacOS Core Storage container", MACOS_CORE_STORAGE_GUID }, 4353e1eb766Skrw 4363e1eb766Skrw /* Solaris/illumos */ 4373e1eb766Skrw { 0, "Solaris/illumos boot", SOLARIS_BOOT_GUID }, 4383e1eb766Skrw { 0, "Solaris/illumos Swap", SOLARIS_SWAP_GUID }, 4393e1eb766Skrw { 0, "Solaris/illumos Backup", SOLARIS_BACKUP_GUID }, 4403e1eb766Skrw { 0, "Solaris/illumos /usr|MacOS ZFS", SOLARIS_USR_MACOS_ZFS_GUID }, 4413e1eb766Skrw { 0, "Solaris/illumos /var", SOLARIS_VAR_GUID }, 4423e1eb766Skrw { 0, "Solaris/illumos /home", SOLARIS_HOME_GUID }, 4433e1eb766Skrw { 0, "Solaris/illumos Alt sector", SOLARIS_ALT_SECTOR_GUID }, 4443e1eb766Skrw { 0, "Solaris/illumos Reserved", SOLARIS_RESERVED1_GUID }, 4453e1eb766Skrw { 0, "Solaris/illumos Reserved", SOLARIS_RESERVED2_GUID }, 4463e1eb766Skrw { 0, "Solaris/illumos Reserved", SOLARIS_RESERVED3_GUID }, 4473e1eb766Skrw { 0, "Solaris/illumos Reserved", SOLARIS_RESERVED4_GUID }, 4483e1eb766Skrw { 0, "Solaris/illumos Reserved", SOLARIS_RESERVED5_GUID }, 4493e1eb766Skrw 4503e1eb766Skrw /* NetBSD */ 4513e1eb766Skrw { 0, "NetBSD Swap", NETBSD_SWAP_GUID }, 4523e1eb766Skrw { 0, "NetBSD LFS", NETBSD_LFS_GUID }, 4533e1eb766Skrw { 0, "NetBSD RAID", NETBSD_RAID_GUID }, 4543e1eb766Skrw { 0, "NetBSD Concatenated", NETBSD_CONCATENATED_GUID }, 4553e1eb766Skrw { 0, "NetBSD Encrypted", NETBSD_ENCRYPTED_GUID }, 4563e1eb766Skrw 4573e1eb766Skrw /* ChromeOS */ 4583e1eb766Skrw { 0, "ChromeOS rootfs", CHROMEOS_ROOTFS_GUID }, 4593e1eb766Skrw { 0, "ChromeOS firmware", CHROMEOS_FIRMWARE_GUID }, 4603e1eb766Skrw { 0, "ChromeOS future use", CHROMEOS_FUTURE_USE_GUID }, 4613e1eb766Skrw { 0, "ChromeOS miniOS", CHROMEOS_MINIOS_GUID }, 4623e1eb766Skrw { 0, "ChromeOS hibernate", CHROMEOS_HIBERNATE_GUID }, 4633e1eb766Skrw 4643e1eb766Skrw /* Container Linux by CoreOS */ 4653e1eb766Skrw { 0, "CoreOS /usr", COREOS_USR_GUID }, 4663e1eb766Skrw { 0, "CoreOS Resizable root", COREOS_RESIZABLE_ROOT_GUID }, 4673e1eb766Skrw { 0, "CoreOS OEM", COREOS_OEM_GUID }, 4683e1eb766Skrw { 0, "CoreOS root RAID", COREOS_ROOT_RAID_GUID }, 4693e1eb766Skrw 4703e1eb766Skrw /* MidnightBSD */ 4713e1eb766Skrw { 0, "MidnightBSD Boot", MIDNIGHTBSD_BOOT_GUID }, 4723e1eb766Skrw { 0, "MidnightBSD Data", MIDNIGHTBSD_DATA_GUID }, 4733e1eb766Skrw { 0, "MidnightBSD Swap", MIDNIGHTBSD_SWAP_GUID }, 4743e1eb766Skrw { 0, "MidnightBSD UFS", MIDNIGHTBSD_UFS_GUID }, 4753e1eb766Skrw { 0, "MidnightBSD Vinum vol mgr", MIDNIGHTBSD_VINUM_VOL_MGR_GUID }, 4763e1eb766Skrw { 0, "MidnightBSD ZFS", MIDNIGHTBSD_ZFS_GUID }, 4773e1eb766Skrw 4783e1eb766Skrw /* Ceph */ 4793e1eb766Skrw { 0, "Ceph Journal", CEPH_JOURNAL_GUID }, 4803e1eb766Skrw { 0, "Ceph dm-crypt journal", CEPH_DMCRYPT_JOURNAL_GUID }, 4813e1eb766Skrw { 0, "Ceph OSD", CEPH_OSD_GUID }, 4823e1eb766Skrw { 0, "Ceph dm-crypt OSD", CEPH_DMCRYPT_OSD_GUID }, 4833e1eb766Skrw { 0, "Ceph Disk in creation", CEPH_DISK_IN_CREATION_GUID }, 4843e1eb766Skrw { 0, "Ceph dm-crypt disk in creation", CEPH_DMCRYPT_CREATNG_DISK_GUID }, 4853e1eb766Skrw { 0, "Ceph Block", CEPH_BLOCK_GUID }, 4863e1eb766Skrw { 0, "Ceph Block DB", CEPH_BLOCK_DB_GUID }, 4873e1eb766Skrw { 0, "Ceph Block write-ahead log", CEPH_BLOCK_LOG_GUID }, 4883e1eb766Skrw { 0, "Ceph Lockbox for dm-crypt keys", CEPH_DMCRYPT_KEYS_LOCKBOX_GUID }, 4893e1eb766Skrw { 0, "Ceph Multipath OSD", CEPH_MULTIPATH_OSD_GUID }, 4903e1eb766Skrw { 0, "Ceph Multipath journal", CEPH_MULTIPATH_JOURNAL_GUID }, 4913e1eb766Skrw { 0, "Ceph Multipath block A", CEPH_MULTIPATH_BLOCK_A_GUID }, 4923e1eb766Skrw { 0, "Ceph Multipath block B", CEPH_MULTIPATH_BLOCK_B_GUID }, 4933e1eb766Skrw { 0, "Ceph Multipath block DB", CEPH_MULTIPATH_BLOCK_DB_GUID }, 4943e1eb766Skrw { 0, "Ceph Multipath block log", CEPH_MULTIPATH_BLOCK_LOG_GUID }, 4953e1eb766Skrw { 0, "Ceph dm-crypt block", CEPH_DMCRYPT_BLOCK_GUID }, 4963e1eb766Skrw { 0, "Ceph dm-crypt block DB", CEPH_DMCRYPT_BLOCK_DB_GUID }, 4973e1eb766Skrw { 0, "Ceph dm-crypt block log", CEPH_DMCRYPT_BLOCK_LOG_GUID }, 4983e1eb766Skrw { 0, "Ceph dm-crypt LUKS journal", CEPH_DMCRYPT_LUKS_JOURNAL_GUID }, 4993e1eb766Skrw { 0, "Ceph dm-crypt LUKS block", CEPH_DMCRYPT_LUKS_BLOCK_GUID }, 5003e1eb766Skrw { 0, "Ceph dm-crypt LUKS block DB", CEPH_DMCRYPT_LUKS_BLOCK_DB_GUID }, 5013e1eb766Skrw { 0, "Ceph dm-crypt LUKS log", CEPH_DMCRYPT_LUKS_LOG_GUID }, 5023e1eb766Skrw { 0, "Ceph dm-crypt LUKS OSD", CEPH_DMCRYPT_LUKS_OSD_GUID }, 5033e1eb766Skrw 5043e1eb766Skrw /* QNX */ 5053e1eb766Skrw { 0, "QNX (6) Power-safe file system", QNX_POWER_SAFE_FS_GUID }, 5063e1eb766Skrw 5073e1eb766Skrw /* Plan 9 */ 5083e1eb766Skrw { 0, "Plan9", PLAN9_GUID }, 5093e1eb766Skrw 5103e1eb766Skrw /* VMWare ESX */ 5113e1eb766Skrw { 0, "VMWare vmkcore (coredump)", VMWARE_VMKCORE_GUID }, 5123e1eb766Skrw { 0, "VMWare VMFS filesystem", VMWARE_VMFS_FILESYSTEM_GUID }, 5133e1eb766Skrw { 0, "VMWare Reserved", VMWARE_RESERVED_GUID }, 5143e1eb766Skrw 5153e1eb766Skrw /* Android-IA */ 5163e1eb766Skrw { 0, "Android-IA Bootloader", ANDROID_IA_BOOT_GUID }, 5173e1eb766Skrw { 0, "Android-IA Bootloader2", ANDROID_IA_BOOT2_GUID }, 5183e1eb766Skrw { 0, "Android-IA Boot", ANDROID_IA_BOOT3_GUID }, 5193e1eb766Skrw { 0, "Android-IA Recovery", ANDROID_IA_RECOVERY_GUID }, 5203e1eb766Skrw { 0, "Android-IA Misc", ANDROID_IA_MISC_GUID }, 5213e1eb766Skrw { 0, "Android-IA Metadata", ANDROID_IA_METADATA_GUID }, 5223e1eb766Skrw { 0, "Android-IA System", ANDROID_IA_SYSTEM_GUID }, 5233e1eb766Skrw { 0, "Android-IA Cache", ANDROID_IA_CACHE_GUID }, 5243e1eb766Skrw { 0, "Android-IA Data", ANDROID_IA_DATA_GUID }, 5253e1eb766Skrw { 0, "Android-IA Persistent", ANDROID_IA_PERSISTENT_GUID }, 5263e1eb766Skrw { 0, "Android-IA Vendor", ANDROID_IA_VENDOR_GUID }, 5273e1eb766Skrw { 0, "Android-IA Config", ANDROID_IA_CFG_GUID }, 5283e1eb766Skrw { 0, "Android-IA Factory", ANDROID_IA_FACTORY_GUID }, 5293e1eb766Skrw { 0, "Android-IA Factory (alt)", ANDROID_IA_FACTORY_ALT_GUID }, 5303e1eb766Skrw { 0, "Android-IA Fastboot/Tertiary", ANDROID_IA_FASTBOOT_GUID }, 5313e1eb766Skrw { 0, "Android-IA OEM", ANDROID_IA_OEM_GUID }, 5323e1eb766Skrw 5333e1eb766Skrw /* Android 6.0+ ARM */ 5343e1eb766Skrw { 0, "Android 6.0+ ARM EXT", ANDROID_6_0_ARM_EXT_GUID }, 5353e1eb766Skrw { 0, "Android 6.0+ ARM Meta", ANDROID_6_0_ARM_META_GUID }, 5363e1eb766Skrw 5373e1eb766Skrw /* ONIE */ 5383e1eb766Skrw { 0, "ONIE Boot", ONIE_BOOT_GUID }, 5393e1eb766Skrw { 0, "ONIE Config", ONIE_CFG_GUID }, 5403e1eb766Skrw 5413e1eb766Skrw /* PowerPC */ 5423e1eb766Skrw { 0, "PPC PReP boot", PPC_PREP_BOOT_GUID }, 5433e1eb766Skrw 5443e1eb766Skrw /* Atari TOS */ 5453e1eb766Skrw { 0, "Atari TOS Basic data", ATARI_TOS_BASIC_DATA_GUID }, 5463e1eb766Skrw 5473e1eb766Skrw /* VeraCrypt */ 5483e1eb766Skrw { 0, "Veracrypt Encrypted data", VERACRYPT_ENCRYPTED_DATA_GUID }, 5493e1eb766Skrw 5503e1eb766Skrw /* ArcaOS (a.k.a. OS/2) */ 5513e1eb766Skrw { 0, "ArcaOS Type 1 (OS/2)", ARCAOS_TYPE_1_GUID }, 5523e1eb766Skrw 5533e1eb766Skrw /* Storage Performance Development Kit (SPDK) */ 5543e1eb766Skrw { 0, "SPDK block device", SPDK_BLOCK_DEVICE_GUID }, 5553e1eb766Skrw 5563e1eb766Skrw /* barebox bootloader */ 5573e1eb766Skrw { 0, "Barebox barebox-state", BAREBOX_BAREBOX_STATE_GUID }, 5583e1eb766Skrw 5593e1eb766Skrw /* U-Boot bootloader */ 5603e1eb766Skrw { 0, "U-Boot environment", U_BOOT_ENVIRONMENT_GUID }, 5613e1eb766Skrw 5623e1eb766Skrw /* SoftRAID (?) */ 5633e1eb766Skrw { 0, "Softraid Status", SOFTRAID_STATUS_GUID }, 5643e1eb766Skrw { 0, "Softraid Scratch", SOFTRAID_SCRATCH_GUID }, 5653e1eb766Skrw { 0, "Softraid Volume", SOFTRAID_VOLUME_GUID }, 5663e1eb766Skrw { 0, "Softraid Cache", SOFTRAID_CACHE_GUID }, 5673e1eb766Skrw 5683e1eb766Skrw /* Fuchsia standard partitions */ 5693e1eb766Skrw { 0, "Fuchsia bootloader (ABR)", FUCHSIA_BOOT_GUID }, 5703e1eb766Skrw { 0, "Fuchsia encrypted system data", FUCHSIA_ENCRYPTED_SYS_GUID }, 5713e1eb766Skrw { 0, "Fucshia boot metadata (ABR)", FUCSHIA_BOOT_METADATA_GUID }, 5723e1eb766Skrw { 0, "Fuchsia RO Factory system data", FUCHSIA_RO_FACTORY_SYS_GUID }, 5733e1eb766Skrw { 0, "Fuchsia RO Factory boot data", FUCHSIA_RO_FACTORY_BOOT_GUID }, 5743e1eb766Skrw { 0, "Fuchsia Volume Manager", FUCHSIA_VOLUME_MANAGER_GUID }, 5753e1eb766Skrw { 0, "Fuchsia Verified boot meta (ABR)",FUCHSIA_VERIFIED_BOOT_META_GUID }, 5763e1eb766Skrw { 0, "Fuchsia Zircon boot (ABR)", FUCHSIA_ZIRCON_BOOT_ABR_GUID }, 5773e1eb766Skrw 5783e1eb766Skrw /* Fuchsia legacy partitions */ 5793e1eb766Skrw { 0, "Fuchsia Legacy system", FUCHSIA_L_SYSTEM_GUID }, 5803e1eb766Skrw { 0, "Fuchsia Legacy data", FUCHSIA_L_DATA_GUID }, 5813e1eb766Skrw { 0, "Fuchsia Legacy install", FUCHSIA_L_INSTALL_GUID }, 5823e1eb766Skrw { 0, "Fuchsia Legacy blob", FUCHSIA_L_BLOB_GUID }, 5833e1eb766Skrw { 0, "Fuchsia Legacy fvm", FUCHSIA_L_FVM_GUID }, 5843e1eb766Skrw { 0, "Fuchsia Legacy Zircon boot (A)", FUCHSIA_L_ZIRCON_BOOTA_GUID }, 5853e1eb766Skrw { 0, "Fuchsia Legacy Zircon boot (B)", FUCHSIA_L_ZIRCON_BOOTB_GUID }, 5863e1eb766Skrw { 0, "Fuchsia Legacy Zircon boot (R)", FUCHSIA_L_ZIRCON_BOOTR_GUID }, 5873e1eb766Skrw { 0, "Fuchsia Legacy sys-config", FUCHSIA_L_SYS_CFG_GUID }, 5883e1eb766Skrw { 0, "Fuchsia Legacy factory-config", FUCHSIA_L_FACTORY_CFG_GUID }, 5893e1eb766Skrw { 0, "Fuchsia Legacy bootloader", FUCHSIA_L_BOOT_GUID }, 5903e1eb766Skrw { 0, "Fuchsia Legacy guid-test", FUCHSIA_L_TEST_GUID }, 5913e1eb766Skrw { 0, "Fuchsia Legacy Verified boot mA", FUCHSIA_L_VERIFIED_BOOTM_A_GUID }, 5923e1eb766Skrw { 0, "Fuchsia Legacy Verified boot mB", FUCHSIA_L_VERIFIED_BOOTM_B_GUID }, 5933e1eb766Skrw { 0, "Fuchsia Legacy Verified boot mR", FUCHSIA_L_VERIFIED_BOOTM_R_GUID }, 5943e1eb766Skrw { 0, "Fuchsia Legacy misc", FUCHSIA_L_MISC_GUID }, 5953e1eb766Skrw { 0, "Fuchsia Legacy emmc-boot1", FUCHSIA_L_EMMC_BOOT1_GUID }, 5963e1eb766Skrw { 0, "Fuchsia Legacy emmc-boot2", FUCHSIA_L_EMMC_BOOT2_GUID }, 5973e1eb766Skrw 5983e1eb766Skrw /* Systemd Discoverable Partitions */ 5993e1eb766Skrw { 0, "Linux x86-64 root verity", LINUX_X86_64_ROOT_VERITY_GUID }, 6003e1eb766Skrw { 0, "Linux IA-64 /usr", LINUX_IA_64_USR_GUID }, 6013e1eb766Skrw { 0, "Linux /var", LINUX_VAR_GUID }, 6023e1eb766Skrw { 0, "Linux Arm64 /usr verity", LINUX_ARM64_USR_VERITY_GUID }, 6033e1eb766Skrw { 0, "Linux Arm32 root verity", LINUX_ARM32_ROOT_VERITY_GUID }, 6043e1eb766Skrw { 0, "Linux user's home", LINUX_USER_HOME_GUID }, 6053e1eb766Skrw { 0, "Linux x86-64 /usr verity", LINUX_X86_64_USR_VERITY_GUID }, 6063e1eb766Skrw { 0, "Linux Arm32 /usr", LINUX_ARM32_USR_GUID }, 6073e1eb766Skrw { 0, "Linux /var/tmp", LINUX_VAR_TMP_GUID }, 6083e1eb766Skrw { 0, "Linux IA-64 /usr verity", LINUX_IA_64_USR_VERITY_GUID }, 6093e1eb766Skrw { 0, "Linux x86 /usr", LINUX_X86_USR_GUID }, 6103e1eb766Skrw { 0, "Linux x86-64 /usr", LINUX_X86_64_USR_GUID }, 6113e1eb766Skrw { 0, "Linux IA-64 root verity", LINUX_IA_64_ROOT_VERITY_GUID }, 6123e1eb766Skrw { 0, "Linux x86 /usr verity", LINUX_X86_USR_VERITY_GUID }, 6133e1eb766Skrw { 0, "Linux IA-64 root", LINUX_IA_64_ROOT_GUID }, 6143e1eb766Skrw { 0, "Linux Arm64 /usr", LINUX_ARM64_USR_GUID }, 6153e1eb766Skrw { 0, "Linux Arm32 /usr verity", LINUX_ARM32_USR_VERITY_GUID }, 6163e1eb766Skrw { 0, "Linux x86 root verity", LINUX_X86_ROOT_VERITY_GUID }, 6173e1eb766Skrw { 0, "Linux Arm64 root verity", LINUX_ARM64_ROOT_VERITY_GUID }, 6183e1eb766Skrw #endif 6197d916471Skrw }; 6207d916471Skrw 6217d916471Skrw struct menu_item { 6227d916471Skrw int mi_menuid; /* Unique hex octet */ 6237d916471Skrw int mi_mbrid; /* -1 == not on MBR menu */ 6247d916471Skrw char *mi_name; /* Truncated at 14 chars */ 6257d916471Skrw char *mi_guid; /* NULL == not on GPT menu */ 6267d916471Skrw }; 6277d916471Skrw 6287d916471Skrw const struct menu_item menu_items[] = { 6297691286fSkrw { 0x00, 0x00, "Unused", UNUSED_GUID }, 6307d916471Skrw { 0x01, 0x01, "DOS FAT-12", MICROSOFT_BASIC_DATA_GUID }, 6317d916471Skrw { 0x02, 0x02, "XENIX /", NULL }, 6327d916471Skrw { 0x03, 0x03, "XENIX /usr", NULL }, 6337d916471Skrw { 0x04, 0x04, "DOS FAT-16", MICROSOFT_BASIC_DATA_GUID }, 6347d916471Skrw { 0x05, 0x05, "Extended DOS", NULL }, 6357d916471Skrw { 0x06, 0x06, "DOS > 32MB", MICROSOFT_BASIC_DATA_GUID }, 6367d916471Skrw { 0x07, 0x07, "NTFS", MICROSOFT_BASIC_DATA_GUID }, 6377d916471Skrw { 0x08, 0x08, "AIX fs", NULL }, 6387d916471Skrw { 0x09, 0x09, "AIX/Coherent", NULL }, 6397d916471Skrw { 0x0A, 0x0A, "OS/2 Bootmgr", NULL }, 6407d916471Skrw { 0x0B, 0x0B, "Win95 FAT-32", MICROSOFT_BASIC_DATA_GUID }, 6417d916471Skrw { 0x0C, 0x0C, "Win95 FAT32L", MICROSOFT_BASIC_DATA_GUID }, 6427691286fSkrw { 0x0D, -1, "BIOS boot", BIOS_BOOT_GUID }, 6437d916471Skrw { 0x0E, 0x0E, "DOS FAT-16", MICROSOFT_BASIC_DATA_GUID }, 6447d916471Skrw { 0x0F, 0x0F, "Extended LBA", NULL }, 6457d916471Skrw { 0x10, 0x10, "OPUS", NULL }, 6467d916471Skrw { 0x11, 0x11, "OS/2 hidden", MICROSOFT_BASIC_DATA_GUID }, 6477d916471Skrw { 0x12, 0x12, "Compaq Diag", NULL }, 6487d916471Skrw { 0x14, 0x14, "OS/2 hidden", MICROSOFT_BASIC_DATA_GUID }, 6497d916471Skrw { 0x16, 0x16, "OS/2 hidden", MICROSOFT_BASIC_DATA_GUID }, 6507d916471Skrw { 0x17, 0x17, "OS/2 hidden", MICROSOFT_BASIC_DATA_GUID }, 6517d916471Skrw { 0x18, 0x18, "AST swap", NULL }, 6527d916471Skrw { 0x19, 0x19, "Willowtech", NULL }, 6537d916471Skrw { 0x1C, 0x1C, "ThinkPad Rec", MICROSOFT_BASIC_DATA_GUID }, 6547d916471Skrw { 0x20, 0x20, "Willowsoft", NULL }, 6557d916471Skrw { 0x24, 0x24, "NEC DOS", NULL }, 6567691286fSkrw { 0x27, 0x27, "Win Recovery", WIN_RECOVERY_GUID }, 6577d916471Skrw { 0x38, 0x38, "Theos", NULL }, 6587d916471Skrw { 0x39, 0x39, "Plan 9", NULL }, 6597d916471Skrw { 0x40, 0x40, "VENIX 286", NULL }, 6607d916471Skrw { 0x41, 0x41, "Lin/Minux DR", NULL }, 6617691286fSkrw { 0x42, 0x42, "LinuxSwap DR", LINUXSWAP_DR_GUID }, 6627d916471Skrw { 0x43, 0x43, "Linux DR", NULL }, 6637d916471Skrw { 0x4D, 0x4D, "QNX 4.2 Pri", NULL }, 6647d916471Skrw { 0x4E, 0x4E, "QNX 4.2 Sec", NULL }, 6657d916471Skrw { 0x4F, 0x4F, "QNX 4.2 Ter", NULL }, 6667d916471Skrw { 0x50, 0x50, "DM", NULL }, 6677d916471Skrw { 0x51, 0x51, "DM", NULL }, 6687d916471Skrw { 0x52, 0x52, "CP/M or SysV", NULL }, 6697d916471Skrw { 0x53, 0x53, "DM", NULL }, 6707d916471Skrw { 0x54, 0x54, "Ontrack", NULL }, 6717d916471Skrw { 0x55, 0x55, "EZ-Drive", NULL }, 6727d916471Skrw { 0x56, 0x56, "Golden Bow", NULL }, 6737d916471Skrw { 0x5C, 0x5C, "Priam" , NULL }, 6747d916471Skrw { 0x61, 0x61, "SpeedStor", NULL }, 6757d916471Skrw { 0x63, 0x63, "ISC, HURD, *", NULL }, 6767d916471Skrw { 0x64, 0x64, "NetWare 2.xx", NULL }, 6777d916471Skrw { 0x65, 0x65, "NetWare 3.xx", NULL }, 6787d916471Skrw { 0x66, 0x66, "NetWare 386", NULL }, 6797d916471Skrw { 0x67, 0x67, "Novell", NULL }, 6807d916471Skrw { 0x68, 0x68, "Novell", NULL }, 6817d916471Skrw { 0x69, 0x69, "Novell", NULL }, 6827d916471Skrw { 0x70, 0x70, "DiskSecure", NULL }, 6837d916471Skrw { 0x75, 0x75, "PCIX", NULL }, 6847691286fSkrw { 0x7F, -1, "Chrome Kernel",CHROME_KERNEL_GUID }, 6857d916471Skrw { 0x80, 0x80, "Minix (old)", NULL }, 6867d916471Skrw { 0x81, 0x81, "Minix (new)", NULL }, 6877691286fSkrw { 0x82, 0x82, "Linux swap", LINUX_SWAP_GUID }, 6887691286fSkrw { 0x83, 0x83, "Linux files*", LINUX_FILES_GUID }, 6897d916471Skrw { 0x84, 0x84, "OS/2 hidden", NULL }, 6907d916471Skrw { 0x85, 0x85, "Linux ext.", NULL }, 6917d916471Skrw { 0x86, 0x86, "NT FAT VS", NULL }, 6927d916471Skrw { 0x87, 0x87, "NTFS VS", NULL }, 6937691286fSkrw { 0x8E, 0x8E, "Linux LVM", LINUX_LVM_GUID }, 6947d916471Skrw { 0x93, 0x93, "Amoeba FS", NULL }, 6957d916471Skrw { 0x94, 0x94, "Amoeba BBT", NULL }, 6967d916471Skrw { 0x99, 0x99, "Mylex" , NULL }, 6977d916471Skrw { 0x9F, 0x9F, "BSDI", NULL }, 6987d916471Skrw { 0xA0, 0xA0, "NotebookSave", NULL }, 6997691286fSkrw { 0xA5, 0xA5, "FreeBSD", FREEBSD_GUID }, 7007691286fSkrw { 0xA6, 0xA6, "OpenBSD", OPENBSD_GUID }, 7017d916471Skrw { 0xA7, 0xA7, "NeXTSTEP", NULL }, 7027691286fSkrw { 0xA8, 0xA8, "MacOS X", MACOS_X_GUID }, 7037691286fSkrw { 0xA9, 0xA9, "NetBSD", NETBSD_GUID }, 7047691286fSkrw { 0xAB, 0xAB, "MacOS X boot", MACOS_X_BOOT_GUID }, 7057691286fSkrw { 0xAF, 0xAF, "MacOS X HFS+", MACOS_X_HFS_GUID }, 7067691286fSkrw { 0xB0, -1, "APFS", APFS_GUID }, 7077691286fSkrw { 0xB1, -1, "APFS ISC", APFS_ISC_GUID }, 7087691286fSkrw { 0xB2, -1, "APFS Recovery",APFS_RECOVERY_GUID }, 7097691286fSkrw { 0xB3, -1, "HiFive FSBL", HIFIVE_FSBL_GUID }, 7107691286fSkrw { 0xB4, -1, "HiFive BBL", HIFIVE_BBL_GUID }, 7117d916471Skrw { 0xB7, 0xB7, "BSDI filesy*", NULL }, 7127d916471Skrw { 0xB8, 0xB8, "BSDI swap", NULL }, 7137691286fSkrw { 0xBF, 0xBF, "Solaris", SOLARIS_GUID }, 7147d916471Skrw { 0xC0, 0xC0, "CTOS", NULL }, 7157d916471Skrw { 0xC1, 0xC1, "DRDOSs FAT12", NULL }, 7167d916471Skrw { 0xC4, 0xC4, "DRDOSs < 32M", NULL }, 7177d916471Skrw { 0xC6, 0xC6, "DRDOSs >=32M", NULL }, 7187d916471Skrw { 0xC7, 0xC7, "HPFS Disbled", NULL }, 7197d916471Skrw { 0xDB, 0xDB, "CPM/C.DOS/C*", NULL }, 7207d916471Skrw { 0xDE, 0xDE, "Dell Maint", NULL }, 7217d916471Skrw { 0xE1, 0xE1, "SpeedStor", NULL }, 7227d916471Skrw { 0xE3, 0xE3, "SpeedStor", NULL }, 7237d916471Skrw { 0xE4, 0xE4, "SpeedStor", NULL }, 7247691286fSkrw { 0xEB, 0xEB, "BeOS/i386", BEOS_I386_GUID }, 7257691286fSkrw { 0xEC, -1, "Legacy MBR", LEGACY_MBR_GUID }, 7267d916471Skrw { 0xEE, 0xEE, "EFI GPT", NULL }, 7277d916471Skrw { 0xEF, 0xEF, "EFI Sys", EFI_SYSTEM_PARTITION_GUID }, 7287d916471Skrw { 0xF1, 0xF1, "SpeedStor", NULL }, 7297d916471Skrw { 0xF2, 0xF2, "DOS 3.3+ Sec", NULL }, 7307d916471Skrw { 0xF4, 0xF4, "SpeedStor", NULL }, 7317d916471Skrw { 0xFF, 0xFF, "Xenix BBT", NULL }, 73295e8765cSkrw }; 73395e8765cSkrw 734f2ec1a13Skrw const struct gpt_type *find_gpt_type(const struct uuid *); 735*b5ff5246Skrw const char *find_uuid_desc(const struct uuid *); 736*b5ff5246Skrw int gpt_item(const unsigned int); 737*b5ff5246Skrw int uuid_attr(const struct uuid *); 738*b5ff5246Skrw 739867d4347Skrw const struct mbr_type *find_mbr_type(const int); 74078d83ce9Skrw const char *find_mbr_desc(const int); 7417d916471Skrw int mbr_item(const unsigned int); 742*b5ff5246Skrw 7437d916471Skrw void print_menu(int (*)(const unsigned int), 7447d916471Skrw const unsigned int); 745*b5ff5246Skrw int nth_menu_item(int (*)(const unsigned int), 746*b5ff5246Skrw const unsigned int, unsigned int); 747c96c378cSkrw 748c96c378cSkrw const struct gpt_type * 749c96c378cSkrw find_gpt_type(const struct uuid *uuid) 750c96c378cSkrw { 75178d83ce9Skrw const struct gpt_type *gt = NULL; 75278d83ce9Skrw char *guid; 753c96c378cSkrw unsigned int i; 754c96c378cSkrw uint32_t status; 755c96c378cSkrw 75678d83ce9Skrw if (uuid != NULL) { 75778d83ce9Skrw uuid_to_string(uuid, &guid, &status); 758c96c378cSkrw if (status == uuid_s_ok) { 75978d83ce9Skrw for (i = 0; i < nitems(gpt_types) && gt == NULL; i++) { 76078d83ce9Skrw if (strcasecmp(gpt_types[i].gt_guid, guid) == 0) 76178d83ce9Skrw gt = &gpt_types[i]; 762c96c378cSkrw } 76378d83ce9Skrw } 76478d83ce9Skrw free(guid); 76578d83ce9Skrw } 766c96c378cSkrw 76778d83ce9Skrw return gt; 76878d83ce9Skrw } 76978d83ce9Skrw 77078d83ce9Skrw const char * 77178d83ce9Skrw find_uuid_desc(const struct uuid *uuid) 77278d83ce9Skrw { 77378d83ce9Skrw const struct gpt_type *gt; 77478d83ce9Skrw unsigned int i; 77578d83ce9Skrw 77678d83ce9Skrw gt = find_gpt_type(uuid); 77778d83ce9Skrw if (gt != NULL) { 77878d83ce9Skrw if (gt->gt_desc != NULL) 77978d83ce9Skrw return gt->gt_desc; 78078d83ce9Skrw for (i = 0; i < nitems(menu_items); i++) { 78178d83ce9Skrw if (gpt_item(i) == 0 && 78278d83ce9Skrw strcasecmp(menu_items[i].mi_guid, gt->gt_guid) == 0) 78378d83ce9Skrw return menu_items[i].mi_name; 78478d83ce9Skrw } 78578d83ce9Skrw } 78678d83ce9Skrw 787c96c378cSkrw return NULL; 788c96c378cSkrw } 789c96c378cSkrw 790*b5ff5246Skrw int 791*b5ff5246Skrw gpt_item(const unsigned int item) 792*b5ff5246Skrw { 793*b5ff5246Skrw return menu_items[item].mi_guid == NULL; 794*b5ff5246Skrw } 795*b5ff5246Skrw 796*b5ff5246Skrw int 797*b5ff5246Skrw uuid_attr(const struct uuid *uuid) 798*b5ff5246Skrw { 799*b5ff5246Skrw const struct gpt_type *gt; 800*b5ff5246Skrw 801*b5ff5246Skrw gt = find_gpt_type(uuid); 802*b5ff5246Skrw if (gt == NULL) 803*b5ff5246Skrw return 0; 804*b5ff5246Skrw else 805*b5ff5246Skrw return gt->gt_attr; 806*b5ff5246Skrw } 807*b5ff5246Skrw 808867d4347Skrw const struct mbr_type * 809867d4347Skrw find_mbr_type(const int id) 810c96c378cSkrw { 81178d83ce9Skrw const struct mbr_type *mt = NULL; 812867d4347Skrw unsigned int i; 813c96c378cSkrw 81478d83ce9Skrw if (id >= 0) { 815c96c378cSkrw for (i = 0; i < nitems(mbr_types); i++) { 816c96c378cSkrw if (mbr_types[i].mt_type == id) 81778d83ce9Skrw mt = &mbr_types[i]; 81878d83ce9Skrw } 81978d83ce9Skrw } 82078d83ce9Skrw 82178d83ce9Skrw return mt; 82278d83ce9Skrw } 82378d83ce9Skrw 82478d83ce9Skrw const char * 82578d83ce9Skrw find_mbr_desc(const int mbrid) 82678d83ce9Skrw { 82778d83ce9Skrw const struct mbr_type *mt; 82878d83ce9Skrw unsigned int i; 82978d83ce9Skrw 83078d83ce9Skrw mt = find_mbr_type(mbrid); 83178d83ce9Skrw if (mt != NULL) { 83278d83ce9Skrw if (mt->mt_desc != NULL) 83378d83ce9Skrw return mt->mt_desc; 83478d83ce9Skrw for (i = 0; i < nitems(menu_items); i++) { 83578d83ce9Skrw if (mbr_item(i) == 0 && 83678d83ce9Skrw menu_items[i].mi_mbrid == mt->mt_type) 83778d83ce9Skrw return menu_items[i].mi_name; 83878d83ce9Skrw } 839c96c378cSkrw } 840c96c378cSkrw 841867d4347Skrw return NULL; 842c96c378cSkrw } 843c96c378cSkrw 844f458660aSkrw int 845*b5ff5246Skrw mbr_item(const unsigned int item) 846f458660aSkrw { 847*b5ff5246Skrw return menu_items[item].mi_mbrid == -1; 848f458660aSkrw } 849f2ec1a13Skrw 8507d916471Skrw void 8517d916471Skrw print_menu(int (*test)(const unsigned int), const unsigned int columns) 8527d916471Skrw { 8537d916471Skrw int col, col0; 8547d916471Skrw unsigned int count, i, j, rows; 8557d916471Skrw 8567d916471Skrw count = 0; 8577d916471Skrw for (i = 0; i < nitems(menu_items); i++) 8587d916471Skrw if (test(i) == 0) 8597d916471Skrw count++; 8607d916471Skrw rows = (count + columns - 1) / columns; 8617d916471Skrw 8627d916471Skrw col0 = -1; 8637d916471Skrw for (i = 0; i < rows; i++) { 8647d916471Skrw col0 = nth_menu_item(test, col0, 1); 8657d916471Skrw printf("%02X %-15s", menu_items[col0].mi_menuid, 8667d916471Skrw menu_items[col0].mi_name); 8677d916471Skrw for (j = 1; j < columns; j++) { 8687d916471Skrw col = nth_menu_item(test, col0, j * rows); 8697d916471Skrw if (col == -1) 8707d916471Skrw break; 8717d916471Skrw printf("%02X %-15s", menu_items[col].mi_menuid, 8727d916471Skrw menu_items[col].mi_name); 8737d916471Skrw } 8747d916471Skrw printf("\n"); 8757d916471Skrw } 8767d916471Skrw } 8777d916471Skrw 8787d916471Skrw int 8797d916471Skrw nth_menu_item(int (*test)(const unsigned int), const unsigned int last, 8807d916471Skrw unsigned int n) 8817d916471Skrw { 8827d916471Skrw unsigned int i; 8837d916471Skrw 8847d916471Skrw for (i = last + 1; i < nitems(menu_items); i++) { 8857d916471Skrw if (test(i) == 0) { 8867d916471Skrw n--; 8877d916471Skrw if (n == 0) 8887d916471Skrw return i; 8897d916471Skrw } 8907d916471Skrw } 8917d916471Skrw 8927d916471Skrw return -1; 8937d916471Skrw } 8947d916471Skrw 89595e8765cSkrw int 896490259bdSkrw PRT_protected_uuid(const struct uuid *uuid) 89795e8765cSkrw { 898f458660aSkrw const struct gpt_type *gt; 8998e294713Skrw unsigned int pn; 9008e294713Skrw 901f458660aSkrw gt = find_gpt_type(uuid); 902f458660aSkrw if (gt && gt->gt_attr & GTATTR_PROTECT) 903f458660aSkrw return 1; 90495e8765cSkrw 905e92bde66Skrw if (gt && strcasecmp(gt->gt_guid, EFI_SYSTEM_PARTITION_GUID) == 0) { 9062de77560Skrw for (pn = 0; pn < gh.gh_part_num; pn++) { 907f458660aSkrw if (uuid_attr(&gp[pn].gp_type) & GTATTR_PROTECT_EFISYS) 908f458660aSkrw return 1; 90995e8765cSkrw } 91065deb39bSkrw } 91195e8765cSkrw 9128e294713Skrw return 0; 91395e8765cSkrw } 91495e8765cSkrw 9154b464610Sderaadt void 916a0193349Skrw PRT_print_mbrmenu(char *lbuf, size_t lbuflen) 9174b464610Sderaadt { 9187d916471Skrw #define MBR_MENU_COLUMNS 4 9194b464610Sderaadt 920c2ad5584Sderaadt printf("Choose from the following Partition id values:\n"); 9217d916471Skrw print_menu(mbr_item, MBR_MENU_COLUMNS); 922a0193349Skrw 923a0193349Skrw memset(lbuf, 0, lbuflen); /* Just continue. */ 9245308a554Skrw } 9255308a554Skrw 9265308a554Skrw void 927a0193349Skrw PRT_print_gptmenu(char *lbuf, size_t lbuflen) 9285308a554Skrw { 9297d916471Skrw #define GPT_MENU_COLUMNS 4 9305308a554Skrw 9315308a554Skrw printf("Choose from the following Partition id values:\n"); 9327d916471Skrw print_menu(gpt_item, GPT_MENU_COLUMNS); 933a0193349Skrw 934a0193349Skrw memset(lbuf, 0, lbuflen); /* Just continue. */ 935d20bdfc6Skrw } 936a1705421Sweingart 937a1705421Sweingart void 9380cd9e2afSkrw PRT_parse(const struct dos_partition *dp, const uint64_t lba_self, 9390cd9e2afSkrw const uint64_t lba_firstembr, struct prt *prt) 940a1705421Sweingart { 941ca2e86e1Sprovos off_t off; 942b87d3542Skrw uint32_t t; 943a1705421Sweingart 944ee38fe33Skrw prt->prt_flag = dp->dp_flag; 945ee38fe33Skrw prt->prt_id = dp->dp_typ; 946a1705421Sweingart 947ee38fe33Skrw if ((prt->prt_id == DOSPTYP_EXTEND) || (prt->prt_id == DOSPTYP_EXTENDL)) 948061e6e0aSkrw off = lba_firstembr; 949c3e3230dSderaadt else 950061e6e0aSkrw off = lba_self; 951ca2e86e1Sprovos 952ee38fe33Skrw memcpy(&t, &dp->dp_start, sizeof(uint32_t)); 953ee38fe33Skrw prt->prt_bs = letoh32(t) + off; 954ee38fe33Skrw memcpy(&t, &dp->dp_size, sizeof(uint32_t)); 955ee38fe33Skrw prt->prt_ns = letoh32(t); 956ee38fe33Skrw if (prt->prt_id == DOSPTYP_EFI && prt->prt_ns == UINT32_MAX) 957ee38fe33Skrw prt->prt_ns = DL_GETDSIZE(&dl) - prt->prt_bs; 9584ed7cd7eSrahnds } 95949241bdaSkrw 960a1705421Sweingart void 96199e0469cSkrw PRT_make(const struct prt *prt, const uint64_t lba_self, 96299e0469cSkrw const uint64_t lba_firstembr, struct dos_partition *dp) 963a1705421Sweingart { 96477392607Skrw struct chs start, end; 9650cd9e2afSkrw uint64_t off, t; 966c3e3230dSderaadt 9676aca8866Skrw if (prt->prt_ns == 0 || prt->prt_id == DOSPTYP_UNUSED) { 9686aca8866Skrw memset(dp, 0, sizeof(*dp)); 9696aca8866Skrw return; 9706aca8866Skrw } 9716aca8866Skrw 972ee38fe33Skrw if ((prt->prt_id == DOSPTYP_EXTEND) || (prt->prt_id == DOSPTYP_EXTENDL)) 973ee38fe33Skrw off = lba_firstembr; 974c3e3230dSderaadt else 975ee38fe33Skrw off = lba_self; 976a1705421Sweingart 97777392607Skrw if (PRT_lba_to_chs(prt, &start, &end) == 0) { 97877392607Skrw dp->dp_shd = start.chs_head & 0xFF; 97977392607Skrw dp->dp_ssect = (start.chs_sect & 0x3F) | ((start.chs_cyl & 0x300) >> 2); 98077392607Skrw dp->dp_scyl = start.chs_cyl & 0xFF; 98177392607Skrw dp->dp_ehd = end.chs_head & 0xFF; 98277392607Skrw dp->dp_esect = (end.chs_sect & 0x3F) | ((end.chs_cyl & 0x300) >> 2); 98377392607Skrw dp->dp_ecyl = end.chs_cyl & 0xFF; 9844ed7cd7eSrahnds } else { 985ee38fe33Skrw memset(dp, 0xFF, sizeof(*dp)); 9864ed7cd7eSrahnds } 987a1705421Sweingart 988ee38fe33Skrw dp->dp_flag = prt->prt_flag & 0xFF; 989ee38fe33Skrw dp->dp_typ = prt->prt_id & 0xFF; 99040b0f5f3Skrw 991ee38fe33Skrw t = htole64(prt->prt_bs - off); 992ee38fe33Skrw memcpy(&dp->dp_start, &t, sizeof(uint32_t)); 993ee38fe33Skrw if (prt->prt_id == DOSPTYP_EFI && (prt->prt_bs + prt->prt_ns) > 99498952941Skrw DL_GETDSIZE(&dl)) 99598952941Skrw t = htole64(UINT32_MAX); 99698952941Skrw else 997ee38fe33Skrw t = htole64(prt->prt_ns); 998ee38fe33Skrw memcpy(&dp->dp_size, &t, sizeof(uint32_t)); 9996d5e103bSkjell } 1000a1705421Sweingart 1001a1705421Sweingart void 10027b70791fSkrw PRT_print_parthdr(void) 1003a1705421Sweingart { 1004ba49db25Skrw printf(" Starting Ending " 1005ba49db25Skrw " LBA Info:\n"); 1006ba49db25Skrw printf(" #: id C H S - C H S " 1007ba49db25Skrw "[ start: size ]\n"); 1008ba49db25Skrw printf("---------------------------------------" 1009ba49db25Skrw "----------------------------------------\n"); 10107b70791fSkrw } 10117b70791fSkrw 10127b70791fSkrw void 10137b70791fSkrw PRT_print_part(const int num, const struct prt *prt, const char *units) 10147b70791fSkrw { 10157b70791fSkrw const struct unit_type *ut; 101678d83ce9Skrw const char *desc; 101777392607Skrw struct chs start, end; 10187b70791fSkrw double size; 10197d916471Skrw unsigned int i; 10207b70791fSkrw 10213e9b7d6bSkrw size = units_size(units, prt->prt_ns, &ut); 102277392607Skrw PRT_lba_to_chs(prt, &start, &end); 102378d83ce9Skrw desc = find_mbr_desc(prt->prt_id); 102477392607Skrw 1025d8dd0570Skrw printf("%c%1d: %.2X %6llu %3u %3u - %6llu %3u %3u [%12llu:%12.0f%s] " 102678d83ce9Skrw "%-15s\n", (prt->prt_flag == DOSACTIVE) ? '*' : ' ', num, 102778d83ce9Skrw prt->prt_id, start.chs_cyl, start.chs_head, start.chs_sect, 102877392607Skrw end.chs_cyl, end.chs_head, end.chs_sect, 10297d916471Skrw prt->prt_bs, size, ut->ut_abbr, desc ? desc : "<Unknown ID>"); 103062718823Skrw 103162718823Skrw if (prt->prt_bs >= DL_GETDSIZE(&dl)) 103262718823Skrw printf("partition %d starts beyond the end of %s\n", num, 103362718823Skrw disk.dk_name); 103462718823Skrw else if (prt->prt_bs + prt->prt_ns > DL_GETDSIZE(&dl)) 103562718823Skrw printf("partition %d extends beyond the end of %s\n", num, 103662718823Skrw disk.dk_name); 1037a1705421Sweingart } 1038a1705421Sweingart 103977392607Skrw int 104077392607Skrw PRT_lba_to_chs(const struct prt *prt, struct chs *start, struct chs *end) 1041a1705421Sweingart { 104277392607Skrw uint64_t lba; 1043a1705421Sweingart 104477392607Skrw if (prt->prt_ns == 0 || prt->prt_id == DOSPTYP_UNUSED) { 104577392607Skrw memset(start, 0, sizeof(*start)); 104677392607Skrw memset(end, 0, sizeof(*end)); 104777392607Skrw return -1; 1048eb4cb19dSkjell } 1049eb4cb19dSkjell 105077392607Skrw /* 105177392607Skrw * C = LBA ÷ (HPC × SPT) 105277392607Skrw * H = (LBA ÷ SPT) mod HPC 105377392607Skrw * S = (LBA mod SPT) + 1 105477392607Skrw */ 1055a1705421Sweingart 105677392607Skrw lba = prt->prt_bs; 105777392607Skrw start->chs_cyl = lba / (disk.dk_sectors * disk.dk_heads); 105877392607Skrw start->chs_head = (lba / disk.dk_sectors) % disk.dk_heads; 105977392607Skrw start->chs_sect = (lba % disk.dk_sectors) + 1; 1060a1705421Sweingart 106177392607Skrw lba = prt->prt_bs + prt->prt_ns - 1; 106277392607Skrw end->chs_cyl = lba / (disk.dk_sectors * disk.dk_heads); 106377392607Skrw end->chs_head = (lba / disk.dk_sectors) % disk.dk_heads; 106477392607Skrw end->chs_sect = (lba % disk.dk_sectors) + 1; 1065a1705421Sweingart 106677392607Skrw if (start->chs_head > 255 || end->chs_head > 255 || 106777392607Skrw start->chs_sect > 63 || end->chs_sect > 63 || 106877392607Skrw start->chs_cyl > 1023 || end->chs_cyl > 1023) 106977392607Skrw return -1; 1070a1705421Sweingart 107177392607Skrw return 0; 1072a1705421Sweingart } 1073fba7235cSkrw 1074f2ec1a13Skrw const char * 107578d83ce9Skrw PRT_uuid_to_desc(const struct uuid *uuid) 1076f2ec1a13Skrw { 107778d83ce9Skrw static char guid[UUID_STR_LEN + 1]; 107878d83ce9Skrw const char *desc; 107978d83ce9Skrw char *str; 1080351f0068Skrw uint32_t status; 1081f2ec1a13Skrw 108278d83ce9Skrw desc = find_uuid_desc(uuid); 108378d83ce9Skrw if (desc != NULL) 108478d83ce9Skrw return desc; 10855c01edd6Skrw 108678d83ce9Skrw uuid_to_string(uuid, &str, &status); 1087f2ec1a13Skrw if (status == uuid_s_ok) 108878d83ce9Skrw strlcpy(guid, str, sizeof(guid)); 10895c01edd6Skrw else 109078d83ce9Skrw strlcpy(guid, "<Bad UUID>", sizeof(guid)); 109178d83ce9Skrw free(str); 1092f2ec1a13Skrw 109378d83ce9Skrw return guid; 1094fba7235cSkrw } 1095fba7235cSkrw 1096f3cf20a5Skrw char * 1097f3cf20a5Skrw PRT_uuid_to_menudflt(const struct uuid *uuid) 1098145e5a87Stim { 1099f3cf20a5Skrw char *dflt; 11007d916471Skrw unsigned int i; 1101f3cf20a5Skrw uint32_t status; 1102145e5a87Stim 1103f3cf20a5Skrw uuid_to_string(uuid, &dflt, &status); 1104f3cf20a5Skrw if (status != uuid_s_ok) 1105f3cf20a5Skrw return NULL; 1106fba7235cSkrw 11077d916471Skrw for (i = 0; i < nitems(menu_items); i++) { 1108f3cf20a5Skrw if (gpt_item(i) || strcasecmp(menu_items[i].mi_guid, dflt)) 1109f3cf20a5Skrw continue; 1110f3cf20a5Skrw free(dflt); 1111f3cf20a5Skrw dflt = NULL; 1112717a7d06Skrw if (asprintf(&dflt, "%02X", menu_items[i].mi_menuid) == -1) 1113f3cf20a5Skrw return NULL; 1114fba7235cSkrw } 1115fba7235cSkrw 1116f3cf20a5Skrw return dflt; 1117f3cf20a5Skrw } 1118f3cf20a5Skrw 1119f3cf20a5Skrw const char * 1120f3cf20a5Skrw PRT_menuid_to_guid(const int menuid) 1121f3cf20a5Skrw { 1122f3cf20a5Skrw unsigned int i; 1123f3cf20a5Skrw 1124f3cf20a5Skrw for (i = 0; i < nitems(menu_items); i++) { 1125f3cf20a5Skrw if (gpt_item(i) == 0 && menu_items[i].mi_menuid == menuid) 1126f3cf20a5Skrw return menu_items[i].mi_guid; 1127f3cf20a5Skrw } 1128f3cf20a5Skrw 1129f3cf20a5Skrw return NULL; 1130fba7235cSkrw } 1131