fixparts - MBR partition table repair utility
FixParts (aka fixparts
) is a text-mode menu-driven program for repairing
certain types of problems with Master Boot Record (MBR) partition tables. The
program has three design goals, although a few additional features are
supported, as well:
- It can remove stray GUID Partition Table (GPT) data, which
can be left behind on a disk that was once used as a GPT disk but then
incompletely converted to the more common (as of 2011) MBR form.
- It can repair mis-sized extended partitions -- either
partitions that extend beyond the physical end of the disk or that overlap
with nearby primary partitions. FixParts is designed in such a way that
this type of repair occurs automatically, so if it's the only problem with
your disk, you can launch the program and then immediately save the
partition table, making no manual changes, and the program will fix the
- You can change primary partitions into logical partitions
or vice-versa, within constraints imposed by the MBR data structures.
Additional features include the ability to change partition type codes or
boot/active flags, to delete partitions, and to recompute CHS values. With the
possible exception of recomputing CHS values, these secondary features are
better performed with fdisk
, because fixparts
' design means that
it's likely to alter partition numbering even when such changes are not
program employs a user interface similar to that of Linux's
, but fixparts
is much more specialized. Most importantly,
you can't create new partitions with fixparts
, although you can change
In the MBR scheme, partitions come in three varieties:
- These partitions are defined in the first sector of the
hard disk and are limited in number to four. Some OSes, such as Windows
and FreeBSD, must boot from a primary partition.
- Extended partitions are specialized primary partitions.
They serve as holding areas for logical partitions.
- A disk can contain an arbitrary number of logical
partitions ( fixparts, however, imposes a limit of 124 logical
partitions). All the logical partitions reside inside a single extended
partition, and are defined using a linked-list data structure. This fact
means that every logical partition must be preceded by at least one sector
of unallocated space to hold its defining data structure (an Extended Boot
Record, or EBR).
These distinctions mean that primary and logical partitions cannot be
arbitrarily interspersed. A disk can contain one to three primary partitions,
a block of one or more logical partitions, and one to three more primary
partitions (for a total of three primary partitions, not counting the extended
partition). Primary partitions may not be sandwiched between logical
partitions, since this would mean placing a primary partition within an
extended partition (which is just a specific type of primary partition).
Unlike most disk utilities, fixparts
' user interface ignores extended
partitions. Internally, the program discards the information on the original
extended partition and, when you tell it to save its changes, it generates a
new extended partition to contain the then-defined logical partitions. This is
done because most of the repairs and manipulations the tool performs require
generating a fresh extended partition, so keeping the original in the user
interface would only be a complication.
Another unusual feature of fixparts
' user interface is that partition
numbers do not necessarily correlate with primary/logical status. In most
utilities, partitions 1-4 correspond to primary partitions, whereas partitions
5 and up are logical partitions. In fixparts
, any partition number may
be assigned primary or logical status, so long as the rules for layout
described earlier are obeyed. When the partition table is saved, partitions
will be assigned appropriately and then tools such as the Linux kernel and
will give them conventional numbers.
When it first starts, fixparts
performs a scan for GPT data. If the disk
looks like a conventional GPT disk, fixparts
refuses to run. If the
disk appears to be a conventional MBR disk but GPT signatures are present in
the GPT primary or secondary header areas, fixparts
offers to delete
this extraneous data. If you tell it to do so, the program immediately wipes
the GPT header or headers. (If only one header was found, only that one header
will be erased, to minimize the risk of damaging a boot loader or other data
that might have overwritten just one of the GPT headers.)
With the exception of optionally erasing leftover GPT data when it first starts,
keeps all changes in memory until the user writes changes with
command. Thus, you can adjust your partitions in the user
interface and abort those changes by typing q
to quit without saving
utility supports no command-line options, except for
specification of the target device.
Most interactions with fixparts
occur with its interactive text-mode
menu. Specific functions are:
- Toggle the active/boot flag. This flag is required by some
boot loaders and OSes.
- Recompute the cylinder/head/sector (CHS) values for all
partitions. CHS addressing mode is largely obsolete, but some OSes and
utilities complain if they don't like the CHS values. Note that
fixparts' CHS values are likely to be incorrect on disks smaller
than about 8 GiB except on Linux.
- Change a partition's status to logical. This option will
only work if the current partition layout supports such a change. Note
that if changing a partition's status in this way is not currently
possible, making some other change may make it possible. For instance,
omitting a partition that precedes the target partition may enable
converting a partition to logical form if there had been no free sectors
between the two partitions.
- Omit a partition. Once omitted, the partition will still
appear in the fixparts partition list, but it will be flagged as
omitted. You can subsequently convert it to primary or logical form with
the r or l commands, respectively. When you save your
changes with w, though, the partition will be lost.
- Display basic partition summary data. This includes
partition's number, the boot/active flag's status, starting and ending
sector numbers, primary/logical/omitted status, whether or not the
partition may be converted to logical form, and the partition's MBR types
- Quit from the program without saving your changes.
Use this option if you just wanted to view information or if you make a
mistake and want to back out of all your changes.
- Change a partition's status to primary. This option will
only work if the current partition layout supports such a change. Note
that every partition can theoretically become a primary partition,
although in some configurations, making this change will require omitting
some partitions. If fixparts refuses to allow changing a partition
to primary, you may need to convert other partitions to logical form or
omit them entirely.
- Sort partition entries. This option orders partitions in
the display to match their on-disk positions, which can make understanding
the disk layout easier in some cases. This option has no effect on the
ultimate ordering of logical partitions, which are sorted before being
saved. The order of primary partitions in the final saved partition table
may be affected by this option. In both cases, as already noted, the
partition numbers displayed by fixparts may not be the same as
those used by the kernel or displayed by other partitioning tools.
- Change a partition's type code. You enter the type code
using a one-byte hexadecimal number.
- Write data. Use this command to save your changes and exit
from the program.
- Print the menu. Type this command (or any other
unrecognized command) to see a summary of available options.
Known bugs and limitations include:
- The program compiles correctly only on Linux, FreeBSD, Mac
OS X, and Windows. Linux versions for x86-64 (64-bit), x86 (32-bit), and
PowerPC (32-bit) have been tested, with the x86-64 version having seen the
most testing. Under FreeBSD, 32-bit (x86) and 64-bit (x86-64) versions
have been tested. Only 32-bit versions for Mac OS X and Windows have been
- The FreeBSD version of the program can't write changes to
the partition table to a disk when existing partitions on that disk are
mounted. (The same problem exists with many other FreeBSD utilities, such
as gpt, fdisk, and dd.) This limitation can be
overcome by typing sysctl kern.geom.debugflags=16 at a shell
- The program can load only up to 128 partitions (4 primary
partitions and 124 logical partitions). This limit can be raised by
changing the #define MAX_MBR_PARTS line in the basicmbr.h
source code file and recompiling.
- The program can read partitions only if the disk has
correct LBA partition descriptors. These descriptors should be present on
any disk over 8 GiB in size or on smaller disks partitioned with any but
very ancient software.
- The program makes no effort to preserve partition numbers.
This can have consequences for boot loaders and for mounting filesystems
via /etc/fstab. It may be necessary to edit configuration files or
even to re-install your boot loader.
The program may change the order of partitions in the partition table.
Primary author: Roderick W. Smith (email@example.com)
* Yves Blusseau (firstname.lastname@example.org)
* David Hubbard (email@example.com)
* Justin Maggard (firstname.lastname@example.org)
* Dwight Schauer (email@example.com)
* Florian Zumbiehl (firstname.lastname@example.org)
, cgdisk (8)
, fdisk (8)
, mkfs (8)
, sfdisk (8) gdisk (8) sgdisk (8)
command is part of the GPT fdisk
package and is
available from Rod Smith.