.\" Copyright 2011-2013 Roderick W. Smith (rodsmith@rodsbooks.com)
.\" May be distributed under the GNU General Public License
.TH "FIXPARTS" "8" "0.8.10" "Roderick W. Smith" "FixParts Manual"
.SH "NAME"
fixparts \- MBR partition table repair utility
.SH "SYNOPSIS"
.BI "fixparts "
.I device

.SH "DESCRIPTION"

FixParts (aka \fBfixparts\fR) 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:

.TP 
.B *
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.

.TP
.B *
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 problem.

.TP
.B *
You can change primary partitions into logical partitions or vice\-versa,
within constraints imposed by the MBR data structures.

.PP

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 \fBfdisk\fR, because \fBfixparts\fR' design means
that it's likely to alter partition numbering even when such changes are
not requested.

The \fBfixparts\fR program employs a user interface similar to that of
Linux's \fBfdisk\fR, but \fBfixparts\fR is much more specialized. Most
importantly, you can't create new partitions with \fBfixparts\fR, although
you can change primary/logical assignment.

In the MBR scheme, partitions come in three varieties:

.TP
.B primary
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.

.TP
.B extended
Extended partitions are specialized primary partitions. They serve as
holding areas for logical partitions.

.TP
.B logical
A disk can contain an arbitrary number of logical partitions
(\fBfixparts\fR, 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).

.PP

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, \fBfixparts\fR' 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 \fBfixparts\fR' 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 \fBfixparts\fR, 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 \fBfdisk\fR will give them conventional numbers.

When it first starts, \fBfixparts\fR performs a scan for GPT data. If the
disk looks like a conventional GPT disk, \fBfixparts\fR 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, \fBfixparts\fR
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, \fBfixparts\fR keeps all changes in memory until the user writes
changes with the \fBw\fR command. Thus, you can adjust your partitions in
the user interface and abort those changes by typing \fBq\fR to quit
without saving changes.

.SH "OPTIONS"

The \fBfixparts\fR utility supports no command\-line options, except for
specification of the target device.

Most interactions with \fBfixparts\fR occur with its interactive text\-mode
menu. Specific functions are:

.TP 
.B a
Toggle the active/boot flag. This flag is required by some boot loaders and
OSes.


.TP 
.B c
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 \fBfixparts\fR' CHS values are
likely to be incorrect on disks smaller than about 8 GiB except on Linux.

.TP 
.B l
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.

.TP 
.B o
Omit a partition. Once omitted, the partition will still appear in the
\fBfixparts\fR partition list, but it will be flagged as omitted. You can
subsequently convert it to primary or logical form with the \fBr\fR or
\fBl\fR commands, respectively. When you save your changes with \fBw\fR,
though, the partition will be lost.

.TP 
.B p
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 code.

.TP 
.B q
Quit from the program \fIwithout saving your changes\fR.
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.

.TP 
.B r
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 \fBfixparts\fR refuses to allow changing a partition to primary, you may
need to convert other partitions to logical form or omit them entirely.

.TP 
.B s
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 \fBfixparts\fR may not be the same as those used by the kernel
or displayed by other partitioning tools.

.TP 
.B t
Change a partition's type code. You enter the type code using a one\-byte
hexadecimal number.

.TP 
.B w
Write data. Use this command to save your changes and exit from the program.

.TP 
.B ?
Print the menu. Type this command (or any other unrecognized command) to
see a summary of available options.

.PP 

.SH "BUGS"
As of March 2014 (version 0.8.10), \fBfixparts\fR
should be considered beta software. Known bugs and limitations include:

.TP 
.B *
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 tested.

.TP 
.B *
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
\fBgpt\fR, \fBfdisk\fR, and \fBdd\fR.) This limitation can be overcome
by typing \fBsysctl kern.geom.debugflags=16\fR at a shell prompt.

.TP 
.B *
The program can load only up to 128 partitions (4 primary partitions and
124 logical partitions). This limit can be raised by changing the
\fI#define MAX_MBR_PARTS\fR line in the \fIbasicmbr.h\fR source code file
and recompiling.

.TP 
.B *
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.

.TP 
.B *
The program makes no effort to preserve partition numbers. This can have
consequences for boot loaders and for mounting filesystems via
\fB/etc/fstab\fR. It may be necessary to edit configuration files or even
to re-install your boot loader.

.TP
.B *

The program may change the order of partitions in the partition table.

.PP 

.SH "AUTHORS"
Primary author: Roderick W. Smith (rodsmith@rodsbooks.com)

Contributors:

* Yves Blusseau (1otnwmz02@sneakemail.com)

* David Hubbard (david.c.hubbard@gmail.com)

* Justin Maggard (justin.maggard@netgear.com)

* Dwight Schauer (dschauer@ti.com)

* Florian Zumbiehl (florz@florz.de)


.SH "SEE ALSO"
\fBcfdisk (8)\fR,
\fBcgdisk (8)\fR,
\fBfdisk (8)\fR,
\fBmkfs (8)\fR,
\fBparted (8)\fR,
\fBsfdisk (8)\fR
\fBgdisk (8)\fR
\fBsgdisk (8)\fR

\fIhttp://en.wikipedia.org/wiki/Master_boot_record\fR

\fIhttp://www.rodsbooks.com/fixparts/\fR

.SH "AVAILABILITY"
The \fBfixparts\fR command is part of the \fIGPT fdisk\fR package and is
available from Rod Smith.
