blob: 908c40fdcd69724daaedb36e8fd57141905a6891 [file] [log] [blame]
GPT fdisk (aka gdisk)
by Roderick W. Smith, rodsmith@rodsbooks.com
******************************** IMPORTANT ********************************
Most versions of Windows cannot boot from a GPT disk, and most varieties
prior to Vista cannot read GPT disks. GPT fdisk is a partition editor for
GPT disks, and it will *AUTOMATICALLY CONVERT* MBR disks to GPT form.
Therefore, you should **NOT** use GPT fdisk on a Windows system unless you
fully understand what you're doing! If you accidentally use GPT fdisk on
your boot disk, or perhaps even on a data disk, you may find recovery to be
very difficult!
***************************************************************************
Read the main README file for general information on the program, and read
the gdisk.html document (the Linux man page converted to HTML format) for
detailed use information. My GPT fdisk Web page,
http://www.rodsbooks.com/gdisk/, provides a more tutorial introduction to
the software.
Windows Use Notes
-----------------
The Windows version of GPT fdisk was added with version 0.6.2 of the
package. The Windows binary package includes the gdisk.exe interactive
text-mode program file but no equivalent to the sgdisk program that's
available with Linux, FreeBSD, and OS X builds. In theory, an sgdisk.exe
for Windows could be built if the popt library were installed. I've not
attempted to do this myself, though. If you care to try, check
http://gnuwin32.sourceforge.net/packages/popt.htm for information on popt
for Windows.
To install the program, copy the gdisk.exe program file to any directory on
your path, such as C:\Windows. Alternatively, you can change to the
program's directory or type its complete path whenever you use it.
To use the program, first launch a Command Prompt as the Administrator. To
do this, locate the Command Prompt program icon, right-click it, and select
"Run as Administrator." If you use a non-Administrator Command Prompt, you
won't be able to edit hard disk partition tables, although you will be able
to edit raw disk image files.
The program requires a hard disk identifier as an option. You can specify
this in either of two forms. The first way is as a number followed by a
colon, as in:
gdisk 0:
Disks are numbered starting from 0, so the preceding command launches gdisk
on the first disk. The second way to specify a disk device is via a
harder-to-remember name:
gdisk \\.\physicaldrive0
This command is equivalent to the earlier one -- it edits the partition
table on the first physical disk. Change the number at the end of the
device name to change the disk edited.
If you pass the "-l" option in addition to the disk identifier, the program
displays the current partition table information and then exits. This use
entails no risk to MBR disks, since the program never writes data back to
the disk when used in this way.
As noted above, editing the first disk with GPT fdisk is usually a Bad
Idea. An exception would be if your system uses an Extensible Firmware
Interface (EFI) and already boots from a GPT disk. It's safer to edit
non-boot disks, which usually have numbers of 1 and above, but only if you
run a version of Windows with GPT support. For more information on Windows'
support of GPT, see Microsoft's Web page on the topic:
http://www.microsoft.com/whdc/device/storage/GPT_FAQ.mspx
The GUIDs generated by the program to uniquely identify disks and
partitions aren't "proper" GUIDs; they're purely random numbers. In
practice, this has caused me no problems; however, it's conceivable that
some disk utility will complain. The Unix versions of GPT fdisk generate
proper GUIDs, as of version 0.6.3. Note that this limitation applies ONLY
to the unique GUIDs for disks and partitions, not to the GUIDs used to
identify partition type codes; those are standardized and are handled
correctly by all versions of GPT fdisk.
Source Code and Compilation Issues
----------------------------------
As of version 0.6.2, I haven't been able to get the code to detect the disk
sector size to work under Windows, so the Windows binary always assumes a
512-byte sector size. If you use a disk with another sector size, you'll
have to change this assumption in the source code (in diskio-windows.cc),
use a version for another platform, or use a different partitioning tool
altogether.
I compiled gdisk.exe using MinGW (http://www.mingw.org), and in particular
its Linux-hosted cross-compiler. Under Ubuntu Linux, the Makefile.mingw
file enables compilation of the software via MinGW. (Type "make -f
Makefile.mingw" to compile the software.) If you try to compile using
another compiler or even using MinGW under Windows or another Linux
variety, you may need to adjust the Makefile.mingw options.
I've also attempted to compile the code with OpenWatcom 1.8 and Microsoft
Visual C++ 2008 Express. My OpenWatcom attempts failed, mostly because the
compiler can't yet handle iostream output on standard C++ strings.
OpenWatcom also seems to have incorrectly set the value of UINT32_MAX as if
uint32_t values were 64-bit integers. This alone won't cause the compile to
fail, but it would create bugs.
My attemps with Visual C++ were much more successful; after tracking down
and installing a stdint.h file (I used the one from
http://msinttypes.googlecode.com/svn/trunk/stdint.h) and making a few other
minor changes, the code compiled fine, and seems to run properly, although
I've not tested it extensively. I created native projects for both
OpenWatcom and Visual C++, ignoring the Makefile approach, but I'm not
including the relevant project files in the source tarball, since they're
easy enough to regenerate -- just include all the *.h files and all the
*.cc files except diskio-unix.cc and sgdisk.cc, then build.
If you modify GPT fdisk to get it to compile under another compiler, I
welcome submission of patches.