• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
11.0.10 (2/19/2024):
2-------------------
3
4- Fixed problem that caused sgdisk to crash with errors about being unable
5  to read the disk's partition table when compiled with the latest popt
6  (commit 740, which is pre-release as I type; presumably version 1.19 and
7  later once released).
8
9- Updated guid.cc to deal with minor change in libuuid.
10
11- Fixed potential NULL derefernce bug in sgdisk. Thanks to Damian Kurek
12  for this fix.
13
14- The partition number of "0" can now be used to reference newly-created
15  partitions when the --largest-new=0 option to sgdisk is used. Thanks to
16  David Joaquín Shourabi Porcel for this improvement.
17
18- Make explicit casts in gptcurses.cc to eliminate compiler warnings about
19  mis-matched types in printw() statements.
20
21- Minor code cleanup based on valgrind analysis.
22
23- In previous versions, GPT fdisk accepted only integer values for partition
24  start points, end points, and sizes, and it interpreted decimal values
25  incorrectly. That is, if you typed "+9.5G" as the partition end point,
26  you'd end up with something just 9 sectors in size. This version now
27  truncates decimal numbers to their integral values, so you'd get a 9 GiB
28  partition instead.
29
30- Changes to optimize disk handling, particularly on Windows, courtesy of
31  Frediano Ziglio.
32
33- Added numerous new partition type codes from Discoverable Partitions
34  Specification
35  (https://uapi-group.org/specifications/specs/discoverable_partitions_specification/).
36
37- Added new sgdisk -k/--move-backup-table and gdisk k (on the experts' menu)
38  option to relocate the backup partition table. This is the counterpart of
39  the sgdisk -j/--move-main-table and gdisk j (on the experts' menu) option
40  to move the main partition table. This code comes from Niklas Gollenstede.
41
421.0.9 (4/14/2022):
43------------------
44
45- Removed stray debugging code that caused "partNum is {x}" to be printed
46  when changing a partition's name with sgdisk (-c/--change-name).
47
48- Added support for aligning partitions' end points, as well as their start
49  points. This support affects the default partition size when using 'n' in
50  gdisk; it affects the default partition size in cgdisk; and it's activated
51  by the new '-I' option in sgdisk. See the programs' respective man pages
52  for details. This feature is intended to help with LUKS2 encryption, which
53  reacts badly to partitions that are not sized as exact multiples of the
54  encryption block size.
55
56- Added check for too-small disks (most likely to be an issue when trying
57  to use a too-small disk image); program now aborts if this happens.
58
59- Added the ability to build sgdisk and cgdisk for Windows.
60
61- Added new type codes:
62  * FreeBSD nandfs (0xa506)
63  * Apple APFS Pre-Boot (0xaf0b)
64  * Apple APFS Recovery (0xaf0c)
65  * ChromeOS firmware (0x7f03)
66  * ChromeOS mini-OS (0x7f04)
67  * ChromeOS hibernate (0x7f05)
68  * U-Boot boot loader (0xb000)
69  * 27 (!) codes for Fuchsia (0xf100 to 0xf11a)
70
71- Fixed build problems with recent versions of ncurses.
72
73- Fixed bug that caused cgdisk to report incorrect partition attributes.
74
75- Consolidated Makefiles for Linux, FreeBSD, Solaris, macOS, and Windows
76  (32- and 64-bit). The old OS-specific Makefiles remain in case the new
77  consolidated Makefile has problems, but the old ones are deprecated.
78  (The Solaris support in the new Makefile is untested.)
79
801.0.8 (6/9/2021):
81-----------------
82
83- Fixed double byte swap operation on writes of partition name data on
84  big-endian systems; this is in addition to the double byte swap fix on
85  reading partition label data fixed in 1.0.7. (Thanks to Erik Larsson for
86  both fixes.)
87
88- Added feature to gdisk and sgdisk to enable swapping the byte order of
89  partition names, so as to correct disks already affected by the preceding
90  bug. This option is 'b' on the experts' menu in gdisk and
91  -b/--byte-swap-name in sgdisk. This seems advanced/obscure enough that I
92  don't want to clutter cgdisk's menu with this option, so I haven't added
93  it there.
94
95- Added type code for the Barebox boot loader (0xbb00;
96  4778ED65-BF42-45FA-9C5B-287A1DC4AAB1).
97
98- Trivial code cleanup.
99
1001.0.7 (3/10/2021):
101------------------
102
103- Fixed bug that caused spurious warnings about the partition table
104  header claiming an invalid size of partition entries when reading
105  some MBR disks.
106
107- Added ARM64 as an architecture for the Mac builds of gdisk and fixparts.
108  The official GPT fdisk binaries of these files for macOS are now
109  "universal" x86-64/ARM64 binaries, so they will run natively on the new M1
110  (ARM64) Macs. The sgdisk and cgdisk binaries, though, remain built only
111  for x86-64, because they rely on libraries that are not easily built in
112  "universal" form.
113
114- Fixed double byte swap operation on partition label data on big-endian
115  CPUs. This resulted in partition names becoming gibberish on such CPUs.
116
117- Added three new type codes:
118  - 0x0701 - Microsoft Storage Replica
119  - 0x0702 - ArcaOS Type 1
120  - 0x8401 - Storage Performance Development Kit (SPDK) block device
121
1221.0.6 (1/13/2021):
123------------------
124
125- Fixed bug that could cause segfault if GPT header claimed partition
126  entries are oversized. See:
127  https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0256
128
129- Fixed bug that could cause a crash if a badly-formatted MBR disk was
130  read. See:
131  https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-0308
132
133- Renamed the partition type "Freedesktop $BOOT" to "XBOOTLDR partition".
134
135- Added several more Freedesktop partition table type codes (0x8312 through
136  0x831C).
137
138- Fixed type code definition in diskio-unix.cc that prevented 32-bit builds
139  from correctly handling disks over 4 TiB in size.
140
141- Minor tweaks to get the software to compile on FreeBSD; that seems to have
142  fallen into disrepair.
143
1441.0.5 (2/17/2020):
145------------------
146
147- Fixed typos and minor formatting issues in man pages
148
149- Changed number of columns in type code output ("sgdisk -L" and equivalents
150  in gdisk and cgdisk) from 3 to 2, since some descriptions are long enough
151  that they're ambiguous with three columns.
152
153- Makefile change: Add $(LDLIBS) support to enable clean static builds (for
154  libintl).
155
156- You can now put the 0xEE partition last in a hybrid MBR using sgdisk.
157  (Previously, this was possible with gdisk but not with sgdisk.) See the
158  sgdisk man page for details.
159
160- Added numerous type codes for Container Linux, Veracrypt, and
161  Freedesktop.org's Discoverable Partitions Specification
162
163- Partition type name searches are now case-insensitive.
164
165- It's now possible to quit out of partition type name searches by typing
166  "q".
167
168- When changing a partition type code, the default is now the current
169  type code, not a platform-specific type code.
170
171- The UEFI GPT fdisk project
172  (https://sourceforge.net/projects/uefigptfdisk/) hasn't been updated since
173  2016, and is now broken; binaries don't compile with modern GCC
174  toolchains, and even when dropping back to Ubuntu 14.04, which worked for
175  GPT fdisk 1.0.4, the resulting binary hangs on launch. Therefore, I'm
176  dropping support for the EFI build of gdisk, at least unless and until
177  UEFI GPT fdisk is fixed.
178
179- Apple no longer supports building i386 or "fat" binaries in XCode (or if
180  they do, they're making it hard), so I've removed that support. GPT fdisk
181  macOS binaries are now x86-64 only. Similarly, building now seems to
182  require macOS 10.9 or later, so that's now the minimum macOS version. I've
183  also re-built my Mac build environment and tweaked Makefile.mac
184  appropriately.
185
1861.0.4 (7/5/2018):
187-----------------
188
189- Added some explicit copy constructors and made some other tweaks to avoid
190  compiler warnings.
191
192- The macOS binary for sgdisk is now a pure 64-bit build; I'm no longer
193  supporting 32-bit builds of sgdisk. The gdisk and cgdisk binaries remain
194  "fat" 32-/64-bit builds. The reason for dropping the 32-bit support from
195  sgdisk is that I've re-built my macOS development system, and I had
196  trouble building a "fat" binary with the fresh install of the popt
197  libraries upon which sgdisk relies. 32-bit support for the other binaries
198  is now officially deprecated, too.
199
200- Added search feature to partition type list functions ("L" on main menu of
201  gdisk and "L" when entered in response to the "Hex code or GUID" prompt in
202  gdisk and sgdisk). This feature filters the partition type list to those
203  which include the search term in their GPT fdisk descriptions. For
204  instance, typing "Linux" shows only partitions with "Linux" in their
205  descriptions. Note that the search/filter is case-sensitive. If <Enter> is
206  pressed, no filter is applied.
207
208- Change to Makefile.mac to use standard libncurses rather than a 3rd-party
209  version; should help with cgdisk compatibility.
210
211- Minor bug fix in alignment of internal data structures.
212
213- Minor bug fix in handling of damaged disks. Also, GPT fdisk now reports
214  more information on what data structures are damaged when a damaged disk
215  is detected.
216
217- Added type code for Apple APFS (7C3457EF-0000-11AA-AA11-00306543ECAC,
218  0xaf0a).
219
220- Added type code for Atari TOS basic data (0xa200,
221  734E5AFE-F61A-11E6-BC64-92361F002671).
222
223- Added type codes for Linux dm-crypt (0x8308,
224  7FFEC5C9-2D00-49B7-8941-3EA10A5586B7) and LUKS (0x8309,
225  CA7D7CCB-63ED-4C53-861C-1742536059CC) partitions.
226
227- Added 18 Ceph partition type codes.
228
229- Added 52 (yes, 52!) Android partition type codes.
230
231- Changed "Creating new GPT entries" message to read "Creating new
232  GPT entries in memory" because the latter is clearer, particularly when
233  using sgdisk with a non-destructive option, like "-p".
234
2351.0.3 (7/27/2017):
236------------------
237
238- Fixed a major bug that caused invalid partition tables to be generated
239  when creating a new partition table (that is, partitioning a blank disk or
240  converting from MBR).
241
2421.0.2 (7/26/2017):
243------------------
244
245- On Linux, the p/-p/--print command now shows the disk's model name, as
246  reported in /sys/block/sda/device/model (or equivalent filenames for other
247  disks). This feature does not yet work on other platforms, on which the
248  model name line is omitted from the output. This line is also not shown
249  when accessing disk image files, even on Linux.
250
251- GPT fdisk can now report both the physical and logical sector sizes of
252  disks, but only on 2.6.32 and later Linux kernels. The verify feature now
253  uses the larger of the set alignment and physical/logical block sizes for
254  testing alignment, and setting alignment to something other than an exact
255  multiple of the ratio of the physical to logical block size results in a
256  warning.
257
258- Addition of new verification checks, mostly (but not exclusively) related
259  to the new j/-j/--move-main-table option.
260
261- Added new option: 'j' on the experts' menu in gdisk;
262  '-j/--move-main-table={sector}' in sgdisk. This option enables relocating
263  the main partition table from sector 2 (the default location) to somewhere
264  else on the disk. The main reason I know of to do this is if the disk is
265  to be used with a system-on-chip (SoC) computer, some of which require the
266  boot loader to be located at sector 2. If you pass this option the default
267  value of 2, it has the effect of reducing the padding placed between the
268  main partition table and the first usable sector value created by the
269  Linux fdisk tool.
270
271- Updated man pages with new recommendations for ESP and BIOS Boot Partition
272  sizes.
273
274- Added four type codes (AF06 through AF09) for Apple SoftRAID (Status,
275  Scratch, Volume, and Cache).
276
277- Added two type codes for the Open Network Install Environment (ONIE):
278  0xe100 (7412F7D5-A156-4B13-81DC-867174929325) and 0xe101
279  (D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149).
280
281- Added thirteen type codes for Android partitions (0xa000 through
282  0xa00c).
283
284- Added type code for QNX6 (aka QNX Power-Safe) filesystem: 0xb300, for
285  CEF5A9AD-73BC-4601-89F3-CDEEEEE321A1.
286
287- Removed stray debug message ("REALLY setting name!") from sgdisk,
288  when setting new name via -c option.
289
2901.0.1 (10/18/2015):
291-------------------
292
293- Created uninstall-fixparts and uninstall-gdisk scripts for OS X. As the
294  names imply, these scripts remove the files installed by the fixparts and
295  gdisk packages, respectively.
296
297- Fixed bug that caused -N/--largest-new option to sgdisk to fail when
298  fed a "0" option.
299
300- Fixed bug that caused input glitches in EFI version of gdisk.
301
302- Fixed bug that caused sgdisk to not return an appropriate error code
303  when it encountered a write error when saving changes.
304
305- Fixed bug that caused cgdisk's "Info" display to under-report the
306  partition's size by one sector.
307
308- OS X 10.11 includes new security features that prevent GPT fdisk from
309  working unless these features are disabled. To do so, you must boot to a
310  Recovery HD system, open a Terminal, type "csrutil disable", and reboot
311  into the normal system. You can re-enable the security features by
312  repeating the process, but specify "enable" rather than "disable". I've
313  added a message pointing users to a Web page explaining how to disable
314  this feature when gdisk detects that it can't write to the disk under OS
315  X. If you know of a way around this (including code changes to gdisk),
316  please contact me.
317
318- I've updated the OS X installation location from the Unix-standard
319  /usr/sbin (and related locations for documentation) to /usr/local/bin
320  (and related locations for documentation). This is Just Plain Crazy from
321  a Unix point of view, but Apple has to be Apple and do things just a
322  little bit differently.
323
324- I've updated my OS X environment to OS X 10.11 and LLVM 7.0.0. This has
325  also meant installing fresh versions of popt and ncurses from MacPorts,
326  which may require upgrading popt to get sgdisk working on some systems.
327  (gdisk, cgdisk, and fixparts should continue to work normally on all
328  systems.) The OS X binaries are now "fat" (32- and 64-bit) versions,
329  which should have no noticeable effect unless you have a Mac with broken
330  32-bit support, in which case the binaries will now work.
331
332- Changed the default name of 0xab00 partitions from "Apple boot" to
333  "Recovery HD", since the latter is the name that Apple gives these
334  partitions. Also, I discovered through painful experience that OS X
335  flakes out and won't boot if the name is something other than "Recovery
336  HD", so it really has to have the right name!
337
338- Changed the OpenBSD type codes (0xa600 and 0xa601): 0xa600 is now
339  824CC7A0-36A8-11E3-890A-952519AD3F61 (OpenBSD disklabel) and 0xa601 is
340  now gone. Previously, 0xa600 was 516E7CB4-6ECF-11D6-8FF8-00022D09712B, a
341  duplicate of the FreeBSD disklabel, and 0xa601 was
342  824CC7A0-36A8-11E3-890A-952519AD3F61. OpenBSD is now officially
343  supporting 824CC7A0-36A8-11E3-890A-952519AD3F61 as a disklabel type,
344  though. It's unclear what, if anything, OpenBSD will use for
345  non-disklabel type codes at the moment.
346
347- Added GUID 0311FC50-01CA-4725-AD77-9ADBB20ACE98 (0xbc00) for
348  Acronis Secure Zone backup partitions.
349
350- Fixed bug that caused random crashes on ppc64el systems (and perhaps
351  others).
352
353- Added GUID C91818F9-8025-47AF-89D2-F030D7000C2C (0x3900) for Plan 9.
354
355- Added GUID 69DAD710-2CE4-4E3C-B16C-21A1D49ABED3 (0x8307) for 32-bit ARM
356  Linux root (/) partition, as per the Freedesktop.org Discoverable
357  Partition Spec
358  (http://www.freedesktop.org/wiki/Specifications/DiscoverablePartitionsSpec/).
359
360- Edited man pages to clarify that default alignment is to 1MiB boundaries;
361  this translates to 2048 sectors on disks with 512-byte sectors, but it
362  will be something else on disks with other sector sizes.
363
364- Changed behavior of -z/--zap and -Z/--zap-all options to sgdisk so that
365  if a subsequent command causes changes, they'll be written to disk.
366  Previously, doing something like "sgdisk --zap-all --clear /dev/sdd"
367  would wipe the disk but not create a partition table; to create a blank
368  table you'd need to do "sgdisk --zap-all --clear --mbrtogpt /dev/sdd",
369  which is a bit odd and counter-intuitive, to the point of arguably being
370  a bug.
371
3721.0.0 (3/16/2015):
373------------------
374
375- I'm now building a binary package of gdisk_x64.efi, using the UEFI GPT
376  fdisk package.
377
378- Added partition type for OpenBSD data
379  (824CC7A0-36A8-11E3-890A-952519AD3F61/0xa601). Also mapped 0xa600 to the
380  FreeBSD disklabel type code (516E7CB4-6ECF-11D6-8FF8-00022D09712B). I'm
381  not sure that's 100% correct, but since I can't find references to an
382  OpenBSD disklabel GPT type code, it seems the best choice at the moment.
383
384- Added partition type for Windows Storage Spaces
385  (E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D/0x4202)
386
387- Added -O/--print-mbr option to sgdisk, enabling easier display of MBR
388  data structures without invoking gdisk.
389
390- Updated warning message: "EBR describes a logical partition" now reads
391  "EBR points to an EBR," which is more technically correct.
392
393- Altered warning displayed when run from Windows on non-GPT disk, because
394  Windows on UEFI-based systems is becoming more common.
395
396- Fixed spurious "1" return value in gdisk.
397
398- Small code changes to support compilation as EFI application with the
399  UEFI GPT fdisk library
400  (http://sourceforge.net/projects/uefigptfdisk/?source=directory)
401
402- Added new partition type codes for Ceph
403  (https://github.com/ceph/ceph/blob/9bcc42a3e6b08521694b5c0228b2c6ed7b3d312e/src/ceph-disk#L76-L81):
404  4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D/0xf800 (Ceph OSD),
405  4FBD7E29-9D25-41B8-AFD0-5EC00CEFF05D/0xf801 (Ceph dm-crypt OSD),
406  45B0969E-9B03-4F30-B4C6-B4B80CEFF106/0xf802 (Ceph journal),
407  45B0969E-9B03-4F30-B4C6-5EC00CEFF106/0xf803 (Ceph dm-crypt journal),
408  89C57F98-2FE5-4DC0-89C1-F3AD0CEFF2BE/0xf804 (Ceph disk in creation), and
409  89C57F98-2FE5-4DC0-89C1-5EC00CEFF2BE/0xf805 (Ceph dm-crypt disk in
410  creation)
411
412- Added new partition type codes from
413  http://www.freedesktop.org/wiki/Specifications/DiscoverablePartitionsSpec/:
414  44479540-F297-41B2-9AF7-D131D5F0458A/0x8303 (Linux / on x86),
415  4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709/0x8304 (Linux / on x86-64),
416  B921B045-1DF0-41C3-AF44-4C6F280D3FAE/0x8305 (Linux / on 64-bit ARM),
417  3B8F8425-20E0-4F3B-907F-1A25A76F98E8/0x8306 (Linux /srv).
418
4190.8.10 (3/2/2014):
420------------------
421
422- Added feature to sgdisk's -A/--attributes, -c/--change-name,
423  -t/--typecode, and -u/--partition-guid commands: If a -n/--new option
424  with "0" as the partition number precedes these options on the command
425  line, passin "0" as the partition number to the following options causes
426  them to use the newly-created partition. For instance, "sgdisk -n
427  0:0:+550M -t 0:EF00 /dev/sda" creates a new partition with a type code of
428  EF00. (Previous versions would ignore the "-t 0:EF00" option.)
429
430- Fixed bug that caused incorrect partition number to be displayed by
431  sgdisk in error messages when the user specified a non-existent partition
432  for inclusion in a hybrid MBR or conversion to a conventional MBR.
433
434- Fixed new (in 0.8.9) bug that caused a failure to create more than one
435  hybridized partition when creating a hybrid MBR.
436
437- Fixed bug that caused gdisk and sgdisk to create hybridized partitions
438  that ended at or above the 2^32 sector point with incorrect end values.
439  The behavior now varies between gdisk and sgdisk: gdisk now creates
440  hybrid partitions that begin below 2^32 sectors and that are smaller than
441  2^32 sectors, since this is technically legal; but gdisk displays a
442  warning, because some OSes (such as DOS, Windows XP, OS/2, and BeOS)
443  misbehave with such partitions. AFAIK, only Linux, FreeBSD, and Windows 7
444  work properly with such partitions. Because of this fact and because
445  sgdisk is a more automated tool, it's stricter in how it handles things:
446  It refuses to create a hybrid partition if the original ends at or above
447  the 2^32 sector mark.
448
4490.8.9 (2/17/2014):
450------------------
451
452- Removed dependency on libicu for UTF-16 support.
453
454- Fixed spurious "0xEE partition doesn't start on sector 1" warning in
455  FixParts (and perhaps in other programs under some circumstances).
456
457- Added GPT regeneration command to GPT-destruction options ('z' in gdisk,
458  -z and -Z options to sgdisk). This is done to avoid wiping out data
459  mid-disk that might not be backup GPT data structures, which could
460  otherwise occur if a RAID array was resized in certain ways.
461
462- Added check for an oversized 0xEE protective partition. The program now
463  auto-repairs this condition on loading if the GPT data seem otherwise
464  valid. This is done because I've been receiving reports of some disks
465  (possibly from some OEM Windows 8 loads) that violate the GPT spec in
466  this way, and gdisk was reporting write errors when saving data.
467
468- If the GPT data seem to be damaged in some way or if the disk seems to
469  be a hybrid MBR and if the MBR partition(s) don't fit on the disk, the
470  verify (v) function now warns of this condition, and writing the disk if
471  it exists also displays a more specific error message about the problem.
472
473- Added new type codes (3000, 7412F7D5-A156-4B13-81DC-867174929325 and
474  3001, D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149) for Open Network Install
475  Environment (ONIE) boot and config partitions, respectively.
476
477- Added new type ccde (ED01, BFBFAFE7-A34F-448A-9A5B-6213EB736C22), for
478  Lenovo's ESP-like partition.
479
4800.8.8 (10/14/2013):
481-------------------
482
483- Fixed bug that could cause segfault when passing an invalid partition
484  number to sgdisk's -i/--info command.
485
486- Added new type code: 933AC7E1-2EB4-4F13-B844-0E14E2AEF915, or gdisk code
487  8302, for Linux /home partitions. This type code is used by recent
488  versions of systemd to permit /home to be auto-mounted; see
489  http://www.freedesktop.org/software/systemd/man/systemd-gpt-auto-generator.html
490  for details.
491
492- Added new type code: 9E1A2D38-C612-4316-AA26-8B49521E5A8B, or gdisk code
493  4100, for PowerPC PReP (PowerPC reference platform) boot.
494
495- The number of partition type codes has grown large enough that it fills
496  an 80x24 display. I've therefore added a pause (with a prompt to hit
497  <Enter>) to display more items after showing 21 lines in gdisk or after
498  the screen has nearly filled with entries in cgdisk. There's no such
499  pause/prompt in sgdisk, though.
500
501- Fine-tuned verification ('v') check for 0xEE partition that doesn't begin
502  on sector 1: Previously, a disk with multiple 0xEE partitions would
503  always trigger this warning. Now, the warning occurs only if NONE of the
504  0xEE partitions begins on sector 1.
505
506- Fixed hybrid MBR creation on disks larger than 2TiB: Previously, if one
507  opted to create an extra partition to cover unused space following
508  hybridized partitions, gdisk would hang.
509
510- Added check for an active/bootable 0xEE protective partition to the
511  verify ('v') function. If found, this is not counted as an error, but
512  it is called out to the user, since it can cause some EFIs (such as
513  VirtualBox's EFI) to ignore the disk.
514
5150.8.7 (7/8/2013):
516-----------------
517
518- Modified Mac version so that it can work on /dev/rdisk* devices as well
519  as /dev/disk* devices. The result is that, when using the /dev/rdisk*
520  devices, the partition table can sometimes be re-read without removing
521  the disk or rebooting.
522
523- Added "-a" option to cgdisk to use a ">" symbol to the left of the
524  selected partition rather than ncurses highlighting.
525
526- Modified "converting MBR to GPT" message to clarify that the conversion
527  is being held in memory, since some people have mistakenly assumed that a
528  "gdisk -l" operation will change an MBR disk to a GPT disk without
529  prompting.
530
531- Added partition type code for freedesktop.org's proposed $BOOT partition
532  (bc13c2ff-59e6-4262-a352-b275fd6f7172; GPT fdisk type code EA00)
533
534- Adjusted alignment code when using -n or -N in sgdisk to keep the
535  requested partition size (if specified using +###{MGT} terminology)
536  as the requested value rather than relative to the requested start
537  point. This gives you the requested partition size rather than be
538  slightly smaller if sgdisk needs to adjust the start point up a bit and
539  it prevents gaps from appearing between partitions if several are created
540  in succession using automatic placement of the start point.
541
542- Fixed small bugs in gdisk_test.sh script.
543
544- Removed stray debug message that would appear when reading MBR disks.
545
546- Added partition type code for Intel Rapid Start partition (GUID
547  D3BFE2DE-3DAF-11DF-BA40-E3A556D89593, code 8400), used by systems that
548  implement Intel's Rapid Start technology. See
549  http://blog.adios.tw/2012/10/funtoo-linux-and-intel-rapid-start.html or
550  http://mjg59.dreamwidth.org/26022.html.
551
552- Added partition type code for Haiku BFS (GUID
553  42465331-3BA3-10F1-802A-4861696B7521; code EB00).
554
5550.8.6 (1/9/2013):
556-----------------
557
558- Fixed a bug that could cause sgdisk to crash when passing a partition
559  number of 0 to the -t option.
560
561- Added support for building under Solaris.
562
563- Added a new check to the verification code.
564
565- Added partition type code for Sony system partition
566  (F4019732-066E-4E12-8273-346C5641494F). I'm not entirely clear what this
567  is used for, but it's appearing on some new Sony computers.
568
569- Tweaked hybrid MBR creation options to fix a problem that caused the main
570  0xEE MBR partition to NOT be created if the user told gdisk to NOT place
571  it at the start of the disk AND IF fewer than three partitions are
572  hybridize AND IF the user opted to create a second protective partition.
573
574- Changed default build options for Mac OS X to *NOT* use libicu,
575  since it seems to have broken somewhere along the line. It still
576  works on Linux, though.
577
578- Added partition type codes for VMWare ESX (FB00, FB01, and FC00).
579
5800.8.5 (5/30/2012):
581------------------
582
583- Changed code that writes the partition table so that a disk sync
584  operation occurs even if one or more write operations failed (but not if
585  they all failed). This is intended to work around a bug that a user
586  reported on a Windows system on which the write of the protective MBR
587  failed, although everything else worked. (I suspect anti-virus software
588  may have been blocking write access to the MBR.)
589
590- Added type codes for Midnight BSD (0xA580 - 0xA585). I used these codes
591  because Midnight BSD uses the same 0xA5 type code as FreeBSD on MBR
592  disks, so I'm starting Midnight BSD's numbering halfway through the
593  0xA5## range.
594
5950.8.4 (3/25/2012):
596------------------
597
598- REALLY fixed Ctrl+D problems! Now gdisk terminates upon receiving a
599  Ctrl+D. In all previous versions, it could lock itself into a CPU-hogging
600  loop if launched via "sudo" from a terminal window that was then closed
601  or if Ctrl+D was pressed at certain input prompts (for a partition name
602  or sector number, for instance).
603
6040.8.3 (3/23/2012):
605------------------
606
607- Fixed compilation problem on GCC 4.7.
608
609- Improved handling of Ctrl+D on some systems.
610
611- Added disk's name to message stating that a disk write was successful.
612
613- Fixed bug that caused creation of >2TiB partitions on 32-bit systems to
614  be truncated in sgdisk.
615
6160.8.2 (1/22/2012):
617------------------
618
619- Adjusted the code to support a number of partitions that's not a multiple
620  of the number of partition table entries that fits in a sector (normally
621  4 per sector). The program still rounds up, when necessary, when resizing
622  the partition table manually, but not when loading a partition table that
623  contains a peculiar number of partitions. This helps prevent spurious
624  error messages about CRC problems when loading some Solaris partition
625  tables.
626
627- Fixed bugs relating to the handling of empty partitions; Solaris's ZFS
628  tools create weird empty partitions that are legal but that gdisk wasn't
629  handling properly. (Specifically, they sometimes have non-zero end
630  points; gdisk assumed empty partitions had end points of 0.)
631
632- Fixed a bug that caused an infinite loop of input prompts if the user
633  pressed Ctrl+D.
634
635- Changed gdisk's first-sector input operation to specify a sector number
636  that's properly aligned as the default value. This eliminates the need
637  to alter that value and notify the user of the change when the user
638  hits "Enter" for the default value as the first partition on an empty
639  disk (as well as in some other situations).
640
6410.8.1 (10/1/2011):
642------------------
643
644- Fixed bug that could cause FixParts to keep a partition's assignment
645  as logical when FixPart could not actually do so. This could happen
646  when there are no gaps between two logical partitions. Some partitioning
647  tools can create such configurations, but FixParts can't. Such
648  configurations are extremely rare. I've only encountered them when
649  logical partitions are out of order.
650
651- Added code to detect infinite loops of logical partitions when reading
652  MBR data. When detected, the program now stops reading after the first
653  loop, so no duplicates appear in the partition list.
654
655- Fixed bug in partition overlap detection in MBR code.
656
657- Changed GPT reading code to use the size encoded in GPT headers to
658  determine how much of the header to use in computing a CRC, with the
659  restriction that the size be equal to or less than the disk's sector
660  size. This should work around problems with libefi in ZFS, which sets the
661  header size to 512 rather than the more common 92. A caveat: If the
662  disk's sector size is larger than the GPTHeader data structure size (512
663  bytes), then the rest of the sector's contents are ignored and replaced
664  with 0 values. This could produce false positives on CRC checks on disks
665  with over-512-byte sector sizes if the header sector is padded with
666  something other than 0 values.
667
668- Fixed bug in new (as of 0.8.0) check that main and backup partition
669  tables are identical on big-endian (PowerPC, etc.) hardware.
670
6710.8.0 (9/10/2011):
672------------------
673
674- Added new return option for sgdisk: 8, which means that a replication
675  operation (-R or --replicate) failed. Note that other operations on
676  the same command line might still have succeeded.
677
678- Added gdisk_test.sh shell script, contributed by Guillaume Delacour.
679  This script tests some common gdisk and sgdisk operations to be sure
680  they're working correctly.
681
682- Enable sgdisk's -l (--load-backup) and -o (--clear) options to work
683  even on disks that are damaged. Most other options will still be ignored,
684  though, so if you suspect a disk may be bad and want to use one of these
685  options, you should do so on a line by itself, followed by a separate
686  command to perform other actions (such as adding new partitions).
687
688- Added check for mis-matched primary and backup partition tables.
689  A mismatch is reported as a CRC error.
690
691- Added Apple Core Storage partition type code (hex code AF05, GUID
692  53746F72-6167-11AA-AA11-00306543ECAC).
693
694- Added cgdisk program to the family. This program is a rough workalike
695  to cfdisk, much as gdisk is a rough workalike to fdisk. See the cgdisk
696  man page or http://www.rodsbooks.com/gdisk/cgdisk-walkthrough.html for
697  details about its operation.
698
699- Fixed bug that caused CHS end point for protective MBR to be set to
700  0xfeffff rather than the spec-mandated 0xffffff on disks over ~8GB. This
701  is a very minor bug, since not much cares about this, and most other GPT
702  tools get it wrong in the same way, too.
703
7040.7.2 (6/26/2011):
705------------------
706
707- The Windows version now (finally!) generates proper GUIDs rather than a
708  purely random number. This fixes a bug that caused Windows 7 to crash
709  when converting a disk from MBR format (but, oddly, not when creating a
710  fresh partition table or doing various other things).
711
712- Added a warning when an MBR partition is discarded because it's too
713  big for the disk.
714
715- Changed warning to Windows users about the dangers of converting to GPT
716  so that it appears only on disks that aren't already in GPT form.
717
718- Fixed bug that caused bogus "3" values to pad the ends of partition names
719  on some disks (particularly those created by Microsoft's disk
720  partitioning tools).
721
722- Made compilation without Unicode support possible (see README file)
723
724- Made default filesystem type code OS-dependent (based on the compilation
725  platform).
726
727- Added new Linux-only filesystem partition type GUID code,
728  0FC63DAF-8483-4772-8E79-3D69D8477DE4 (8300 entry code). Also changed name
729  of the EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (0700 entry code) to
730  "Microsoft basic data").
731
732- Fixed a bug that caused an incorrect code to be set for active/bootable
733  partitions when generating a hybrid MBR.
734
735- Enable entry of hex codes that begin with "0x" for both GPT and MBR
736  partitions.
737
738- Fixed bug that caused the boot loader code to be lost when creating a
739  hybrid MBR.
740
741- Fixed bug in sector input code that could produce improper values
742  if the user inputs ridiculously large "+" values.
743
7440.7.1 (3/21/2011):
745------------------
746
747- Added support for proper UTF-16LE partition names rather than the
748  "shortcut" that properly encoded only ASCII names. This support works
749  only in Linux, FreeBSD, and OS X, though, at least for the moment.
750  Although it's possible to compile this support into Windows when using
751  Visual C++, it doesn't seem to work properly. Since using this feature
752  would require distributing the ICU libraries with the Windows binary,
753  thus bloating the binary package's size to no effect, I've disabled it in
754  my standard Windows build, at least for now.
755
756- Added check to fixparts to keep it from operating on devices that
757  lack an existing MBR signature. (In 0.7.0, it could write an empty
758  MBR data structure to a device on which it was mistakenly launched.)
759
760- Fixed bug that caused the protective MBR to not be written when
761  restoring a backup of the GPT data.
762
763- Fixed bug that caused second protective MBR partition, when created
764  as part of a hybrid MBR, to always be of type 0xEE, even when the
765  user specified something else.
766
767- Integrated a number of code cleanups contributed by Florian Zumbiehl.
768
7690.7.0 (3/11/2011):
770------------------
771
772- Fixed bug that caused some types of logical partitions to be misread.
773
774- Created FixParts program, to fix problems on MBR-partitioned disks.
775  Although this program is part of the GPT fdisk family, it is NOT used on
776  GPT disks.
777
778- Completely redid the GPT-to-MBR code, used both for converting to MBR
779  form and for creating hybrid MBRs.
780
781- Fixed a bug that caused gdisk to "forget" some partitions if there were
782  numbering gaps when a conversion to MBR was aborted.
783
784- Improved CHS value creation on small (<~8GB) disks for protective MBR
785  and when creating hybrid MBRs or converting to MBR format. Linux-only,
786  for the moment; other platforms still produce bad CHS values on sub-~8GB
787  disks (but few OSes care these days).
788
789- Enhanced disk replication features ('u' on the experts' menu in gdisk; -R
790  or --replicate in sgdisk). It's now possible to replicate the partition
791  table from a larger to a smaller disk, so long as all the partitions fit
792  on the smaller disk. In sgdisk, the secondary GPT data are moved
793  automatically if disk sizes don't match. In gdisk, the secondary GPT data
794  are moved automatically if the target disk is smaller than the source
795  disk; if the target disk is larger than the source disk, the user is
796  given the option of making this adjustment.
797
798- Fixed --load-backup (-l) option to sgdisk, which was broken.
799
800- Changed largest drive that's not given a minimum 4 KiB alignment even
801  when smaller alignment is detected on the disk to 300 GB.
802
803- Fixed bug that prevented aborting a partition table backup ('u' on the
804  experts' menu) by hitting the Enter key for the device filename.
805
806- Implemented a number of code cleanups provided by Florian Zumbiehl.
807
8080.6.14 (1/8/2011):
809------------------
810
811- Made small change to the way the start sector is interpreted if you use a
812  "+" specification, as in "+2G" to locate a partition 2 GiB into the
813  default range. This change makes adjustments for sector alignment less
814  likely.
815
816- Modified sgdisk's -n (--new) option to work with relative start and end
817  values (which the man page incorrectly stated it already did). Values of
818  0 for the start and end sectors refer to the first and last available
819  sectors in the largest free block, and a partition number of 0 refers to
820  the first available partition.
821
822- Added ChromeOS GUID values to list of recognized partition type GUIDs.
823  7F00 = ChromeOS kernel, 7501 = ChromeOS root, 7502 = ChromeOS reserved.
824  Untested on actual ChromeOS system.
825
826- Tweaked APM detection to look for APM signature even if an MBR
827  signature has already been found. Helps in diagnosis of cases
828  in which an MBR has overwritten an APM disk.
829
8300.6.13 (10/12/2010):
831--------------------
832
833- Added notification about nonexistent partitions to hybrid MBR creation
834  in gdisk.
835
836- Fixed bug in GPT-to-MBR conversion that could sometimes enable creation
837  of an extended partition that overlaps a preceding partition.
838
839- Fixed bug in GPT-to-MBR conversion that prevented creation of an MBR
840  table with logical partitions if there were four or fewer partitions.
841
8420.6.12 (10/7/2010):
843-------------------
844
845- Adjusted alignment code to use 1 MiB alignment by default for drives with
846  other than 512-byte sector sizes. (Previous versions increased this --
847  for instance, to 4 MiB for drives with 2048-byte logical sector size.)
848
849- Entry of non-hexadecimal value for partition type code now causes
850  re-prompting for a new value, fixing a recently-introduced minor bug.
851
852- Fixed bug in sector entry using K/M/G/T/P suffixes on disks with
853  other-than-512-byte sector numbers.
854
855- Added "P" (PiB, pebibyte) suffix to suffixes accepted in entering
856  partition sizes.
857
858- Fixed bug that caused sgdisk to segfault if fed the (invalid)
859  "-A show" parameter. Now it terminates with a complaint about an invalid
860  partition number 0.
861
862- Removed warning when running on big-endian hardware, since this
863  support has been present for quite a while with no bug reports.
864
8650.6.11 (9/25/2010):
866-------------------
867
868- Added -F (--first-aligned-in-largest) option to sgdisk. This option is a
869  variant on -f (--first-in-largest); it returns the number of the first
870  sector that will be used in the largest free area, given the current
871  alignment value (set via -a/--set-alignment).
872
873- Streamlined GUID code entry in gdisk; it no longer offers the option
874  to enter GUIDs in separate segments.
875
876- The -t option to sgdisk now accepts GUID values as well as the
877  sgdisk/gdisk-specific two-byte hex codes.
878
879- Added check that the protective 0xEE MBR partition begins on sector 1
880  to the verify function. If it doesn't, a warning message is displayed,
881  but it doesn't count as an error.
882
883- Added check for overlapping MBR partitions to verify function (gdisk "v"
884  function on all menus; sgdisk -v/--verify function). Also warns about
885  multiple MBR 0xEE partitions (causes problems in some OSes).
886
887- Added check to GPT-to-MBR and hybrid MBR creation options to prevent
888  creation of disks with duplicate partitions. When told to create a disk
889  with duplicates, sgdisk now aborts with the error message "Problem
890  creating MBR!" When attempting to create a hybrid MBR with duplicates,
891  gdisk silently drops duplicate partitions, leaving fewer than requested.
892  Creating duplicates should not be possible in sgdisk when converting to
893  MBR form.
894
8950.6.10 (8/22/2010):
896-------------------
897
898- Enable disk-wipe (-z and -Z) and verification (-v) operations in
899  sgdisk even if the disk is badly damaged.
900
901- Added support for setting attributes in sgdisk (-A/--attributes option)
902  in sgdisk.
903
904- Fixed bug that created backwards attribute field values (bit #2 was
905  entered as bit #61, etc.).
906
907- Fixed bug that caused creation of hybrid MBR to wipe out the MBR's boot
908  code.
909
910- Added ability to save partition table from one device to another (gdisk:
911  'u' on experts' menu; sgdisk: -R or --replicate option).
912
913- Fixed inaccessible -C/--recompute-chs option in sgdisk.
914
9150.6.9 (7/4/2010):
916------------------
917
918- Fixed minor error in sgdisk man page (--largest-new option requires
919  a partition number).
920
921- Fixed major bug in hybrid MBR creation, which caused incorrect
922  protective partition end point settings and occasionally other
923  problems.
924
9250.6.8 (5/23/2010):
926------------------
927
928- Added tests to see if the file to be opened is a directory, character
929  device, FIFO, or socket; program now terminates if any of these
930  conditions is met. (Linux/FreeBSD/OS X only.) Thanks to  Justin Maggard
931  for this patch.
932
933- Added 'f' option on gdisk's experts' menu (-G/--randomize-guids in
934  sgdisk). This option randomizes the disk's GUID and all partitions'
935  GUIDs. Intended for use after cloning a disk with a utility that copies
936  the GUIDs intact (such as a raw dd copy) if you want each disk copy to
937  have its own set of GUIDs.
938
939- Added -u/--partition-guid and -U/--disk-guid options to sgdisk. These are
940  the equivalents of the 'g' and 'c' options, respectively, on the gdisk
941  experts' menu: They enable adjusting an individual partition's GUID or a
942  disk's GUID. The GUID may be either a fully specified GUID value or 'R'
943  or 'r' to set a random GUID value.
944
945- Fixed compile problem for FreeBSD (its math library lacks a log2()
946  function). Also created separate Makefile.freebsd with a couple of
947  FreeBSD-specific options.
948
949- Added -N (--largest-new) command to sgdisk. This command creates a single
950  partition that fills the largest single unpartitioned block of space on
951  the disk.
952
953- Fixed sgdisk man page error: the --change-name option was incorrectly
954  listed as --change.
955
956- Added 'h' option to gdisk experts' menu (-C or --recompute-chs in sgdisk)
957  to recompute all protective/hybrid MBR CHS values. This option is
958  intended to work around a bug in at least one BIOS that prevents the
959  computer from booting when the GPT-mandated (but technically illegal)
960  0xFFFFFF CHS value is used as the end point for a protective MBR. The
961  recomputed values will be legal (e.g., 0xFEFFFF instead of 0xFFFFFF),
962  but incorrect in GPT terms, and will therefore enable at least one
963  BIOS to boot with a GPT disk. See http://www.rodsbooks.com/gdisk/bios.html
964  for all I know about BIOS/GPT incompatibilities.
965
9660.6.7 (5/1/2010):
967-----------------
968
969- Undid earlier change, with version 0.6.4, that wiped the MBR boot loader
970  when doing MBR-to-GPT conversions. I've now become skeptical that MBR
971  boot loaders were causing any real problems on GPT disks, so I'm going
972  back to the philosophy of leaving as much alone as possible.
973
974- Fixed bug that caused incorrect reporting of free space on 0-size disks
975  (e.g., files of 0 length passed as disk images).
976
977- Fixed bug that caused segfault on some invalid disks
978
979- Fixed bug that caused incorrect partition numbers to be displayed for
980  some verify problems.
981
982
9830.6.6 (3/21/2010):
984-----------------
985
986- Added support for the "no block IO protocol" (referred to as "hide from
987  EFI" in GPT fdisk) and "legacy BIOS bootable" attribute bits. See Table
988  19 of the UEFI 2.3 specification (p. 153) for details.
989
990- Changed the sequence in which GPT data structures are written to disk;
991  backups are now written first, followed by the main structures. This is
992  as recommended in the UEFI 2.3 specification, since it's safer in the
993  extremely unlikely event that a RAID array's size is increased and
994  there's a power outage mid-write. (If the main structures are written
995  first in this case, they'll point to data that's not yet been written;
996  but by writing the backups first, the old main structures will still
997  point to the valid old backup structures.)
998
999- Protective MBRs now have disk signatures of 0x00000000, to better
1000  conform with GPT as described in the UEFI 2.3 specification.
1001
1002- Added alignment information to the summary data produced by the
1003  'p' main-menu option in gdisk or the -p option to sgdisk.
1004
1005- More alignment changes: GPT fdisk now attempts to determine the alignment
1006  value based on alignment of current partitions, if any are defined. If no
1007  partitions are defined, a default value of 2048 is set. If the computed
1008  value is less than 8 on drives over about 596GiB, it's reset to 8, since
1009  the drive might be a WD Advanced Format unit that requires an 8-sector
1010  (or larger power-of-2) alignment value for best performance. The
1011  2048-sector default provides better alignment in some RAID
1012  configurations.
1013
1014- Changed behavior when a backup restore fails. Previously, GPT fdisk
1015  would create a fresh blank set of partitions. Now it does so only
1016  if the failure occurs when interpreting the backup's contents; if the
1017  user typed the wrong filename, the in-memory data structures aren't
1018  touched.
1019
1020
10210.6.5 (3/7/2010):
1022-----------------
1023
1024- Added tests to verify ('v') function and to pre-save checks to look for
1025  partitions that end before they begin or that are too big for their
1026  disks.
1027
1028- Fixed a bug that could cause spurious data to appear in a grown partition
1029  table.
1030
1031- Added ability to convert some or all partitions to logical partitions in
1032  GPT-to-MBR conversion. This feature is limited by the fact that at least
1033  one free sector must exist immediately prior to each logical partition,
1034  so it won't do much good if partitions are crammed together. It should be
1035  possible to convert back to MBR any disk that started that way, provided
1036  no partitions were added or resized when the disk was in GPT form; and
1037  disks that were partitioned with Apple's Disk Utility or other tools that
1038  insert unpartitioned space should also be convertible. CAUTION: THE
1039  LOGICAL PARTITION CREATION FEATURE DOESN'T TRY TO ALIGN PARTITIONS OR
1040  PARTITION HEADER DATA TO CYLINDER BOUNDARIES! It's conceivable that some
1041  older OSes or utilities will object to these disks, although Linux, OS X,
1042  Windows Vista, and Windows 7 all seem happy with them.
1043
1044- Fixed bug that caused creation of 0-length file if an incorrect device
1045  filename was typed.
1046
1047- The gdisk program now prompts for a device filename if it's called with
1048  no options. This enables gdisk to do something useful if it's launched by
1049  double-clicking its icon in a GUI environment.
1050
1051- Added workaround for bug in some versions of MinGW that caused the
1052  program to garble input sector numbers.
1053
1054- The Windows version now works on disks with over-512-byte sectors.
1055  Tested on a magneto-optical (MO) drive with 2048-byte sectors.
1056
1057- Added -D (--display-alignment) option to sgdisk, to display sector
1058  alignment value (by default, 1 for sub-800GiB disks and 8 for disks
1059  over that size).
1060
1061- Fixed bug in computation of CHS geometries for protective MBR. This is
1062  non-critical, since most modern utilities ignore the CHS geometries.
1063  Concerned users can use the 'n' option on the experts' menu to build new
1064  protective MBRs with the new algorithm, if desired. (Note that GNU
1065  Parted, at least, gets this wrong, too.)
1066
1067- Fixed memory-allocation bug when reading GPT disks with partition tables
1068  with over 128 entries; could cause program to crash on startup.
1069
10700.6.4-2 (2/20/2010):
1071--------------------
1072
1073Note: Neither of the following changes affects actual program code, so I've
1074left the version number in the program at 0.6.4.
1075
1076- Altered Makefile to pass user's compiler and linker environment
1077  variables through.
1078
1079- Added #include to gpttext.cc to enable it to compile on the latest
1080  GCC versions (it was failing on at least some 4.4.x compilers).
1081
10820.6.4 (2/19/2010):
1083-------------------
1084
1085- Added -m (--gpttombr) option to sgdisk, enabling conversion of GPT
1086  disks to MBR format, with a limit of four partitions total, and of course
1087  without overcoming the 2TiB limit.
1088
1089- Added -h (--hybrid) option to sgdisk, enabling creation of hybrid
1090  MBRs. Fewer options are available in sgdisk than in gdisk, though,
1091  in order to keep the user interface manageable.
1092
1093- Fixed off-by-one bug in specification of partition when using the
1094  -T (--transform-bsd) option in sgdisk.
1095
1096- Changed the code to create a new MBR unique disk signature whenever a new
1097  protective MBR is generated (when doing an MBR-to-GPT conversion, when
1098  using the 'n' option on the experts' menu, or when using the 'o' option
1099  on the main menu, for example). Previous versions attempted to preserve
1100  the existing MBR disk signature in most cases, but this resulted in
1101  values of 0x00000000 whenever an empty disk was partitioned, and often in
1102  other cases, too. Better to risk changing this value too often than to
1103  leave multiple disks with 0x00000000 values, I think.
1104
1105- Added transpose ('t' on experts' menu in gdisk; or -r or --transpose in
1106  sgdisk) command to enable fine-tuning partition order without doing a
1107  full sort.
1108
1109- Added code to clear the MBR boot loader when doing an MBR-to-GPT
1110  conversion. (This was already done in full-disk BSD-to-GPT conversions.)
1111  This is done because I've seen a few problem reports that make me think
1112  some MBR boot loaders freak out and hang the system when they encounter
1113  GPT disks, and/or they attempt to load a second-stage boot loader stored
1114  in what is now GPT territory, causing a system hang. Since MBR boot
1115  loaders don't work on GPT disks anyhow (even GRUB needs to be
1116  reinstalled), this new wiping behavior shouldn't cause any problems, and
1117  may prevent a few.
1118
1119- Fixed bug in Windows version that prevented saving backup files.
1120
1121- Fixed bug that caused second and subsequent partition numbers in
1122  prompts in hybrid MBR conversion procedure to be displayed in
1123  hexadecimal.
1124
1125- Fixed very obscure potential bug in hybrid MBR/GPT synchronization when
1126  deleting partitions; code wasn't matching partition lengths correctly,
1127  which would only affect partitions that start at the same point but have
1128  different lengths in MBR vs. GPT.
1129
1130- Fixed bug in the -E option to sgdisk; it was actually returning the
1131  last free sector, not the last free sector in the largest free block.
1132
1133- Fixed bug in -t option to sgdisk; it was corrupting partition type
1134  codes.
1135
1136- Fixed minor alignment bug in partition summary list ('p' from any menu)
1137  when partition sizes are between 1000 and 1024 units.
1138
1139- Backup restore function ('l' on recovery & transformation menu) now
1140  accepts both backups generated by GPT fdisk and backups created by a
1141  direct copy (via dd, etc.) of the MBR, main GPT header, and main GPT
1142  partition table, in that order. ("dd if=/dev/sda of=backup.gpt bs=512
1143  count=34" will do this on Linux for a disk with a typical-sized GPT table
1144  of 128 entries.)
1145
11460.6.3 (2/3/2010):
1147------------------
1148
1149- Fixed serious data corruption bug on big-endian (PowerPC and similar)
1150  systems.
1151
1152- Changed several GPT fdisk Solaris type codes to correct a duplicate
1153
1154- Corrected error in GPT fdisk type codes for NetBSD LFS and NetBSD RAID;
1155  they were identical, but I've now changed NetBSD RAID to A906, which
1156  is unique.
1157
1158- Added GUID for IBM General Parallel File System (GPFS) partition type
1159  code. Somewhat arbitrarily set it to use the 7501 number (MBR code 0x75
1160  is used by IBM PC/IX, so it's at least the right company, by my loose
1161  numbering rules....).
1162
1163- Improved GUID generation. Prior versions generated completely random
1164  numbers for GUIDs. This works, but is technically a violation of the
1165  spec. Unix versions now employ libuuid to generate GUIDs in a more
1166  correct way. The Windows version still generates random numbers, though.
1167
1168- Turned PartTypes class into a derived class of GUIDData, and renamed
1169  it to PartType.
1170
1171- Created new GUIDData class, to replace the original GUIDData struct.
1172
11730.6.2 (1/29/2010):
1174------------------
1175
1176- The change-type ('t' on main menu) option now changes the partition's
1177  name *IF* the current name is the generic one for the partition type.
1178  If the current name is not the generic name, it is NOT changed.
1179
1180- Fixed bug that caused new protective MBR to not be created when the
1181  MBR was invalid and the GPT was damaged and the user opts to try to
1182  use the GPT data.
1183
1184- Enabled default partition type code of 0700 when creating partitions
1185  or changing their type codes. (Type 0700, Linux/Windows data, is set if
1186  the user hits the Enter key alone.)
1187
1188- Fixed bug in sort ('s' on main menu) option that caused partition
1189  numbers to begin at more than 1 if the original partition list had
1190  too many empty partitions before the last one defined.
1191
1192- Improved code to determine which partition table to load in case of
1193  CRC mismatches between the partition tables and the stored CRC values
1194  in the headers.
1195
1196- Compiles using MinGW (http://www.mingw.org) to create a Windows binary.
1197
1198- Moved all disk I/O functions to the new DiskIO class. This helps with the
1199  Windows port; it uses diskio-windows.cc for Windows-specific code,
1200  diskio-unix.cc for the Linux, FreeBSD, and OS X code, and diskio.cc for
1201  cross-platform disk I/O code.
1202
1203- Changed BSD disklabel detection code to be more correct (I think).
1204  This change has no effect on my test disks, but I hope it'll work
1205  better on disks with sector sizes other than 512 or 2048.
1206
12070.6.1 (1/20/2010):
1208------------------
1209
1210- Fixed bug that returned incorrect disk size on 32-bit versions of
1211  FreeBSD.
1212
1213- Fixed bug that prevented FreeBSD version from working on disk image
1214  files.
1215
1216- Fixed bug that caused BSD disklabel conversion to fail.
1217
12180.6.0 (1/15/2010):
1219------------------
1220
1221- Fixed bug that caused the convert to MBR function to fail.
1222
1223- Added support for disks with other than 512-byte sectors.
1224
1225- Created embryonic sgdisk program.
1226
1227- Fixed bug that caused relative sector numbers entered by users (e.g,
1228  "+128M") to be misinterpreted as from the start of the range rather than
1229  from the default value.
1230
12310.5.3 (1/4/2010):
1232-----------------
1233
1234- Fixed bug in display of GUIDs when compiled with some versions of GCC.
1235
1236- Eliminated warnings caused by additional checks in latest versions of
1237  GCC. These warnings were harmless, but to eliminate them I've added
1238  more error checking on disk I/O.
1239
1240- Eliminated unnecessary warnings about potential data loss if the program
1241  was launched with the -l option or if writes aren't possible.
1242
1243- Added code to set the partition boundary value based on the physical
1244  sector size. (FindAlignment() function.) This function, however, works
1245  only on Linux, and then only if the BLKPBSZGET ioctl is defined. This
1246  ioctl is new in kernel 2.6.32 or thereabouts.
1247
12480.5.2 (12/31/2009):
1249-------------------
1250
1251- Modified partition creation function to begin partitions on 8-sector
1252  boundaries by default. This improves performance on the new Western
1253  Digital Advanced Format drives. The new 'd' and 'l' options on the
1254  experts' menu display and change, respectively, the boundary size.
1255
1256- Tweaked code to produce fewer warnings on the latest versions of
1257  GCC.
1258
12590.5.1:
1260------
1261
1262- Made some minor edits to the man page.
1263
1264- Incorporated RPM .spec file changes contributed by Scott Collier
1265  (boodle11@gmail.com).
1266
1267- Changed method of locating and loading backup GPT data, to use the
1268  main header's pointer, if it's valid, rather than seeking to the
1269  end of the disk.
1270
1271- Added 'e' option (relocate backup GPT data structures) to the experts'
1272  menu.
1273
1274- Fixed bug that prevented recovery of partitions in case of partially
1275  damaged GPT data (bad main and good backup or bad backup and good
1276  main header, for instance).
1277
12780.5.0:
1279------
1280
1281- Added GPT-to-MBR conversion function. It's very limited, but potentially
1282  useful in some cases.
1283
1284- Fixed bug that caused incorrect file sizes to be reported on 32-bit
1285  Linux, thus causing problems when editing partition tables in disk images
1286  or when loading GPT backup files.
1287
1288- Fixed bug that caused bogus CRC error reports when loading backup GPT
1289  data.
1290
1291- Reorganized menus. There are now three: the main menu, the experts' menu,
1292  and the recovery & transformation menu. The last of these has most of the
1293  items that had been on the earlier versions' experts' menu.
1294
1295- Added ability to re-load the MBR and generate a fresh GPT from it. This
1296  is normally identical to quitting and re-running the program, but it
1297  could be handy if, say, the GPT partitions on a hybrid configuration are
1298  badly messed up; this will enable using the hybridized partitions as the
1299  starting point for a new GPT setup.
1300
1301- The program now generates CHS values for hybrid and GPT-to-MBR conversion
1302  MBRs. For the moment, the assumption is the maximum number of heads and
1303  sectors per track (255 and 63, respectively), although the bulk of the
1304  code supports other values -- it'd just be awkward to enter the data in
1305  the user interface.
1306
1307- Fixed minor display bug that caused number of sectors on the disk to be
1308  shown as 0 on large disks when running 32-bit binaries.
1309
1310- Reverted 0.4.2's zap (destroy GPT) changes, since I don't want to wipe
1311  out a valid MBR if the user created that MBR over an older GPT without
1312  first properly wiping out the GPT, and the user now wants to wipe out
1313  the GPT.
1314
1315- Reformatted and edited the man page. Aside from edits related to the
1316  preceding program changes, I've altered the markup slightly and trimmed
1317  much of the more tutorial information from the man page to better
1318  conform to typical terse man page style.
1319
13200.4.2:
1321------
1322
1323- Code cleanup.
1324
1325- Fixed very small formatting bug in display of hex code when a match isn't
1326  found when converting from an MBR/gdisk hex code to a GUID type code.
1327
1328- Added the ability to work on disk image files (raw files for virtual
1329  machines, backup images, etc.). The program assumes that all such disk
1330  image files have 512-byte sectors.
1331
1332- Added verification prompt to 'o' main-menu option to avoid accidental
1333  erasures of all partitions.
1334
1335- The "destroy GPT data structures" option ('z' on the experts' menu) now
1336  also destroys all EFI GPT (0xEE) partitions in the MBR.
1337
1338- Added an extra warning to the "destroy GPT data structures" option if an APM
1339  or BSD disklabel was detected on the disk.
1340
1341- Added a buffer flush after destroying GPT data structures, to get the OS
1342  to read the new (empty or MBR-only) partition table.
1343
1344- Fixed bug that allowed entry of nonexistent partition numbers when creating
1345  a hybrid MBR.
1346
13470.4.1:
1348------
1349
1350- Code cleanup/re-organization
1351
1352- Partition creation function ('n' on main menu) now uses the start of the
1353  largest available chunk of free space rather than the first available
1354  sector as the default starting sector number. This should enable easier
1355  partition creation if there are small bits of free space on the disk.
1356
1357- You can now specify the end point of a partition by using a minus sign,
1358  in which case the end point is the default value minus the specified
1359  size. For instance, "-200M" creates a partition that ends 200MiB before
1360  the default end point.
1361
1362- You can now specify the start point of a partition by using a plus or
1363  minus sign, in which case the start point is the specified distance from
1364  the start (+) or end (-) of free space. This is exactly the same as the
1365  new rules for entry of the end point, except that the default value is
1366  set differently.
1367
1368- Deleting a partition now checks for a matching hybrid MBR partition, and
1369  if one is found, it's deleted. Any empty space that then surrounds the
1370  0xEE (EFI GPT) MBR partitions is then added to the nearby 0xEE partition.
1371  If no non-0xEE partitions are left, a fresh protective MBR is generated.
1372
1373- Added hybrid MBR consistency check to the verify ('v') option and to
1374  pre-write checks. If non-0xEE/non-0x00 MBR partitions without
1375  corresponding GPT partitions are found, the user is warned. This finding
1376  does NOT prevent writing the partition table, though.
1377
1378- Added non-destructive write test when opening the device file, in order
1379  to detect the problem with FreeBSD being unable to write to disks with
1380  mounted partitions (or other potential problems).
1381
13820.4.0:
1383------
1384
1385- Added support for BSD disklabels. The program can now convert disks that
1386  use "raw" disklabels, with the caveat that the first partition will
1387  almost certainly need to be deleted because it'll overlap the main GPT
1388  header; and convert disklabels contained within a GPT (or a former MBR,
1389  converted to GPT) partition. In the latter case, the 'b' main menu option
1390  is used.
1391
1392- Added support for compiling on FreeBSD.
1393
1394- Fixed bug that could cause crashes or incomplete sorts when sorting
1395  the partition table.
1396
1397- New partitions, including converted ones, now take on the name of the
1398  partition type as a default name.
1399
1400- Reorganized some code; created a separate C++ class for GPT partitions
1401  (GPTPart), which replaced a struct and enabled moving code from the
1402  bloated GPTData class into GPTPart.
1403
1404- Fixed a bug that produced spurious warnings about unknown sector sizes
1405  when loading a backup file.
1406
14070.3.5:
1408------
1409
1410Note: This version was not officially publicly released; I wanted to test
1411the big-endian support while developing 0.4.0.
1412
1413- Tweaked the disk type identification code to warn users to re-sync their
1414  hybrid MBRs when one is detected.
1415
1416- Tweaked MBR-reading code to ignore 0xEE (EFI GPT) partitions. This will
1417  only have an effect on a poorly partitioned MBR disk that contains an
1418  inappropriate EFI GPT partition, or when attempting to recover a
1419  corrupted disk by using the hybrid MBR for data recovery.
1420
1421- Added big-endian (PowerPC, etc.) support!
1422
1423- Added code to identify and warn of the presence of an Apple Partition
1424  Map (APM) on the disk.
1425
1426- Enabled MBR conversion code to handle multiple logical partitions.
1427
14280.3.4:
1429------
1430
1431- Fixed bug that enabled (possibly accidental) entry of MBR type codes of
1432  0x00 in GPTData::MakeHybrid(). The fix also enables entry of default
1433  type code by pressing the Enter key when prompted. Applied a similar
1434  fix to the entry of the type code for the second protective partition,
1435  if one is used.
1436
1437- Fixed a typo: "sectors" was spelled "sectprs" in one spot!
1438
1439- Fixed bug that caused default entry for end sector to be refused if an
1440  initial value using a plus sign (e.g., "+20G") was also refused.
1441
14420.3.3:
1443------
1444
1445- Gave users control over the way MBR partitions are assigned to slots in a
1446  hybrid MBR setup; the original method (putting the 0xEE partition after
1447  the real partitions) works well for non-boot disks, but both GRUB and
1448  GRUB2 become confused by this type of setup, so it needs changing.
1449
1450- Changed "blocks" to "sectors" in GPT and MBR table displays.
1451
1452- Added "Boot" column to MBR table display; shows an asterisk (*) when the
1453  partition's status is bootable.
1454
14550.3.2:
1456------
1457
1458- Changed __DARWIN_UNIX03 to __APPLE__ as code to enable MacOS X support.
1459
1460- Added the ability to create a hybrid MBR ('h' on experts' menu). This was
1461  motivated by my discovery that Windows 7 remains brain-dead when it comes
1462  to the ability to boot from a GPT disk, at least on BIOS-based machines.
1463
1464- Added 'z' option to experts' menu, to destroy GPT data structures and
1465  exit. The intent is to use this feature to enable subsequent partitioning
1466  of the disk using fdisk or other GPT-unaware tools. (GNU Parted will wipe
1467  the GPT data structures itself when you create a new MBR ["msdos
1468  disklabel," in Parted parlance], so using Parted is another option.)
1469
1470- Slightly altered the effect of the 'o' command on the main menu. It now
1471  blanks out the protective MBR, as well as the GPT data.
1472
14730.3.1:
1474------
1475
1476- Added Mac OS X support, provided as a patch by David Hubbard
1477  (david.c.hubbard@gmail.com).
1478
1479- Fixed bug in disksize() function on Mac OS. (Possibly dependent on the
1480  kernel and/or GCC version.) The disk size, of type uint64_t, was not
1481  being passed correctly, so I reorganized the function to return it as
1482  the function's return value rather than as a parameter. This seems to
1483  work OK on my Mac OS test system and on both 32- and 64-bit Linux
1484  systems.
1485
1486- Fixed off-by-one bug in GPTData::FindLastAvailable().
1487
1488- Fixed bug that caused display of options after a disk-write error.
1489
1490- Fixed several incorrect MacOS X partition type GUIDs, thanks to Yves
1491  Blusseau (1otnwmz02@sneakemail.com).
1492
14930.3.0:
1494------
1495
1496- Changed version number to 0.3.0, reflecting the fact that I've received
1497  no significant bug reports and so am elevating the program to "beta"
1498  status. This change also entailed altering the warning the program
1499  displays when saving partition table changes.
1500
1501- Fixed minor bug in CHS geometry of the protective MBR's type EE partition
1502  (was producing 0x000200 as the start value, but should be 0x000100).
1503  Should be a non-critical bug since the protective MBR partition
1504  definition is only there to keep MBR-only disk utilities from messing
1505  with the disk.
1506
1507- Added ability to enter GUIDs as single massive strings rather than in
1508  chunks.
1509
15100.2.2:
1511------
1512
1513- Added #include directives required to compile the program using GCC
1514  4.4.0.
1515
15160.2.1:
1517------
1518
1519- Fixed partition numbering problem in reports of partition overlaps in
1520  verification function.
1521
1522- Fixed 1-sector partition size problem when creating new partitions
1523  (partitions were 1 sector too big when using the +size option).
1524
1525- Changed BytesToSI() to display values in bytes without decimal points
1526  (e.g., "512 bytes" rather than "512.0 bytes").
1527
1528- Added GPTData class member functions to retrieve GPT data structure
1529  locations on disk; used in my internal-use-only GPT-wiping program.
1530
1531- Eliminated the "a reboot is recommended" notice after writing the
1532  partition table.
1533
1534- Added notice after sorting the partition table to the effect that
1535  editing /etc/fstab and/or the boot loader files may be required.
1536
1537- Fixed bug in MBR-reading function that caused 0x0f (Win95 LBA) and 0x85
1538  (Linux extended) extended partitions to not be read.
1539
1540- Fixed bug in GetLastSector() (in support.cc) that would have prevented
1541  correct user entry of over-32-bit sector numbers on 32-bit systems.
1542
1543- Made some changes/corrections to the partition type list in
1544  parttypes.cc. Most of these were based on newly-discovered MBR type
1545  codes for Apple (Mac OS X) filesystems.
1546
1547- General code cleanup (setting explicit casts, etc.)
1548
15490.2.0:
1550------
1551
1552- Initial semi-public release
1553