Recognise APFS (Apple File System) (#23)
Just add detection of APFS using GParted's internal magic string detection. It just matches 1 byte of the 2 byte object type and the 4 byte magic field found in the super block [1]. See code comment for more details. Blkid has just gained recognition of APFS with util-linux v2.33 released 06-Nov-2018 [2]. This will write enough for GParted's simple internal detection to find APFS: # python -c ' import sys sys.stdout.write("\0"*24 + "\1\0" + "\0"*6 + "NXSB") ' > /dev/sdb1 [1] Apple File System Reference https://developer.apple.com/support/apple-file-system/Apple-File-System-Reference.pdf [2] [ANNOUNCE] util-linux v2.33 https://marc.info/?l=linux-fsdevel&m=154150400305928&w=2 Closes #23 - GParted doesn't detect APFS (Apple File System)
This commit is contained in:
parent
893b67e2b8
commit
69c1537a38
|
@ -92,18 +92,19 @@ enum FSType
|
||||||
FS_XFS = 27,
|
FS_XFS = 27,
|
||||||
|
|
||||||
// Other recognised file system types
|
// Other recognised file system types
|
||||||
FS_BITLOCKER = 28,
|
FS_APFS = 28,
|
||||||
FS_GRUB2_CORE_IMG = 29,
|
FS_BITLOCKER = 29,
|
||||||
FS_ISO9660 = 30,
|
FS_GRUB2_CORE_IMG = 30,
|
||||||
FS_LINUX_SWRAID = 31,
|
FS_ISO9660 = 31,
|
||||||
FS_LINUX_SWSUSPEND = 32,
|
FS_LINUX_SWRAID = 32,
|
||||||
FS_REFS = 33,
|
FS_LINUX_SWSUSPEND = 33,
|
||||||
FS_UFS = 34,
|
FS_REFS = 34,
|
||||||
FS_ZFS = 35,
|
FS_UFS = 35,
|
||||||
|
FS_ZFS = 36,
|
||||||
|
|
||||||
// Partition space usage colours
|
// Partition space usage colours
|
||||||
FS_USED = 36,
|
FS_USED = 37,
|
||||||
FS_UNUSED = 37
|
FS_UNUSED = 38
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
enum SIZE_UNIT
|
enum SIZE_UNIT
|
||||||
|
|
|
@ -1332,7 +1332,8 @@ FSType GParted_Core::detect_filesystem_internal( PedDevice * lp_device, PedParti
|
||||||
{ 0LL, "\x52\xE8\x28\x01", 0LL, NULL , FS_GRUB2_CORE_IMG },
|
{ 0LL, "\x52\xE8\x28\x01", 0LL, NULL , FS_GRUB2_CORE_IMG },
|
||||||
{ 0LL, "\x52\xBF\xF4\x81", 0LL, NULL , FS_GRUB2_CORE_IMG },
|
{ 0LL, "\x52\xBF\xF4\x81", 0LL, NULL , FS_GRUB2_CORE_IMG },
|
||||||
{ 0LL, "\x52\x56\xBE\x63", 0LL, NULL , FS_GRUB2_CORE_IMG },
|
{ 0LL, "\x52\x56\xBE\x63", 0LL, NULL , FS_GRUB2_CORE_IMG },
|
||||||
{ 0LL, "\x52\x56\xBE\x56", 0LL, NULL , FS_GRUB2_CORE_IMG }
|
{ 0LL, "\x52\x56\xBE\x56", 0LL, NULL , FS_GRUB2_CORE_IMG },
|
||||||
|
{ 24LL, "\x01\x00" , 32LL, "NXSB", FS_APFS }
|
||||||
};
|
};
|
||||||
// For simple BitLocker recognition consider validation of BIOS Parameter block
|
// For simple BitLocker recognition consider validation of BIOS Parameter block
|
||||||
// fields unnecessary.
|
// fields unnecessary.
|
||||||
|
@ -1343,6 +1344,17 @@ FSType GParted_Core::detect_filesystem_internal( PedDevice * lp_device, PedParti
|
||||||
// instructions it starts with.
|
// instructions it starts with.
|
||||||
// * bootinfoscript v0.77 line 1990 [GRUB2 core.img possible staring 4 bytes]
|
// * bootinfoscript v0.77 line 1990 [GRUB2 core.img possible staring 4 bytes]
|
||||||
// https://github.com/arvidjaar/bootinfoscript/blob/009f509d59e2f0d39b8d44692e2a81720f5af7b6/bootinfoscript#L1990
|
// https://github.com/arvidjaar/bootinfoscript/blob/009f509d59e2f0d39b8d44692e2a81720f5af7b6/bootinfoscript#L1990
|
||||||
|
//
|
||||||
|
// Simple APFS recognition based on matching the following fields in the
|
||||||
|
// superblock:
|
||||||
|
// 1) Object type is OBJECT_TYPE_NX_SUPERBLOCK, lower 16-bits of the object type
|
||||||
|
// field is 0x0001 stored as little endian bytes 0x01, 0x00.
|
||||||
|
// WARNING: The magic signatures are defined as NUL terminated strings so the
|
||||||
|
// below code only does a 1-byte match for 0x01, rather than a 2-byte match
|
||||||
|
// for 0x01, 0x00.
|
||||||
|
// 2) 4 byte magic "NXSB".
|
||||||
|
// * Apple File System Reference
|
||||||
|
// https://developer.apple.com/support/apple-file-system/Apple-File-System-Reference.pdf
|
||||||
|
|
||||||
for ( unsigned int i = 0 ; i < sizeof( signatures ) / sizeof( signatures[0] ) ; i ++ )
|
for ( unsigned int i = 0 ; i < sizeof( signatures ) / sizeof( signatures[0] ) ; i ++ )
|
||||||
{
|
{
|
||||||
|
@ -1473,6 +1485,8 @@ FSType GParted_Core::detect_filesystem( PedDevice * lp_device, PedPartition * lp
|
||||||
return GParted::FS_UDF;
|
return GParted::FS_UDF;
|
||||||
else if ( fsname == "ufs" )
|
else if ( fsname == "ufs" )
|
||||||
return GParted::FS_UFS ;
|
return GParted::FS_UFS ;
|
||||||
|
else if ( fsname == "apfs" )
|
||||||
|
return FS_APFS;
|
||||||
else if ( fsname == "BitLocker" )
|
else if ( fsname == "BitLocker" )
|
||||||
return FS_BITLOCKER;
|
return FS_BITLOCKER;
|
||||||
else if ( fsname == "iso9660" )
|
else if ( fsname == "iso9660" )
|
||||||
|
@ -4182,6 +4196,7 @@ void GParted_Core::init_filesystems()
|
||||||
FILESYSTEM_MAP[FS_REISERFS] = new reiserfs();
|
FILESYSTEM_MAP[FS_REISERFS] = new reiserfs();
|
||||||
FILESYSTEM_MAP[FS_UDF] = new udf();
|
FILESYSTEM_MAP[FS_UDF] = new udf();
|
||||||
FILESYSTEM_MAP[FS_XFS] = new xfs();
|
FILESYSTEM_MAP[FS_XFS] = new xfs();
|
||||||
|
FILESYSTEM_MAP[FS_APFS] = NULL;
|
||||||
FILESYSTEM_MAP[FS_BITLOCKER] = NULL;
|
FILESYSTEM_MAP[FS_BITLOCKER] = NULL;
|
||||||
FILESYSTEM_MAP[FS_GRUB2_CORE_IMG] = NULL;
|
FILESYSTEM_MAP[FS_GRUB2_CORE_IMG] = NULL;
|
||||||
FILESYSTEM_MAP[FS_ISO9660] = NULL;
|
FILESYSTEM_MAP[FS_ISO9660] = NULL;
|
||||||
|
|
|
@ -116,6 +116,7 @@ Glib::ustring Utils::get_color( FSType filesystem )
|
||||||
case FS_REISERFS: return "#ADA7C8"; // Purple Hilight
|
case FS_REISERFS: return "#ADA7C8"; // Purple Hilight
|
||||||
case FS_UDF: return "#105210"; // Accent Green Shadow [+]
|
case FS_UDF: return "#105210"; // Accent Green Shadow [+]
|
||||||
case FS_XFS: return "#EED680"; // Accent Yellow
|
case FS_XFS: return "#EED680"; // Accent Yellow
|
||||||
|
case FS_APFS: return "#874986"; // Magenta Dark [*]
|
||||||
case FS_BITLOCKER: return "#494066"; // Purple Shadow
|
case FS_BITLOCKER: return "#494066"; // Purple Shadow
|
||||||
case FS_GRUB2_CORE_IMG: return "#666666"; // Dark Gray [*]
|
case FS_GRUB2_CORE_IMG: return "#666666"; // Dark Gray [*]
|
||||||
case FS_ISO9660: return "#D3D3D3"; // Light Gray [*]
|
case FS_ISO9660: return "#D3D3D3"; // Light Gray [*]
|
||||||
|
@ -304,6 +305,7 @@ Glib::ustring Utils::get_filesystem_string( FSType filesystem )
|
||||||
case FS_REISERFS: return "reiserfs";
|
case FS_REISERFS: return "reiserfs";
|
||||||
case FS_UDF: return "udf";
|
case FS_UDF: return "udf";
|
||||||
case FS_XFS: return "xfs";
|
case FS_XFS: return "xfs";
|
||||||
|
case FS_APFS: return "apfs";
|
||||||
case FS_BITLOCKER: return "bitlocker";
|
case FS_BITLOCKER: return "bitlocker";
|
||||||
case FS_GRUB2_CORE_IMG: return "grub2 core.img";
|
case FS_GRUB2_CORE_IMG: return "grub2 core.img";
|
||||||
case FS_ISO9660: return "iso9660";
|
case FS_ISO9660: return "iso9660";
|
||||||
|
|
Loading…
Reference in New Issue