Back to main site | Back to man page index

SFDISK(8)                                       System Administration                                       SFDISK(8)



NAME
       sfdisk - partition table manipulator for Linux

SYNOPSIS
       sfdisk [options] device
       sfdisk -s [partition]

DESCRIPTION
       sfdisk  has  four (main) uses: list the size of a partition, list the partitions on a device, check the parti‐
       tions on a device, and - very dangerous - repartition a device.

       sfdisk doesn't understand the GUID Partition Table (GPT) format and it is not designed for  large  partitions.
       In these cases use the more advanced GNU parted(8).

       Note  that  sfdisk  does  not  align  partitions to block device I/O limits. This functionality is provided by
       fdisk(8).


   List sizes
       sfdisk -s partition gives the size of partition in blocks.  This may be useful  in  connection  with  programs
       like  mkswap(8).   Here partition is usually something like /dev/hda1 or /dev/sdb12, but may also be an entire
       disk, like /dev/xda.

              % sfdisk -s /dev/hda9
              81599

       If the partition argument is omitted, sfdisk will list the sizes of all block devices, and the total:

              % sfdisk -s
              /dev/hda: 208896
              /dev/hdb: 1025136
              /dev/hdc: 1031063
              /dev/sda: 8877895
              /dev/sdb: 1758927
              total: 12901917 blocks


   List partitions
       The second type of invocation: sfdisk -l device will list the partitions on  the  specified  device.   If  the
       device argument is omitted, the partitions on all block devices are listed.

              % 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

       The  trailing - and + signs indicate that rounding has taken place, and that the actual value is slightly less
       or more.  To see the exact values, ask for a listing with sectors as unit (-u S).


       BE EXTREMELY CAREFUL - ONE TYPING MISTAKE AND ALL YOUR DATA IS LOST

       As a precaution, one can save the sectors changed by sfdisk:

              % sfdisk /dev/hdd -O hdd-partition-sectors.save
              ...


       Then, if you discover that you did something stupid before anything else has been written to the block device,
       it may be possible to recover the old situation with:

              % sfdisk /dev/hdd -I hdd-partition-sectors.save


       (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 block device, 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.


OPTIONS
       -v, --version
              Print version number of sfdisk and exit immediately.

       -h, --help
              Print a usage message and exit immediately.

       -T, --list-types
              Print the recognized types (system Id's).

       -s, --show-size
              List the size of a partition.

       -g, --show-geometry
              List the kernel's idea of the geometry of the indicated block device(s).

       -G, --show-pt-geometry
              List the geometry of the indicated block devices guessed by looking at the partition table.

       -l, --list
              List the partitions of a device.

       -d, --dump
              Dump the partitions of a device in a format that is usable as input to sfdisk.  For example,
                  % sfdisk -d /dev/hda > hda.out
                  % sfdisk /dev/hda < hda.out
              will correct the bad last extended partition that the OS/2 fdisk creates.

       -V, --verify
              Test whether partitions seem correct.  (See the third invocation type above.)

       -i, --increment

       -c, --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  two
              longer forms, --print-id and --change-id.  For example:
                  % sfdisk --print-id /dev/hdb 5
                  6
                  % sfdisk --change-id /dev/hdb 5 83
                  OK
              first reports that /dev/hdb5 has Id 6, and then changes that into 83.

       -u, --unit letter
              Interpret the input and show the output in the units specified by letter.  This letter can be one of S,
              C, B or M, meaning Sectors, Cylinders, Blocks and Megabytes, respectively.  The default  is  cylinders,
              at least when the geometry is known.

       -x, --show-extended
              Also list non-primary extended partitions on output, and expect descriptors for them on input.

       -C, --cylinders cylinders
              Specify the number of cylinders, possibly overriding what the kernel thinks.

       -H, --heads heads
              Specify the number of heads, possibly overriding what the kernel thinks.

       -S, --sectors sectors
              Specify the number of sectors, possibly overriding what the kernel thinks.

       -f, --force
              Do what I say, even if it is stupid.

       -q, --quiet
              Suppress warning messages.

       -L, --Linux
              Do not complain about things irrelevant for Linux.

       -D, --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  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  cer‐
              tain  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.

       -E, --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 relative to the actual 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  geome‐
              try DOS will use for this block device.)

       --IBM, --leave-last

       --no-reread
              When  starting a repartitioning of a block device, sfdisk checks that this device 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.)

       --in-order
              Caution, see warning section.  To be documented.

       --not-in-order
              Caution, see warning section.  To be documented.

       --inside-outer
              Caution, see warning section.  Chaining order.

       --not-inside-outer
              Caution, see warning section.  Chaining order.

       --nested
              Caution,  see  warning section.  Every partition is contained in the surrounding partitions and is dis‐
              joint from all others.

       --chained
              Caution, see warning section.  Every data partition is contained in the surrounding partitions and dis‐
              joint  from  all  others,  but  extended  partitions  may  lie outside (insofar as allowed by all_logi‐
              cals_inside_outermost_extended).

       --onesector
              Caution, see warning section.  All data partitions are mutually disjoint; extended partitions each  use
              one sector only (except perhaps for the outermost one).

       -O file
              Just  before  writing  the  new  partition, output the sectors that are going to be overwritten to file
              (where hopefully file resides on another block device, or on a floppy).

       -I file
              After destroying your filesystems with an unfortunate sfdisk command,  you  would  have  been  able  to
              restore the old situation if only you had preserved it using the -O flag.


