diff --git a/aif.xsd b/aif.xsd
index 9800c84..0dd27d2 100644
--- a/aif.xsd
+++ b/aif.xsd
@@ -25,79 +25,116 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -139,7 +176,9 @@
-
+
+
+
@@ -149,6 +188,7 @@
+
@@ -204,7 +244,9 @@
-
+
+
+
@@ -813,4 +855,4 @@
-
\ No newline at end of file
+
diff --git a/aif/constants.py b/aif/constants.py
index 5036924..a6a11a7 100644
--- a/aif/constants.py
+++ b/aif/constants.py
@@ -16,15 +16,6 @@ _BlockDev.ensure_init(_BlockDev.plugin_specs_from_names(('part', )))
# LIBBLOCKDEV FLAG INDEXING / PARTED <=> LIBBLOCKDEV FLAG CONVERSION
BD_PART_FLAGS = _BlockDev.PartFlag(-1)
BD_PART_FLAGS_FRIENDLY = dict(zip(BD_PART_FLAGS.value_nicks, BD_PART_FLAGS.value_names))
-BD_PARTED_MAP = {'apple_tv_recovery': 'atvrecv',
- 'cpalo': 'palo',
- 'gpt_hidden': None, # ???
- 'gpt_no_automount': None, # ???
- 'gpt_read_only': None, # ???
- 'gpt_system_part': None, # ???
- 'hpservice': 'hp-service',
- 'msft_data': 'msftdata',
- 'msft_reserved': 'msftres'}
PARTED_BD_MAP = {v: k for k, v in BD_PARTED_MAP.items() if v is not None}
BD_PART_FLAGS_IDX_FLAG = {k: v.value_nicks[0] for k, v in BD_PART_FLAGS.__flags_values__.items()}
BD_PART_FLAGS_FLAG_IDX = {v: k for k, v in BD_PART_FLAGS_IDX_FLAG.items()}
diff --git a/aif/constants_fallback.py b/aif/constants_fallback.py
index 11aaf5e..999051f 100644
--- a/aif/constants_fallback.py
+++ b/aif/constants_fallback.py
@@ -1,8 +1,11 @@
+import uuid
+##
import parted # https://www.gnu.org/software/parted/api/index.html
-
+# META
ARCH_RELENG_KEY = '4AA4767BBC9C4B1D18AE28B77F2D434B9741E8AC'
VERSION = '0.2.0'
+# blkinfo, mdstat, and pyparted are only needed for the non-gi fallbacks.
EXTERNAL_DEPS = ['blkinfo',
'gpg',
'lxml',
@@ -19,3 +22,208 @@ PARTED_FSTYPES = sorted(list(dict(vars(parted.filesystem))['fileSystemType'].key
PARTED_FLAGS = sorted(list(parted.partition.partitionFlag.values()))
PARTED_IDX_FLAG = dict(parted.partition.partitionFlag)
PARTED_FLAG_IDX = {v: k for k, v in PARTED_IDX_FLAG.items()}
+# LIBBLOCKDEV BOOTSTRAPPING (ALLOWED VALUES IN CONFIG)
+BD_PARTED_MAP = {'apple_tv_recovery': 'atvrecv',
+ 'cpalo': 'palo',
+ 'gpt_hidden': None, # No parted equivalent
+ 'gpt_no_automount': None, # No parted equivalent
+ 'gpt_read_only': None, # No parted equivalent
+ 'gpt_system_part': None, # No parted equivalent
+ 'hpservice': 'hp-service',
+ 'msft_data': 'msftdata',
+ 'msft_reserved': 'msftres'}
+# GPT FSTYPES GUIDS
+# I'm doing this now because if I didn't, I would probably need to do it later eventually.
+# https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs
+GPT_FSTYPE_GUIDS = ((1, 'EFI System', uuid.UUID(hex = 'C12A7328-F81F-11D2-BA4B-00A0C93EC93B')),
+ (2, 'MBR partition scheme', uuid.UUID(hex = '024DEE41-33E7-11D3-9D69-0008C781F39F')),
+ (3, 'Intel Fast Flash', uuid.UUID(hex = 'D3BFE2DE-3DAF-11DF-BA40-E3A556D89593')),
+ (4, 'BIOS boot', uuid.UUID(hex = '21686148-6449-6E6F-744E-656564454649')),
+ (5, 'Sony boot partition', uuid.UUID(hex = 'F4019732-066E-4E12-8273-346C5641494F')),
+ (6, 'Lenovo boot partition', uuid.UUID(hex = 'BFBFAFE7-A34F-448A-9A5B-6213EB736C22')),
+ (7, 'PowerPC PReP boot', uuid.UUID(hex = '9E1A2D38-C612-4316-AA26-8B49521E5A8B')),
+ (8, 'ONIE boot', uuid.UUID(hex = '7412F7D5-A156-4B13-81DC-867174929325')),
+ (9, 'ONIE config', uuid.UUID(hex = 'D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149')),
+ (10, 'Microsoft reserved', uuid.UUID(hex = 'E3C9E316-0B5C-4DB8-817D-F92DF00215AE')),
+ (11, 'Microsoft basic data', uuid.UUID(hex = 'EBD0A0A2-B9E5-4433-87C0-68B6B72699C7')),
+ (12, 'Microsoft LDM metadata', uuid.UUID(hex = '5808C8AA-7E8F-42E0-85D2-E1E90434CFB3')),
+ (13, 'Microsoft LDM data', uuid.UUID(hex = 'AF9B60A0-1431-4F62-BC68-3311714A69AD')),
+ (14, 'Windows recovery environment', uuid.UUID(hex = 'DE94BBA4-06D1-4D40-A16A-BFD50179D6AC')),
+ (15, 'IBM General Parallel Fs', uuid.UUID(hex = '37AFFC90-EF7D-4E96-91C3-2D7AE055B174')),
+ (16, 'Microsoft Storage Spaces', uuid.UUID(hex = 'E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D')),
+ (17, 'HP-UX data', uuid.UUID(hex = '75894C1E-3AEB-11D3-B7C1-7B03A0000000')),
+ (18, 'HP-UX service', uuid.UUID(hex = 'E2A1E728-32E3-11D6-A682-7B03A0000000')),
+ (19, 'Linux swap', uuid.UUID(hex = '0657FD6D-A4AB-43C4-84E5-0933C84B4F4F')),
+ (20, 'Linux filesystem', uuid.UUID(hex = '0FC63DAF-8483-4772-8E79-3D69D8477DE4')),
+ (21, 'Linux server data', uuid.UUID(hex = '3B8F8425-20E0-4F3B-907F-1A25A76F98E8')),
+ (22, 'Linux root (x86)', uuid.UUID(hex = '44479540-F297-41B2-9AF7-D131D5F0458A')),
+ (23, 'Linux root (ARM)', uuid.UUID(hex = '69DAD710-2CE4-4E3C-B16C-21A1D49ABED3')),
+ (24, 'Linux root (x86-64)', uuid.UUID(hex = '4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709')),
+ (25, 'Linux root (ARM-64)', uuid.UUID(hex = 'B921B045-1DF0-41C3-AF44-4C6F280D3FAE')),
+ (26, 'Linux root (IA-64)', uuid.UUID(hex = '993D8D3D-F80E-4225-855A-9DAF8ED7EA97')),
+ (27, 'Linux reserved', uuid.UUID(hex = '8DA63339-0007-60C0-C436-083AC8230908')),
+ (28, 'Linux home', uuid.UUID(hex = '933AC7E1-2EB4-4F13-B844-0E14E2AEF915')),
+ (29, 'Linux RAID', uuid.UUID(hex = 'A19D880F-05FC-4D3B-A006-743F0F84911E')),
+ (30, 'Linux extended boot', uuid.UUID(hex = 'BC13C2FF-59E6-4262-A352-B275FD6F7172')),
+ (31, 'Linux LVM', uuid.UUID(hex = 'E6D6D379-F507-44C2-A23C-238F2A3DF928')),
+ (32, 'FreeBSD data', uuid.UUID(hex = '516E7CB4-6ECF-11D6-8FF8-00022D09712B')),
+ (33, 'FreeBSD boot', uuid.UUID(hex = '83BD6B9D-7F41-11DC-BE0B-001560B84F0F')),
+ (34, 'FreeBSD swap', uuid.UUID(hex = '516E7CB5-6ECF-11D6-8FF8-00022D09712B')),
+ (35, 'FreeBSD UFS', uuid.UUID(hex = '516E7CB6-6ECF-11D6-8FF8-00022D09712B')),
+ (36, 'FreeBSD ZFS', uuid.UUID(hex = '516E7CBA-6ECF-11D6-8FF8-00022D09712B')),
+ (37, 'FreeBSD Vinum', uuid.UUID(hex = '516E7CB8-6ECF-11D6-8FF8-00022D09712B')),
+ (38, 'Apple HFS/HFS+', uuid.UUID(hex = '48465300-0000-11AA-AA11-00306543ECAC')),
+ (39, 'Apple UFS', uuid.UUID(hex = '55465300-0000-11AA-AA11-00306543ECAC')),
+ (40, 'Apple RAID', uuid.UUID(hex = '52414944-0000-11AA-AA11-00306543ECAC')),
+ (41, 'Apple RAID offline', uuid.UUID(hex = '52414944-5F4F-11AA-AA11-00306543ECAC')),
+ (42, 'Apple boot', uuid.UUID(hex = '426F6F74-0000-11AA-AA11-00306543ECAC')),
+ (43, 'Apple label', uuid.UUID(hex = '4C616265-6C00-11AA-AA11-00306543ECAC')),
+ (44, 'Apple TV recovery', uuid.UUID(hex = '5265636F-7665-11AA-AA11-00306543ECAC')),
+ (45, 'Apple Core storage', uuid.UUID(hex = '53746F72-6167-11AA-AA11-00306543ECAC')),
+ (46, 'Solaris boot', uuid.UUID(hex = '6A82CB45-1DD2-11B2-99A6-080020736631')),
+ (47, 'Solaris root', uuid.UUID(hex = '6A85CF4D-1DD2-11B2-99A6-080020736631')),
+ (48, 'Solaris /usr & Apple ZFS', uuid.UUID(hex = '6A898CC3-1DD2-11B2-99A6-080020736631')),
+ (49, 'Solaris swap', uuid.UUID(hex = '6A87C46F-1DD2-11B2-99A6-080020736631')),
+ (50, 'Solaris backup', uuid.UUID(hex = '6A8B642B-1DD2-11B2-99A6-080020736631')),
+ (51, 'Solaris /var', uuid.UUID(hex = '6A8EF2E9-1DD2-11B2-99A6-080020736631')),
+ (52, 'Solaris /home', uuid.UUID(hex = '6A90BA39-1DD2-11B2-99A6-080020736631')),
+ (53, 'Solaris alternate sector', uuid.UUID(hex = '6A9283A5-1DD2-11B2-99A6-080020736631')),
+ (54, 'Solaris reserved 1', uuid.UUID(hex = '6A945A3B-1DD2-11B2-99A6-080020736631')),
+ (55, 'Solaris reserved 2', uuid.UUID(hex = '6A9630D1-1DD2-11B2-99A6-080020736631')),
+ (56, 'Solaris reserved 3', uuid.UUID(hex = '6A980767-1DD2-11B2-99A6-080020736631')),
+ (57, 'Solaris reserved 4', uuid.UUID(hex = '6A96237F-1DD2-11B2-99A6-080020736631')),
+ (58, 'Solaris reserved 5', uuid.UUID(hex = '6A8D2AC7-1DD2-11B2-99A6-080020736631')),
+ (59, 'NetBSD swap', uuid.UUID(hex = '49F48D32-B10E-11DC-B99B-0019D1879648')),
+ (60, 'NetBSD FFS', uuid.UUID(hex = '49F48D5A-B10E-11DC-B99B-0019D1879648')),
+ (61, 'NetBSD LFS', uuid.UUID(hex = '49F48D82-B10E-11DC-B99B-0019D1879648')),
+ (62, 'NetBSD concatenated', uuid.UUID(hex = '2DB519C4-B10E-11DC-B99B-0019D1879648')),
+ (63, 'NetBSD encrypted', uuid.UUID(hex = '2DB519EC-B10E-11DC-B99B-0019D1879648')),
+ (64, 'NetBSD RAID', uuid.UUID(hex = '49F48DAA-B10E-11DC-B99B-0019D1879648')),
+ (65, 'ChromeOS kernel', uuid.UUID(hex = 'FE3A2A5D-4F32-41A7-B725-ACCC3285A309')),
+ (66, 'ChromeOS root fs', uuid.UUID(hex = '3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC')),
+ (67, 'ChromeOS reserved', uuid.UUID(hex = '2E0A753D-9E48-43B0-8337-B15192CB1B5E')),
+ (68, 'MidnightBSD data', uuid.UUID(hex = '85D5E45A-237C-11E1-B4B3-E89A8F7FC3A7')),
+ (69, 'MidnightBSD boot', uuid.UUID(hex = '85D5E45E-237C-11E1-B4B3-E89A8F7FC3A7')),
+ (70, 'MidnightBSD swap', uuid.UUID(hex = '85D5E45B-237C-11E1-B4B3-E89A8F7FC3A7')),
+ (71, 'MidnightBSD UFS', uuid.UUID(hex = '0394EF8B-237E-11E1-B4B3-E89A8F7FC3A7')),
+ (72, 'MidnightBSD ZFS', uuid.UUID(hex = '85D5E45D-237C-11E1-B4B3-E89A8F7FC3A7')),
+ (73, 'MidnightBSD Vinum', uuid.UUID(hex = '85D5E45C-237C-11E1-B4B3-E89A8F7FC3A7')),
+ (74, 'Ceph Journal', uuid.UUID(hex = '45B0969E-9B03-4F30-B4C6-B4B80CEFF106')),
+ (75, 'Ceph Encrypted Journal', uuid.UUID(hex = '45B0969E-9B03-4F30-B4C6-5EC00CEFF106')),
+ (76, 'Ceph OSD', uuid.UUID(hex = '4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D')),
+ (77, 'Ceph crypt OSD', uuid.UUID(hex = '4FBD7E29-9D25-41B8-AFD0-5EC00CEFF05D')),
+ (78, 'Ceph disk in creation', uuid.UUID(hex = '89C57F98-2FE5-4DC0-89C1-F3AD0CEFF2BE')),
+ (79, 'Ceph crypt disk in creation', uuid.UUID(hex = '89C57F98-2FE5-4DC0-89C1-5EC00CEFF2BE')),
+ (80, 'VMware VMFS', uuid.UUID(hex = 'AA31E02A-400F-11DB-9590-000C2911D1B8')),
+ (81, 'VMware Diagnostic', uuid.UUID(hex = '9D275380-40AD-11DB-BF97-000C2911D1B8')),
+ (82, 'VMware Virtual SAN', uuid.UUID(hex = '381CFCCC-7288-11E0-92EE-000C2911D0B2')),
+ (83, 'VMware Virsto', uuid.UUID(hex = '77719A0C-A4A0-11E3-A47E-000C29745A24')),
+ (84, 'VMware Reserved', uuid.UUID(hex = '9198EFFC-31C0-11DB-8F78-000C2911D1B8')),
+ (85, 'OpenBSD data', uuid.UUID(hex = '824CC7A0-36A8-11E3-890A-952519AD3F61')),
+ (86, 'QNX6 file system', uuid.UUID(hex = 'CEF5A9AD-73BC-4601-89F3-CDEEEEE321A1')),
+ (87, 'Plan 9 partition', uuid.UUID(hex = 'C91818F9-8025-47AF-89D2-F030D7000C2C')),
+ (88, 'HiFive Unleashed FSBL', uuid.UUID(hex = '5B193300-FC78-40CD-8002-E86C45580B47')),
+ (89, 'HiFive Unleashed BBL', uuid.UUID(hex = '2E54B353-1271-4842-806F-E436D6AF6985')))
+# MSDOS FSTYPES IDENTIFIERS
+# Second verse, same as the first - kind of. The msdos type identifers just use a byte identifier rather than UUID.
+# https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/plain/include/pt-mbr-partnames.h
+MSDOS_FSTYPE_IDS = ((1, 'Empty', b'\x00'),
+ (2, 'FAT12', b'\x01'),
+ (3, 'XENIX root', b'\x02'),
+ (4, 'XENIX usr', b'\x03'),
+ (5, 'FAT16 <32M', b'\x04'),
+ (6, 'Extended', b'\x05'),
+ (7, 'FAT16', b'\x06'),
+ (8, 'HPFS/NTFS/exFAT', b'\x07'),
+ (9, 'AIX', b'\x08'),
+ (10, 'AIX bootable', b'\t'),
+ (11, 'OS/2 Boot Manager', b'\n'),
+ (12, 'W95 FAT32', b'\x0b'),
+ (13, 'W95 FAT32 (LBA)', b'\x0c'),
+ (14, 'W95 FAT16 (LBA)', b'\x0e'),
+ (15, "W95 Ext'd (LBA)", b'\x0f'),
+ (16, 'OPUS', b'\x10'),
+ (17, 'Hidden FAT12', b'\x11'),
+ (18, 'Compaq diagnostics', b'\x12'),
+ (19, 'Hidden FAT16 <32M', b'\x14'),
+ (20, 'Hidden FAT16', b'\x16'),
+ (21, 'Hidden HPFS/NTFS', b'\x17'),
+ (22, 'AST SmartSleep', b'\x18'),
+ (23, 'Hidden W95 FAT32', b'\x1b'),
+ (24, 'Hidden W95 FAT32 (LBA)', b'\x1c'),
+ (25, 'Hidden W95 FAT16 (LBA)', b'\x1e'),
+ (26, 'NEC DOS', b'$'),
+ (27, 'Hidden NTFS WinRE', b"'"),
+ (28, 'Plan 9', b'9'),
+ (29, 'PartitionMagic recovery', b'<'),
+ (30, 'Venix 80286', b'@'),
+ (31, 'PPC PReP Boot', b'A'),
+ (32, 'SFS', b'B'),
+ (33, 'QNX4.x', b'M'),
+ (34, 'QNX4.x 2nd part', b'N'),
+ (35, 'QNX4.x 3rd part', b'O'),
+ (36, 'OnTrack DM', b'P'),
+ (37, 'OnTrack DM6 Aux1', b'Q'),
+ (38, 'CP/M', b'R'),
+ (39, 'OnTrack DM6 Aux3', b'S'),
+ (40, 'OnTrackDM6', b'T'),
+ (41, 'EZ-Drive', b'U'),
+ (42, 'Golden Bow', b'V'),
+ (43, 'Priam Edisk', b'\\'),
+ (44, 'SpeedStor', b'a'),
+ (45, 'GNU HURD or SysV', b'c'),
+ (46, 'Novell Netware 286', b'd'),
+ (47, 'Novell Netware 386', b'e'),
+ (48, 'DiskSecure Multi-Boot', b'p'),
+ (49, 'PC/IX', b'u'),
+ (50, 'Old Minix', b'\x80'),
+ (51, 'Minix / old Linux', b'\x81'),
+ (52, 'Linux swap / Solaris', b'\x82'),
+ (53, 'Linux', b'\x83'),
+ (54, 'OS/2 hidden or Intel hibernation', b'\x84'),
+ (55, 'Linux extended', b'\x85'),
+ (56, 'NTFS volume set', b'\x86'),
+ (57, 'NTFS volume set', b'\x87'),
+ (58, 'Linux plaintext', b'\x88'),
+ (59, 'Linux LVM', b'\x8e'),
+ (60, 'Amoeba', b'\x93'),
+ (61, 'Amoeba BBT', b'\x94'),
+ (62, 'BSD/OS', b'\x9f'),
+ (63, 'IBM Thinkpad hibernation', b'\xa0'),
+ (64, 'FreeBSD', b'\xa5'),
+ (65, 'OpenBSD', b'\xa6'),
+ (66, 'NeXTSTEP', b'\xa7'),
+ (67, 'Darwin UFS', b'\xa8'),
+ (68, 'NetBSD', b'\xa9'),
+ (69, 'Darwin boot', b'\xab'),
+ (70, 'HFS / HFS+', b'\xaf'),
+ (71, 'BSDI fs', b'\xb7'),
+ (72, 'BSDI swap', b'\xb8'),
+ (73, 'Boot Wizard hidden', b'\xbb'),
+ (74, 'Acronis FAT32 LBA', b'\xbc'),
+ (75, 'Solaris boot', b'\xbe'),
+ (76, 'Solaris', b'\xbf'),
+ (77, 'DRDOS/sec (FAT-12)', b'\xc1'),
+ (78, 'DRDOS/sec (FAT-16 < 32M)', b'\xc4'),
+ (79, 'DRDOS/sec (FAT-16)', b'\xc6'),
+ (80, 'Syrinx', b'\xc7'),
+ (81, 'Non-FS data', b'\xda'),
+ (82, 'CP/M / CTOS / ...', b'\xdb'),
+ (83, 'Dell Utility', b'\xde'),
+ (84, 'BootIt', b'\xdf'),
+ (85, 'DOS access', b'\xe1'),
+ (86, 'DOS R/O', b'\xe3'),
+ (87, 'SpeedStor', b'\xe4'),
+ (88, 'Rufus alignment', b'\xea'),
+ (89, 'BeOS fs', b'\xeb'),
+ (90, 'GPT', b'\xee'),
+ (91, 'EFI (FAT-12/16/32)', b'\xef'),
+ (92, 'Linux/PA-RISC boot', b'\xf0'),
+ (93, 'SpeedStor', b'\xf1'),
+ (94, 'SpeedStor', b'\xf4'),
+ (95, 'DOS secondary', b'\xf2'),
+ (96, 'VMware VMFS', b'\xfb'),
+ (97, 'VMware VMKCORE', b'\xfc'),
+ (98, 'Linux raid autodetect', b'\xfd'),
+ (99, 'LANstep', b'\xfe'),
+ (100, 'BBT', b'\xff'))
diff --git a/aif/disk/block.py b/aif/disk/block.py
index 362945d..74335be 100644
--- a/aif/disk/block.py
+++ b/aif/disk/block.py
@@ -1,7 +1,7 @@
import re
##
-import parted # Do I need this if I can have libblockdev's mounts API? Is there a way to get current mounts?
-import psutil
+import parted
+import psutil # Do I need this if I can have libblockdev's mounts API? Is there a way to get current mounts?
##
import aif.constants
import aif.utils
@@ -24,8 +24,8 @@ class Partition(object):
self.id = part_xml.attrib['id']
self.table_type = getattr(_BlockDev.PartTableType, tbltype.upper())
if tbltype == 'msdos':
- # Could technically be _BlockDev.PartTypeReq.NEXT buuuut that doesn't *quite* work
- # with our project's structure.
+ # Could technically be _BlockDev.PartTypeReq.NEXT BUT that doesn't *quite* work
+ # with this project's structure.
if part_type == 'primary':
self.part_type = _BlockDev.PartTypeReq.NORMAL
elif part_type == 'extended':
@@ -50,7 +50,7 @@ class Partition(object):
'must be one of: {1}').format(self.xml.attrib['fsType'],
', '.join(sorted(aif.constants.PARTED_FSTYPES))))
self.disk = diskobj
- self.device = self.disk.device # TODO: how to get this in libblockdev?
+ self.device = self.disk.path
self.devpath = '{0}{1}'.format(self.device.path, partnum)
self.is_hiformatted = False
sizes = {}
diff --git a/docs/reference/fstypes b/docs/reference/fstypes
deleted file mode 100644
index 6c75e49..0000000
--- a/docs/reference/fstypes
+++ /dev/null
@@ -1,118 +0,0 @@
-msdos:
- 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
- 1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
- 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
- 3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT-
- 4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
- 5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
- 6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
- 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
- 8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
- 9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
- a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
- b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
- c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignment
- e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs
- f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
-10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
-11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b
-12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor
-14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor
-16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary
-17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS
-18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE
-1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto
-1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep
-1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT
-
-gpt:
- 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
- 4 BIOS boot 21686148-6449-6E6F-744E-656564454649
- 5 Sony boot partition F4019732-066E-4E12-8273-346C5641494F
- 6 Lenovo boot partition BFBFAFE7-A34F-448A-9A5B-6213EB736C22
- 7 PowerPC PReP boot 9E1A2D38-C612-4316-AA26-8B49521E5A8B
- 8 ONIE boot 7412F7D5-A156-4B13-81DC-867174929325
- 9 ONIE config D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149
- 10 Microsoft reserved E3C9E316-0B5C-4DB8-817D-F92DF00215AE
- 11 Microsoft basic data EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
- 12 Microsoft LDM metadata 5808C8AA-7E8F-42E0-85D2-E1E90434CFB3
- 13 Microsoft LDM data AF9B60A0-1431-4F62-BC68-3311714A69AD
- 14 Windows recovery environment DE94BBA4-06D1-4D40-A16A-BFD50179D6AC
- 15 IBM General Parallel Fs 37AFFC90-EF7D-4E96-91C3-2D7AE055B174
- 16 Microsoft Storage Spaces E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D
- 17 HP-UX data 75894C1E-3AEB-11D3-B7C1-7B03A0000000
- 18 HP-UX service E2A1E728-32E3-11D6-A682-7B03A0000000
- 19 Linux swap 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
- 20 Linux filesystem 0FC63DAF-8483-4772-8E79-3D69D8477DE4
- 21 Linux server data 3B8F8425-20E0-4F3B-907F-1A25A76F98E8
- 22 Linux root (x86) 44479540-F297-41B2-9AF7-D131D5F0458A
- 23 Linux root (ARM) 69DAD710-2CE4-4E3C-B16C-21A1D49ABED3
- 24 Linux root (x86-64) 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709
- 25 Linux root (ARM-64) B921B045-1DF0-41C3-AF44-4C6F280D3FAE
- 26 Linux root (IA-64) 993D8D3D-F80E-4225-855A-9DAF8ED7EA97
- 27 Linux reserved 8DA63339-0007-60C0-C436-083AC8230908
- 28 Linux home 933AC7E1-2EB4-4F13-B844-0E14E2AEF915
- 29 Linux RAID A19D880F-05FC-4D3B-A006-743F0F84911E
- 30 Linux extended boot BC13C2FF-59E6-4262-A352-B275FD6F7172
- 31 Linux LVM E6D6D379-F507-44C2-A23C-238F2A3DF928
- 32 FreeBSD data 516E7CB4-6ECF-11D6-8FF8-00022D09712B
- 33 FreeBSD boot 83BD6B9D-7F41-11DC-BE0B-001560B84F0F
- 34 FreeBSD swap 516E7CB5-6ECF-11D6-8FF8-00022D09712B
- 35 FreeBSD UFS 516E7CB6-6ECF-11D6-8FF8-00022D09712B
- 36 FreeBSD ZFS 516E7CBA-6ECF-11D6-8FF8-00022D09712B
- 37 FreeBSD Vinum 516E7CB8-6ECF-11D6-8FF8-00022D09712B
- 38 Apple HFS/HFS+ 48465300-0000-11AA-AA11-00306543ECAC
- 39 Apple UFS 55465300-0000-11AA-AA11-00306543ECAC
- 40 Apple RAID 52414944-0000-11AA-AA11-00306543ECAC
- 41 Apple RAID offline 52414944-5F4F-11AA-AA11-00306543ECAC
- 42 Apple boot 426F6F74-0000-11AA-AA11-00306543ECAC
- 43 Apple label 4C616265-6C00-11AA-AA11-00306543ECAC
- 44 Apple TV recovery 5265636F-7665-11AA-AA11-00306543ECAC
- 45 Apple Core storage 53746F72-6167-11AA-AA11-00306543ECAC
- 46 Solaris boot 6A82CB45-1DD2-11B2-99A6-080020736631
- 47 Solaris root 6A85CF4D-1DD2-11B2-99A6-080020736631
- 48 Solaris /usr & Apple ZFS 6A898CC3-1DD2-11B2-99A6-080020736631
- 49 Solaris swap 6A87C46F-1DD2-11B2-99A6-080020736631
- 50 Solaris backup 6A8B642B-1DD2-11B2-99A6-080020736631
- 51 Solaris /var 6A8EF2E9-1DD2-11B2-99A6-080020736631
- 52 Solaris /home 6A90BA39-1DD2-11B2-99A6-080020736631
- 53 Solaris alternate sector 6A9283A5-1DD2-11B2-99A6-080020736631
- 54 Solaris reserved 1 6A945A3B-1DD2-11B2-99A6-080020736631
- 55 Solaris reserved 2 6A9630D1-1DD2-11B2-99A6-080020736631
- 56 Solaris reserved 3 6A980767-1DD2-11B2-99A6-080020736631
- 57 Solaris reserved 4 6A96237F-1DD2-11B2-99A6-080020736631
- 58 Solaris reserved 5 6A8D2AC7-1DD2-11B2-99A6-080020736631
- 59 NetBSD swap 49F48D32-B10E-11DC-B99B-0019D1879648
- 60 NetBSD FFS 49F48D5A-B10E-11DC-B99B-0019D1879648
- 61 NetBSD LFS 49F48D82-B10E-11DC-B99B-0019D1879648
- 62 NetBSD concatenated 2DB519C4-B10E-11DC-B99B-0019D1879648
- 63 NetBSD encrypted 2DB519EC-B10E-11DC-B99B-0019D1879648
- 64 NetBSD RAID 49F48DAA-B10E-11DC-B99B-0019D1879648
- 65 ChromeOS kernel FE3A2A5D-4F32-41A7-B725-ACCC3285A309
- 66 ChromeOS root fs 3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC
- 67 ChromeOS reserved 2E0A753D-9E48-43B0-8337-B15192CB1B5E
- 68 MidnightBSD data 85D5E45A-237C-11E1-B4B3-E89A8F7FC3A7
- 69 MidnightBSD boot 85D5E45E-237C-11E1-B4B3-E89A8F7FC3A7
- 70 MidnightBSD swap 85D5E45B-237C-11E1-B4B3-E89A8F7FC3A7
- 71 MidnightBSD UFS 0394EF8B-237E-11E1-B4B3-E89A8F7FC3A7
- 72 MidnightBSD ZFS 85D5E45D-237C-11E1-B4B3-E89A8F7FC3A7
- 73 MidnightBSD Vinum 85D5E45C-237C-11E1-B4B3-E89A8F7FC3A7
- 74 Ceph Journal 45B0969E-9B03-4F30-B4C6-B4B80CEFF106
- 75 Ceph Encrypted Journal 45B0969E-9B03-4F30-B4C6-5EC00CEFF106
- 76 Ceph OSD 4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D
- 77 Ceph crypt OSD 4FBD7E29-9D25-41B8-AFD0-5EC00CEFF05D
- 78 Ceph disk in creation 89C57F98-2FE5-4DC0-89C1-F3AD0CEFF2BE
- 79 Ceph crypt disk in creation 89C57F98-2FE5-4DC0-89C1-5EC00CEFF2BE
- 80 VMware VMFS AA31E02A-400F-11DB-9590-000C2911D1B8
- 81 VMware Diagnostic 9D275380-40AD-11DB-BF97-000C2911D1B8
- 82 VMware Virtual SAN 381CFCCC-7288-11E0-92EE-000C2911D0B2
- 83 VMware Virsto 77719A0C-A4A0-11E3-A47E-000C29745A24
- 84 VMware Reserved 9198EFFC-31C0-11DB-8F78-000C2911D1B8
- 85 OpenBSD data 824CC7A0-36A8-11E3-890A-952519AD3F61
- 86 QNX6 file system CEF5A9AD-73BC-4601-89F3-CDEEEEE321A1
- 87 Plan 9 partition C91818F9-8025-47AF-89D2-F030D7000C2C
- 88 HiFive Unleashed FSBL 5B193300-FC78-40CD-8002-E86C45580B47
- 89 HiFive Unleashed BBL 2E54B353-1271-4842-806F-E436D6AF6985
-
diff --git a/docs/reference/generate_gpt_guid.py b/docs/reference/generate_gpt_guid.py
new file mode 100755
index 0000000..042c754
--- /dev/null
+++ b/docs/reference/generate_gpt_guid.py
@@ -0,0 +1,93 @@
+#!/usr/bin/env python3
+
+import os
+import re
+import subprocess
+import uuid
+##
+import requests
+from bs4 import BeautifulSoup
+
+# You, the average user, will probably have absolutely no use for this.
+
+types = {'gpt': {'local': [],
+ 'wiki': {}},
+ 'msdos': {'local': [],
+ 'src': []}}
+
+# GPT
+cmd = ['/usr/bin/sfdisk', '--list-types', '--label=gpt']
+url = 'https://en.wikipedia.org/wiki/GUID_Partition_Table'
+# First get the local list.
+with open(os.devnull, 'wb') as devnull:
+ cmd_out = subprocess.run(cmd, stdout = subprocess.PIPE, stderr = devnull)
+stdout = [i for i in cmd_out.stdout.decode('utf-8').splitlines() if i not in ('Id Name', '')]
+for idx, line in enumerate(stdout):
+ i = idx + 1
+ l = line.split()
+ u = l.pop(0)
+ desc = ' '.join(l)
+ types['gpt']['local'].append((i, desc, uuid.UUID(hex = u)))
+# Then wikipedia.
+req = requests.get(url)
+if not req.ok:
+ raise RuntimeError('Could not access {0}'.format(url))
+soup = BeautifulSoup(req.content, 'lxml')
+tbl = soup.find('span', attrs = {'id': 'Partition_type_GUIDs', 'class': 'mw-headline'}).findNext('table').find('tbody')
+c = None
+t = None
+idx = 1
+strip_ref = re.compile(r'(?P[A-Za-z\s()/0-9,.+-]+)\[?.*')
+for row in tbl.find_all('tr'):
+ cols = [e.text.strip() for e in row.find_all('td')]
+ if not cols:
+ continue
+ if len(cols) == 3:
+ temp_c = strip_ref.search(cols[0].strip())
+ if not temp_c:
+ raise RuntimeError('Error when parsing/regexing: {0}'.format(cols[0].strip()))
+ c = temp_c.group('name')
+ cols.pop(0).strip()
+ if c not in types['gpt']['wiki']:
+ types['gpt']['wiki'][c] = []
+ if len(cols) == 2:
+ temp_t = strip_ref.search(cols[0].strip())
+ if not temp_t:
+ raise RuntimeError('Error when parsing/regexing: {0}'.format(cols[0].strip()))
+ t = temp_t.group('name')
+ cols.pop(0)
+ u = cols[0]
+ types['gpt']['wiki'][c].append((idx, t, uuid.UUID(hex = u)))
+ idx += 1
+
+# MSDOS
+cmd = ['/usr/bin/sfdisk', '--list-types', '--label=dos']
+url = 'https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/plain/include/pt-mbr-partnames.h'
+with open(os.devnull, 'wb') as devnull:
+ cmd_out = subprocess.run(cmd, stdout = subprocess.PIPE, stderr = devnull)
+stdout = [i for i in cmd_out.stdout.decode('utf-8').splitlines() if i not in ('Id Name', '')]
+for idx, line in enumerate(stdout):
+ i = idx + 1
+ l = line.split()
+ b = '{0:0>2}'.format(l.pop(0).upper())
+ desc = ' '.join(l)
+ types['msdos']['local'].append((i, desc, bytes.fromhex(b)))
+# Then the source (master branch's HEAD). It gets messy but whatever. This is actually something unique to fdisk.
+req = requests.get(url)
+if not req.ok:
+ raise RuntimeError('Could not access {0}'.format(url))
+line_re = re.compile(r'^\s+{0x')
+str_re = re.compile(r'^\s+{0x(?P[A-Fa-f0-9]+),\s*N_\("(?P[^"]+)"\).*')
+idx = 1
+for line in req.content.decode('utf-8').splitlines():
+ if not line_re.search(line):
+ continue
+ s = str_re.search(line)
+ if not s:
+ raise RuntimeError('Error when parsing/regexing: {0}'.format(line.strip()))
+ b = s.group('b').upper()
+ desc = s.group('desc')
+ types['msdos']['src'].append((idx, desc, bytes.fromhex(b)))
+ idx += 1
+
+print(types)