.\" Copyright 1995 Andries E. Brouwer (aeb@cwi.nl)
.\" May be distributed under the GNU General Public License
.\" The `DOS 6.x Warning' was taken from the old fdisk.8, which says
.\" -- Copyright 1992, 1993 Rickard E. Faith (faith@cs.unc.edu)
.\" -- May be distributed under the GNU General Public License
.\" The `DRDOS Warning' was taken from a net post by Stephen Tweedie.
.\"
.TH SFDISK 8 "1 September 1995" "Linux" "Linux Programmer's Manual"
.SH NAME
sfdisk \- Partition table manipulator for Linux
.SH SYNOPSIS
.B sfdisk
.RI [ options ]
.I device
.br
.B sfdisk \-s
.RI [ partition ]
.SH DESCRIPTION
.B sfdisk
has four (main) uses: list the size of a partition, list the partitions
on a device, check the partitions on a device, and - very dangerous -
repartition a device.

.B sfdisk
doesn't understand GUID Partition Table (GPT) and
it is not designed for large partitions. In particular case use more advanced GNU
.BR parted (8).

.SS "List Sizes"
.BI "sfdisk \-s " partition
gives the size of
.I partition
in blocks. This may be useful in connection with programs like
.BR mkswap (8)
or so. Here
.I partition
is usually something like
.I /dev/hda1
or
.IR /dev/sdb12 ,
but may also be an entire disk, like
.IR /dev/xda .
.br
.RS
.nf
.if t .ft CW
% sfdisk \-s /dev/hda9
81599
%
.if t .ft R
.fi
.RE
If the partition argument is omitted,
.B sfdisk
will list the sizes of all disks, and the total:
.br
.RS
.nf
.if t .ft CW
% sfdisk \-s
/dev/hda: 208896
/dev/hdb: 1025136
/dev/hdc: 1031063
/dev/sda: 8877895
/dev/sdb: 1758927
total: 12901917 blocks
%
.if t .ft R
.fi
.RE

.SS "List Partitions"
The second type of invocation:
.B sfdisk \-l
.RB [ options ]
.I device
will list the partitions on this device.
If the device argument is omitted, the partitions on all hard disks
are listed.
.br
.nf
.if t .ft CW
% sfdisk \-l /dev/hdc

Disk /dev/hdc: 16 heads, 63 sectors, 2045 cylinders
Units = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls   #blocks   Id  System
/dev/hdc1          0+    406     407\-   205096+  83  Linux native
/dev/hdc2        407     813     407    205128   83  Linux native
/dev/hdc3        814    2044    1231    620424   83  Linux native
/dev/hdc4          0       \-       0         0    0  Empty
%
.if t .ft R
.fi
The trailing \- and + signs indicate that rounding has taken place,
and that the actual value is slightly less (more).
To see the exact values, ask for a listing with sectors as unit.

