0.6.4 (2/19/2010): ------------------- - Added -m (--gpttombr) option to sgdisk, enabling conversion of GPT disks to MBR format, with a limit of four partitions total, and of course without overcoming the 2TiB limit. - Added -h (--hybrid) option to sgdisk, enabling creation of hybrid MBRs. Fewer options are available in sgdisk than in gdisk, though, in order to keep the user interface manageable. - Fixed off-by-one bug in specification of partition when using the -T (--transform-bsd) option in sgdisk. - Changed the code to create a new MBR unique disk signature whenever a new protective MBR is generated (when doing an MBR-to-GPT conversion, when using the 'n' option on the experts' menu, or when using the 'o' option on the main menu, for example). Previous versions attempted to preserve the existing MBR disk signature in most cases, but this resulted in values of 0x00000000 whenever an empty disk was partitioned, and often in other cases, too. Better to risk changing this value too often than to leave multiple disks with 0x00000000 values, I think. - Added transpose ('t' on experts' menu in gdisk; or -r or --transpose in sgdisk) command to enable fine-tuning partition order without doing a full sort. - Added code to clear the MBR boot loader when doing an MBR-to-GPT conversion. (This was already done in full-disk BSD-to-GPT conversions.) This is done because I've seen a few problem reports that make me think some MBR boot loaders freak out and hang the system when they encounter GPT disks, and/or they attempt to load a second-stage boot loader stored in what is now GPT territory, causing a system hang. Since MBR boot loaders don't work on GPT disks anyhow (even GRUB needs to be reinstalled), this new wiping behavior shouldn't cause any problems, and may prevent a few. - Fixed bug in Windows version that prevented saving backup files. - Fixed bug that caused second and subsequent partition numbers in prompts in hybrid MBR conversion procedure to be displayed in hexadecimal. - Fixed very obscure potential bug in hybrid MBR/GPT synchronization when deleting partitions; code wasn't matching partition lengths correctly, which would only affect partitions that start at the same point but have different lengths in MBR vs. GPT. - Fixed bug in the -E option to sgdisk; it was actually returning the last free sector, not the last free sector in the largest free block. - Fixed bug in -t option to sgdisk; it was corrupting partition type codes. - Fixed minor alignment bug in partition summary list ('p' from any menu) when partition sizes are between 1000 and 1024 units. - Backup restore function ('l' on recovery & transformation menu) now accepts both backups generated by GPT fdisk and backups created by a direct copy (via dd, etc.) of the MBR, main GPT header, and main GPT partition table, in that order. ("dd if=/dev/sda of=backup.gpt bs=512 count=34" will do this on Linux for a disk with a typical-sized GPT table of 128 entries.) 0.6.3 (2/3/2010): ------------------ - Fixed serious data corruption bug on big-endian (PowerPC and similar) systems. - Changed several GPT fdisk Solaris type codes to correct a duplicate - Corrected error in GPT fdisk type codes for NetBSD LFS and NetBSD RAID; they were identical, but I've now changed NetBSD RAID to A906, which is unique. - Added GUID for IBM General Parallel File System (GPFS) partition type code. Somewhat arbitrarily set it to use the 7501 number (MBR code 0x75 is used by IBM PC/IX, so it's at least the right company, by my loose numbering rules....). - Improved GUID generation. Prior versions generated completely random numbers for GUIDs. This works, but is technically a violation of the spec. Unix versions now employ libuuid to generate GUIDs in a more correct way. The Windows version still generates random numbers, though. - Turned PartTypes class into a derived class of GUIDData, and renamed it to PartType. - Created new GUIDData class, to replace the original GUIDData struct. 0.6.2 (1/29/2010): ------------------ - The change-type ('t' on main menu) option now changes the partition's name *IF* the current name is the generic one for the partition type. If the current name is not the generic name, it is NOT changed. - Fixed bug that caused new protective MBR to not be created when the MBR was invalid and the GPT was damaged and the user opts to try to use the GPT data. - Enabled default partition type code of 0700 when creating partitions or changing their type codes. (Type 0700, Linux/Windows data, is set if the user hits the Enter key alone.) - Fixed bug in sort ('s' on main menu) option that caused partition numbers to begin at more than 1 if the original partition list had too many empty partitions before the last one defined. - Improved code to determine which partition table to load in case of CRC mismatches between the partition tables and the stored CRC values in the headers. - Compiles using MinGW (http://www.mingw.org) to create a Windows binary. - Moved all disk I/O functions to the new DiskIO class. This helps with the Windows port; it uses diskio-windows.cc for Windows-specific code, diskio-unix.cc for the Linux, FreeBSD, and OS X code, and diskio.cc for cross-platform disk I/O code. - Changed BSD disklabel detection code to be more correct (I think). This change has no effect on my test disks, but I hope it'll work better on disks with sector sizes other than 512 or 2048. 0.6.1 (1/20/2010): ------------------ - Fixed bug that returned incorrect disk size on 32-bit versions of FreeBSD. - Fixed bug that prevented FreeBSD version from working on disk image files. - Fixed bug that caused BSD disklabel conversion to fail. 0.6.0 (1/15/2010): ------------------ - Fixed bug that caused the convert to MBR function to fail. - Added support for disks with other than 512-byte sectors. - Created embryonic sgdisk program. - Fixed bug that caused relative sector numbers entered by users (e.g, "+128M") to be misinterpreted as from the start of the range rather than from the default value. 0.5.3 (1/4/2010): ----------------- - Fixed bug in display of GUIDs when compiled with some versions of GCC. - Eliminated warnings caused by additional checks in latest versions of GCC. These warnings were harmless, but to eliminate them I've added more error checking on disk I/O. - Eliminated unnecessary warnings about potential data loss if the program was launched with the -l option or if writes aren't possible. - Added code to set the partition boundary value based on the physical sector size. (FindAlignment() function.) This function, however, works only on Linux, and then only if the BLKPBSZGET ioctl is defined. This ioctl is new in kernel 2.6.32 or thereabouts. 0.5.2 (12/31/2009): ------------------- - Modified partition creation function to begin partitions on 8-sector boundaries by default. This improves performance on the new Western Digital Advanced Format drives. The new 'd' and 'l' options on the experts' menu display and change, respectively, the boundary size. - Tweaked code to produce fewer warnings on the latest versions of GCC. 0.5.1: ------ - Made some minor edits to the man page. - Incorporated RPM .spec file changes contributed by Scott Collier (boodle11@gmail.com). - Changed method of locating and loading backup GPT data, to use the main header's pointer, if it's valid, rather than seeking to the end of the disk. - Added 'e' option (relocate backup GPT data structures) to the experts' menu. - Fixed bug that prevented recovery of partitions in case of partially damaged GPT data (bad main and good backup or bad backup and good main header, for instance). 0.5.0: ------ - Added GPT-to-MBR conversion function. It's very limited, but potentially useful in some cases. - Fixed bug that caused incorrect file sizes to be reported on 32-bit Linux, thus causing problems when editing partition tables in disk images or when loading GPT backup files. - Fixed bug that caused bogus CRC error reports when loading backup GPT data. - Reorganized menus. There are now three: the main menu, the experts' menu, and the recovery & transformation menu. The last of these has most of the items that had been on the earlier versions' experts' menu. - Added ability to re-load the MBR and generate a fresh GPT from it. This is normally identical to quitting and re-running the program, but it could be handy if, say, the GPT partitions on a hybrid configuration are badly messed up; this will enable using the hybridized partitions as the starting point for a new GPT setup. - The program now generates CHS values for hybrid and GPT-to-MBR conversion MBRs. For the moment, the assumption is the maximum number of heads and sectors per track (255 and 63, respectively), although the bulk of the code supports other values -- it'd just be awkward to enter the data in the user interface. - Fixed minor display bug that caused number of sectors on the disk to be shown as 0 on large disks when running 32-bit binaries. - Reverted 0.4.2's zap (destroy GPT) changes, since I don't want to wipe out a valid MBR if the user created that MBR over an older GPT without first properly wiping out the GPT, and the user now wants to wipe out the GPT. - Reformatted and edited the man page. Aside from edits related to the preceding program changes, I've altered the markup slightly and trimmed much of the more tutorial information from the man page to better conform to typical terse man page style. 0.4.2: ------ - Code cleanup. - Fixed very small formatting bug in display of hex code when a match isn't found when converting from an MBR/gdisk hex code to a GUID type code. - Added the ability to work on disk image files (raw files for virtual machines, backup images, etc.). The program assumes that all such disk image files have 512-byte sectors. - Added verification prompt to 'o' main-menu option to avoid accidental erasures of all partitions. - The "destroy GPT data structures" option ('z' on the experts' menu) now also destroys all EFI GPT (0xEE) partitions in the MBR. - Added an extra warning to the "destroy GPT data structures" option if an APM or BSD disklabel was detected on the disk. - Added a buffer flush after destroying GPT data structures, to get the OS to read the new (empty or MBR-only) partition table. - Fixed bug that allowed entry of nonexistent partition numbers when creating a hybrid MBR. 0.4.1: ------ - Code cleanup/re-organization - Partition creation function ('n' on main menu) now uses the start of the largest available chunk of free space rather than the first available sector as the default starting sector number. This should enable easier partition creation if there are small bits of free space on the disk. - You can now specify the end point of a partition by using a minus sign, in which case the end point is the default value minus the specified size. For instance, "-200M" creates a partition that ends 200MiB before the default end point. - You can now specify the start point of a partition by using a plus or minus sign, in which case the start point is the specified distance from the start (+) or end (-) of free space. This is exactly the same as the new rules for entry of the end point, except that the default value is set differently. - Deleting a partition now checks for a matching hybrid MBR partition, and if one is found, it's deleted. Any empty space that then surrounds the 0xEE (EFI GPT) MBR partitions is then added to the nearby 0xEE partition. If no non-0xEE partitions are left, a fresh protective MBR is generated. - Added hybrid MBR consistency check to the verify ('v') option and to pre-write checks. If non-0xEE/non-0x00 MBR partitions without corresponding GPT partitions are found, the user is warned. This finding does NOT prevent writing the partition table, though. - Added non-destructive write test when opening the device file, in order to detect the problem with FreeBSD being unable to write to disks with mounted partitions (or other potential problems). 0.4.0: ------ - Added support for BSD disklabels. The program can now convert disks that use "raw" disklabels, with the caveat that the first partition will almost certainly need to be deleted because it'll overlap the main GPT header; and convert disklabels contained within a GPT (or a former MBR, converted to GPT) partition. In the latter case, the 'b' main menu option is used. - Added support for compiling on FreeBSD. - Fixed bug that could cause crashes or incomplete sorts when sorting the partition table. - New partitions, including converted ones, now take on the name of the partition type as a default name. - Reorganized some code; created a separate C++ class for GPT partitions (GPTPart), which replaced a struct and enabled moving code from the bloated GPTData class into GPTPart. - Fixed a bug that produced spurious warnings about unknown sector sizes when loading a backup file. 0.3.5: ------ Note: This version was not officially publicly released; I wanted to test the big-endian support while developing 0.4.0. - Tweaked the disk type identification code to warn users to re-sync their hybrid MBRs when one is detected. - Tweaked MBR-reading code to ignore 0xEE (EFI GPT) partitions. This will only have an effect on a poorly partitioned MBR disk that contains an inappropriate EFI GPT partition, or when attempting to recover a corrupted disk by using the hybrid MBR for data recovery. - Added big-endian (PowerPC, etc.) support! - Added code to identify and warn of the presence of an Apple Partition Map (APM) on the disk. - Enabled MBR conversion code to handle multiple logical partitions. 0.3.4: ------ - Fixed bug that enabled (possibly accidental) entry of MBR type codes of 0x00 in GPTData::MakeHybrid(). The fix also enables entry of default type code by pressing the Enter key when prompted. Applied a similar fix to the entry of the type code for the second protective partition, if one is used. - Fixed a typo: "sectors" was spelled "sectprs" in one spot! - Fixed bug that caused default entry for end sector to be refused if an initial value using a plus sign (e.g., "+20G") was also refused. 0.3.3: ------ - Gave users control over the way MBR partitions are assigned to slots in a hybrid MBR setup; the original method (putting the 0xEE partition after the real partitions) works well for non-boot disks, but both GRUB and GRUB2 become confused by this type of setup, so it needs changing. - Changed "blocks" to "sectors" in GPT and MBR table displays. - Added "Boot" column to MBR table display; shows an asterisk (*) when the partition's status is bootable. 0.3.2: ------ - Changed __DARWIN_UNIX03 to __APPLE__ as code to enable MacOS X support. - Added the ability to create a hybrid MBR ('h' on experts' menu). This was motivated by my discovery that Windows 7 remains brain-dead when it comes to the ability to boot from a GPT disk, at least on BIOS-based machines. - Added 'z' option to experts' menu, to destroy GPT data structures and exit. The intent is to use this feature to enable subsequent partitioning of the disk using fdisk or other GPT-unaware tools. (GNU Parted will wipe the GPT data structures itself when you create a new MBR ["msdos disklabel," in Parted parlance], so using Parted is another option.) - Slightly altered the effect of the 'o' command on the main menu. It now blanks out the protective MBR, as well as the GPT data. 0.3.1: ------ - Added Mac OS X support, provided as a patch by David Hubbard (david.c.hubbard@gmail.com). - Fixed bug in disksize() function on Mac OS. (Possibly dependent on the kernel and/or GCC version.) The disk size, of type uint64_t, was not being passed correctly, so I reorganized the function to return it as the function's return value rather than as a parameter. This seems to work OK on my Mac OS test system and on both 32- and 64-bit Linux systems. - Fixed off-by-one bug in GPTData::FindLastAvailable(). - Fixed bug that caused display of options after a disk-write error. - Fixed several incorrect MacOS X partition type GUIDs, thanks to Yves Blusseau (1otnwmz02@sneakemail.com). 0.3.0: ------ - Changed version number to 0.3.0, reflecting the fact that I've received no significant bug reports and so am elevating the program to "beta" status. This change also entailed altering the warning the program displays when saving partition table changes. - Fixed minor bug in CHS geometry of the protective MBR's type EE partition (was producing 0x000200 as the start value, but should be 0x000100). Should be a non-critical bug since the protective MBR partition definition is only there to keep MBR-only disk utilities from messing with the disk. - Added ability to enter GUIDs as single massive strings rather than in chunks. 0.2.2: ------ - Added #include directives required to compile the program using GCC 4.4.0. 0.2.1: ------ - Fixed partition numbering problem in reports of partition overlaps in verification function. - Fixed 1-sector partition size problem when creating new partitions (partitions were 1 sector too big when using the +size option). - Changed BytesToSI() to display values in bytes without decimal points (e.g., "512 bytes" rather than "512.0 bytes"). - Added GPTData class member functions to retrieve GPT data structure locations on disk; used in my internal-use-only GPT-wiping program. - Eliminated the "a reboot is recommended" notice after writing the partition table. - Added notice after sorting the partition table to the effect that editing /etc/fstab and/or the boot loader files may be required. - Fixed bug in MBR-reading function that caused 0x0f (Win95 LBA) and 0x85 (Linux extended) extended partitions to not be read. - Fixed bug in GetLastSector() (in support.cc) that would have prevented correct user entry of over-32-bit sector numbers on 32-bit systems. - Made some changes/corrections to the partition type list in parttypes.cc. Most of these were based on newly-discovered MBR type codes for Apple (Mac OS X) filesystems. - General code cleanup (setting explicit casts, etc.) 0.2.0: ------ - Initial semi-public release