THEORY
       Block 0 of a block device (the Master Boot Record) contains among other things four partition descriptors. The
       partitions described here are called primary partitions.

       A partition descriptor has 6 fields:
              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;
              }


       just use 5, which is understood by other systems.)

       Partitions that are not primary or extended are called logical.  Often, one cannot boot  from  logical  parti‐
       tions  (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.


INPUT FORMAT
       sfdisk reads lines of the form
              <start> <size> <id> <bootable> <c,h,s> <c,h,s>
       where each line fills one partition descriptor.

       Fields  are separated by whitespace, or comma or semicolon possibly followed by whitespace; initial and trail‐
       ing 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.

       The  <c,h,s> parts can (and probably should) be omitted - sfdisk computes them from <start> and <size> and the
       block device geometry as given by the kernel or specified using the -H, -S, -C flags.

       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.)

       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).

       The default value of start is the first nonassigned sector/cylinder/...

       The default value of size is as much as possible (until next partition or end-of-device).

       However, for the four partitions inside an extended partition, the defaults  are:  Linux  partition,  Extended
       partition, Empty, Empty.

       But  when  the -N option (change a single partition only) is given, the default for each field is its previous
       value.

       A '+' can be specified instead of a number for size, which means as much as possible. This is useful with  the
       -N option.

EXAMPLE
       The command
              sfdisk /dev/hdc << EOF
              0,407
              ,407
              ;
              ;
              EOF
       will partition /dev/hdc just as indicated above.

       The command
              sfdisk /dev/hdb << EOF
              ,3,L

       With  the  -x option, the number of input lines must be a multiple of 4: you have to list the two empty parti‐
       tions 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 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.)

CAUTION WARNINGS
       The  options  marked with caution in the manual page are dangerous.  For example not all functionality is com‐
       pletely implemented, which can be a reason for unexpected results.

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 FOR‐
       MAT and DOS FDISK.

       The bottom line is that if you use sfdisk to change the size of a DOS partition table  entry,  then  you  must
       also  use  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.  BE EXTREMELY  CAREFUL
       if you use the dd command, since a small typo can make all of the data on your block device 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.


DRDOS WARNINGS
       Stephen Tweedie reported (930515): `Most reports of superblock corruption turn out to be due to bad partition‐
       ing,  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
       device  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  parti‐
       tion  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 sys‐
       tems  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.

       nel.org/pub/linux/utils/util-linux/.



util-linux                                           August 2011                                            SFDISK(8)