.SS "Check partitions"
The third type of invocation:
.BI "sfdisk \-V " device
will apply various consistency checks to the partition tables on
.IR device .
It prints `OK' or complains. The \-V option can be used together
with \-l. In a shell script one might use
.BI "sfdisk \-V \-q " device
which only returns a status.

.SS "Create partitions"
The fourth type of invocation:
.BI "sfdisk " device
will cause
.B sfdisk
to read the specification for the desired partitioning of
.I device
from its standard input, and then to change the partition tables
on that disk. Thus, it is possible to use
.B sfdisk
from a shell script. When
.B sfdisk
determines that its standard input is a terminal, it will be
conversational; otherwise it will abort on any error.
.LP
BE EXTREMELY CAREFUL - ONE TYPING MISTAKE AND ALL YOUR DATA IS LOST
.LP
As a precaution, one can save the sectors changed by
.BR sfdisk :
.RS
.nf
.if t .ft CW
% sfdisk /dev/hdd \-O hdd-partition-sectors.save
\&...
%
.if t .ft R
.fi
.RE
.LP
Then, if you discover that you did something stupid before anything
else has been written to disk, it may be possible to recover
the old situation with
.RS
.nf
.if t .ft CW
% sfdisk /dev/hdd \-I hdd-partition-sectors.save
%
.if t .ft R
.fi
.RE
.LP
(This is not the same as saving the old partition table:
a readable version of the old partition table can be saved
using the \-d option. However, if you create logical partitions,
the sectors describing them are located somewhere on disk,
possibly on sectors that were not part of the partition table
before. Thus, the information the \-O option saves is not a binary
version of the output of \-d.)

There are many options.

.SH OPTIONS
.TP
.BR \-v " or " \-\-version
Print version number of
.B sfdisk
and exit immediately.
.TP
.BR \-? " or " \-\-help
Print a usage message and exit immediately.
.TP
.BR \-T " or " \-\-list\-types
Print the recognized types (system Id's).
.TP
.BR \-s " or " \-\-show\-size
List the size of a partition.
.TP
.BR \-g " or " \-\-show\-geometry
List the kernel's idea of the geometry of the indicated disk(s).
.TP
.BR \-G " or " \-\-show\-pt\-geometry
List the geometry of the indicated disks guessed by looking at
the partition table.
.TP
.BR \-l " or " \-\-list
List the partitions of a device.
.TP
.BR \-d
Dump the partitions of a device in a format useful as input
to sfdisk. For example,
.br
.nf
.if t .ft CW
    % sfdisk -d /dev/hda > hda.out
    % sfdisk /dev/hda < hda.out
.if t .ft R
.fi
will correct the bad last extended partition that the OS/2
fdisk creates.
.TP
.BR \-V " or " \-\-verify
Test whether partitions seem correct. (See above.)
.TP
.BR \-i " or " \-\-increment
Number cylinders etc. starting from 1 instead of 0.
.TP
.BI \-N " number"
Change only the single partition indicated. For example:
.br
.nf
.if t .ft CW
    % sfdisk /dev/hdb \-N5
    ,,,*
    %
.if t .ft R
.fi
will make the fifth partition on /dev/hdb bootable (`active')
and change nothing else. (Probably this fifth partition
is called /dev/hdb5, but you are free to call it something else,
like `/my_equipment/disks/2/5' or so).
.TP
.BI \-A " number"
Make the indicated partition(s) active, and all others inactive.
.TP
.BI \-c "\fR or " \-\-id " number [Id]"
If no Id argument given: print the partition Id of the indicated
partition. If an Id argument is present: change the type (Id) of
the indicated partition to the given value.
This option has the two very long forms \-\-print\-id and \-\-change\-id.
For example:
.br
.nf
.if t .ft CW
    % sfdisk --print-id /dev/hdb 5
    6
    % sfdisk --change-id /dev/hdb 5 83
    OK
.if t .ft R
.fi
first reports that /dev/hdb5 has Id 6, and then changes that into 83.
.TP
.BR \-uS " or " \-uB " or " \-uC " or " \-uM
Accept or report in units of sectors (blocks, cylinders, megabytes,
respectively). The default is cylinders, at least when the geometry
is known.
.TP
.BR \-x " or " \-\-show\-extended
Also list non-primary extended partitions on output,
and expect descriptors for them on input.
.TP
.BI \-C " cylinders"
Specify the number of cylinders, possibly overriding what the kernel thinks.
.TP
.BI \-H " heads"
Specify the number of heads, possibly overriding what the kernel thinks.
.TP
.BI \-S " sectors"
Specify the number of sectors, possibly overriding what the kernel thinks.
.TP
.BR \-f " or " \-\-force
Do what I say, even if it is stupid.
.TP
.BR \-q " or " \-\-quiet
Suppress warning messages.
.TP
.BR \-L " or " \-\-Linux
Do not complain about things irrelevant for Linux.
.TP
.BR \-D " or " \-\-DOS
For DOS-compatibility: waste a little space.
(More precisely: if a partition cannot contain sector 0,
e.g. because that is the MBR of the device, or contains
the partition table of an extended partition, then
.B sfdisk
would make it start the next sector. However, when this
option is given it skips to the start of the next track,
wasting for example 33 sectors (in case of 34 sectors/track),
just like certain versions of DOS do.)
Certain Disk Managers and boot loaders (such as OSBS, but not
LILO or the OS/2 Boot Manager) also live in this empty space,
so maybe you want this option if you use one.
.TP
.BR \-E " or " \-\-DOS\-extended
Take the starting sector numbers of "inner" extended partitions
to be relative to the starting cylinder boundary of the outer one,
(like some versions of DOS do) rather than to the starting sector
(like Linux does).
(The fact that there is a difference here means that one should
always let extended partitions start at cylinder boundaries if
DOS and Linux should interpret the partition table in the same way.
Of course one can only know where cylinder boundaries are when
one knows what geometry DOS will use for this disk.)
.TP
.BR \-\-IBM " or " \-\-leave\-last
Certain IBM diagnostic programs assume that they can use the
last cylinder on a disk for disk-testing purposes. If you think
you might ever run such programs, use this option to tell
.B sfdisk
that it should not allocate the last cylinder.
Sometimes the last cylinder contains a bad sector table.
.TP
.B \-n
Go through all the motions, but do not actually write to disk.
.TP
.B \-R
Only execute the BLKRRPART ioctl (to make the kernel re-read
the partition table). This can be useful for checking in advance
that the final BLKRRPART will be successful, and also when you
changed the partition table `by hand' (e.g., using dd from a backup).
If the kernel complains (`device busy for revalidation (usage = 2)')
then something still uses the device, and you still have to unmount
some file system, or say swapoff to some swap partition.
.TP
.B \-\-no\-reread
When starting a repartitioning of a disk, sfdisk checks that this disk
is not mounted, or in use as a swap device, and refuses to continue
if it is. This option suppresses the test. (On the other hand, the \-f
option would force sfdisk to continue even when this test fails.)
.TP
.BI \-O " file"
Just before writing the new partition, output the sectors
that are going to be overwritten to
.I file
(where hopefully
.I file
resides on another disk, or on a floppy).
.TP
.BI \-I " file"
After destroying your filesystems with an unfortunate
.B sfdisk
command, you would have been able to restore the old situation
if only you had preserved it using the \-O flag.

.SH THEORY
Block 0 of a disk (the Master Boot Record) contains among
other things four partition descriptors. The partitions
described here are called
.I primary
partitions.
.LP
A partition descriptor has 6 fields:
.br
.nf
.RS
struct partition {
    unsigned char bootable;		/* 0 or 0x80 */
    hsc begin_hsc;
    unsigned char id;
    hsc end_hsc;
    unsigned int starting_sector;
    unsigned int nr_of_sectors;
}
.RE
.fi
.LP
The two hsc fields indicate head, sector and cylinder of the
begin and the end of the partition. Since each hsc field only
takes 3 bytes, only 24 bits are available, which does not
suffice for big disks (say > 8GB). In fact, due to the wasteful
representation (that uses a byte for the number of heads, which
is typically 16), problems already start with 0.5GB.
However Linux does not use these fields, and problems can arise
only at boot time, before Linux has been started. For more
details, see the
.B lilo
documentation.
.LP
Each partition has a type, its `Id', and if this type is 5 or f
.IR "" "(`" "extended partition" "')"
the starting sector of the partition
again contains 4 partition descriptors. MSDOS only uses the
first two of these: the first one an actual data partition,
and the second one again an extended partition (or empty).
In this way one gets a chain of extended partitions.
Other operating systems have slightly different conventions.
Linux also accepts type 85 as equivalent to 5 and f - this can be
useful if one wants to have extended partitions under Linux past
the 1024 cylinder boundary, without DOS FDISK hanging.
(If there is no good reason, you should just use 5, which is
understood by other systems.)
.LP
Partitions that are not primary or extended are called
.IR logical .
Often, one cannot boot from logical partitions (because the
process of finding them is more involved than just looking
at the MBR).
Note that of an extended partition only the Id and the start
are used. There are various conventions about what to write
in the other fields. One should not try to use extended partitions
for data storage or swap.

.SH "INPUT FORMAT"
.B sfdisk
reads lines of the form
.br
.RS
<start> <size> <id> <bootable> <c,h,s> <c,h,s>
.RE
where each line fills one partition descriptor.
.LP
Fields are separated by whitespace, or comma or semicolon possibly
followed by whitespace; initial and trailing whitespace is ignored.
Numbers can be octal, decimal or hexadecimal, decimal is default.
When a field is absent or empty, a default value is used.
.LP
The <c,h,s> parts can (and probably should) be omitted -
.B sfdisk
computes them from <start> and <size> and the disk geometry
as given by the kernel or specified using the \-H, \-S, \-C flags.
.LP
Bootable is specified as [*|\-], with as default not-bootable.
(The value of this field is irrelevant for Linux - when Linux
runs it has been booted already - but might play a role for
certain boot loaders and for other operating systems.
For example, when there are several primary DOS partitions,
DOS assigns C: to the first among these that is bootable.)
.LP
Id is given in hex, without the 0x prefix, or is [E|S|L|X], where
L (LINUX_NATIVE (83)) is the default, S is LINUX_SWAP (82), E
is EXTENDED_PARTITION (5), and X is LINUX_EXTENDED (85).
.LP
The default value of start is the first nonassigned sector/cylinder/...
.LP
The default value of size is as much as possible (until next
partition or end-of-disk).
.LP
However, for the four partitions inside an extended partition,
the defaults are: Linux partition, Extended partition, Empty, Empty.
.LP
But when the \-N option (change a single partition only) is given,
the default for each field is its previous value.

.SH EXAMPLE
The command
.RS
.nf
.if t .ft CW
sfdisk /dev/hdc << EOF
0,407
,407
;
;
EOF
.if t .ft R
.fi
.RE
will partition /dev/hdc just as indicated above.

The command
.RS
.nf
.if t .ft CW
sfdisk /dev/hdb << EOF
,3,L
,60,L
,19,S
,,E
,130,L
,130,L
,130,L
,,L
EOF
.if t .ft R
.fi
.RE
will partition /dev/hdb into two Linux partitions of 3 and 60
cylinders, a swap space of 19 cylinders, and an extended partition
covering the rest. Inside the extended partition there are four
Linux logical partitions, three of 130 cylinders and one
covering the rest.

With the \-x option, the number of input lines must be a multiple of 4:
you have to list the two empty partitions that you never want
using two blank lines. Without the \-x option, you give one line
for the partitions inside a extended partition, instead of four,
and terminate with end-of-file (^D).
(And
.B sfdisk
will assume that your input line represents the first of four,
that the second one is extended, and the 3rd and 4th are empty.)

.SH "DOS 6.x WARNING"

The DOS 6.x FORMAT command looks for some information in the first
sector of the data area of the partition, and treats this information
as more reliable than the information in the partition table.  DOS
FORMAT expects DOS FDISK to clear the first 512 bytes of the data area
of a partition whenever a size change occurs.  DOS FORMAT will look at
this extra information even if the /U flag is given -- we consider
this a bug in DOS FORMAT and DOS FDISK.
.LP
The bottom line is that if you use sfdisk to change the size of a
DOS partition table entry, then you must also use
.B dd
to zero the first 512 bytes of that partition before using DOS FORMAT to
format the partition.  For example, if you were using sfdisk to make a DOS
partition table entry for /dev/hda1, then (after exiting sfdisk and
rebooting Linux so that the partition table information is valid) you
would use the command "dd if=/dev/zero of=/dev/hda1 bs=512 count=1" to zero
the first 512 bytes of the partition.
.B BE EXTREMELY CAREFUL
if you use the
.B dd
command, since a small typo can make all of the data on your disk useless.

For best results, you should always use an OS-specific partition table
program.  For example, you should make DOS partitions with the DOS FDISK
program and Linux partitions with the Linux sfdisk program.

.SH "DRDOS WARNINGS"

Stephen Tweedie reported (930515): `Most reports of superblock
corruption turn out to be due to bad partitioning, with one filesystem
overrunning the start of the next and corrupting its superblock.
I have even had this problem with the supposedly-reliable DRDOS.  This
was quite possibly due to DRDOS-6.0's FDISK command.  Unless I created
a blank track or cylinder between the DRDOS partition and the
immediately following one, DRDOS would happily stamp all over the
start of the next partition.  Mind you, as long as I keep a little
free disk space after any DRDOS partition, I don't have any other
problems with the two coexisting on the one drive.'

A. V. Le Blanc writes in README.efdisk: `Dr. DOS 5.0 and 6.0 has been
reported to have problems cooperating with Linux, and with this version
of efdisk in particular.  This efdisk sets the system type
to hexadecimal 81.  Dr. DOS seems to confuse
this with hexadecimal 1, a DOS code.  If you use Dr. DOS, use the
efdisk command 't' to change the system code of any Linux partitions
to some number less than hexadecimal 80; I suggest 41 and 42 for
the moment.'

A. V. Le Blanc writes in his README.fdisk: `DR-DOS 5.0 and 6.0
are reported to have difficulties with partition ID codes of 80 or more.
The Linux `fdisk' used to set the system type
of new partitions to hexadecimal 81.  DR-DOS seems to confuse this with
hexadecimal 1, a DOS code.  The values 82 for swap and 83 for file
systems should not cause problems with DR-DOS.  If they do, you may use
the `fdisk' command `t' to change the system code of any Linux
partitions to some number less than hexadecimal 80; I suggest 42 and 43
for the moment.'

In fact, it seems that only 4 bits are significant for the DRDOS FDISK,
so that for example 11 and 21 are listed as DOS 2.0. However, DRDOS
itself seems to use the full byte. I have not been able to reproduce
any corruption with DRDOS or its fdisk.

.SH BUGS
There are too many options.
.LP
There is no support for non-DOS partition types.

.\" .SH AUTHOR
.\" A. E. Brouwer (aeb@cwi.nl)
.\"
.SH "SEE ALSO"
.BR cfdisk (8),
.BR fdisk (8),
.BR mkfs (8),
.BR parted (8),
.BR partprobe (8),
.BR kpartx (8)
.SH AVAILABILITY
The sfdisk command is part of the util-linux-ng package and is available from
ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/.
