Fixes and large enhancements
Highlights:
- added 4K sectors support in VHDX images
- FAT format code merged into a single fat_mkfs function
- 128K and 256K clusters allowed with 4K sectors (FAT)
- really working cylinder alignment for new partitions
- partition type code is now correctly updated in MBR after format
- better compatibility switches with traditional DOS/Windows FORMAT
disk.py:
- new type() member returns a string type name
exFAT.py:
- VBR checksum is checked at boot sector from disk initialization
FAT.py:
- mostly cosmetic changes in some member names
- FAT() initialization accepts and uses disk sector size
gptutils.py:
- pack() honours sector size
mkfat.py:
- new single fat_mkfs function for all FAT12/16/32 formats with better documentation
- support for 4K sectors
- simplified cluster auto-selection (FAT)
- enhanced CHS geometry handling
- return codes and optional messages
- better FAT media byte handling
- duplicated format app tool (__main__) is removed from here
partutils.py:
- LBA-CHS conversions moved in utils.py
- new (definitive?) partition type code calculator
- 4K sector support
- partitioning algorithms revised to do proper cylinder (old DOS) or MB alignment, and to honor disk geometry whenever possible
scripts/mkfat.py:
- new options for FAT tuning (FAT32 limits, FAT12 exclusion with HDDs, no 64K clusters in old systems)
- partition type code is updated in MBR according to applied format
scripts/mkvdisk.py:
- added 4K sectors support (VHDX)
utils.py:
- LBA-CHS conversions moved from partutils.py
vdi/vhd(x)/vmdkutils.py:
- added 4K sectors support (actually effective for VHDX only)
vhdutils.py:
- removed block alignment check in BAT (Windows does not care, and blocks could be unaligned in some scenarios)
- parent's timestamp is checked no more (like Windows 11)
- fixed a bug in dwMaxTableEntries calculation
- fixed a bug in parent timestamp assignment
- fixed a bug in parent's locator encoding
Volume.py:
- added 4K sectors support
- copy_tree_in can optionally convert file names in upper case passing uppercase=1