


SFDISK(8)	    Linux Programmer's Manual		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 partitions on a
       device, and - very dangerous - repartition a device.


   List Sizes
       sfdisk -s partition gives the size of partition in blocks.
       This may be useful in connection with programs like mkswap
       or  so. 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 disks, 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 [options]  device
       will  list  the	partitions on this device.  If the device
       argument is omitted, the partitions on all hard disks  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
       (more).	 To  see the exact values, ask for a listing with
       sectors as unit.



Linux 1.3.23		 1 September 1995			1





SFDISK(8)	    Linux Programmer's Manual		SFDISK(8)


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


   Create partitions
       The fourth type of invocation: sfdisk  device  will  cause
       sfdisk  to  read	 the specification for the desired parti-
       tioning of device from its standard  input,  and	 then  to
       change the partition tables on that disk. Thus, it is pos-
       sible to use sfdisk  from  a  shell  script.  When  sfdisk
       determines  that its standard input is a terminal, it will
       be conversational; otherwise it will abort on any error.

       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 disk, 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 parti-
       tions,  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.


OPTIONS
       -v or --version
	      Print  version  number  of  sfdisk and exit immedi-
	      ately.

       -? or --help
	      Print a usage message and exit immediately.

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




Linux 1.3.23		 1 September 1995			2





SFDISK(8)	    Linux Programmer's Manual		SFDISK(8)


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

       -g or --show-geometry
	      List the kernel's idea of the geometry of the indi-
	      cated disk(s).

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

       -d     Dump  the partitions of a device in a format useful
	      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 or --verify
	      Test  whether partitions seem correct. (See above.)

       -i or --increment
	      Number cylinders etc. starting from 1 instead of 0.

       -N number
	      Change  only  the	 single	 partition indicated. For
	      example:
		  % sfdisk /dev/hdb -N5
		  ,,,*
		  %
	      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_equip-
	      ment/disks/2/5' or so).

       -Anumber
	      Make the indicated  partition(s)	active,	 and  all
	      others inactive.

       -c or --id number [Id]
	      If  no Id argument given: print the partition Id of
	      the indicated partition. If an Id argument is  pre-
	      sent:  change the type (Id) of the indicated parti-
	      tion to the given value.	This option has	 the  two
	      very  long  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.





Linux 1.3.23		 1 September 1995			3





SFDISK(8)	    Linux Programmer's Manual		SFDISK(8)


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

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

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

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

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

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

       -q or --quiet
	      Suppress warning messages.

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

       -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 con-
	      tains 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
	      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.

       -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 ver-
	      sions of DOS do) rather than to the starting sector
	      (like  Linux does).  (The fact that there is a dif-
	      ference 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



Linux 1.3.23		 1 September 1995			4





SFDISK(8)	    Linux Programmer's Manual		SFDISK(8)


	      cylinder boundaries are when one knows what  geome-
	      try DOS will use for this disk.)

       --IBM or --leave-last
	      Certain  IBM  diagnostic	programs assume that they
	      can use the last cylinder on a disk for  disk-test-
	      ing  purposes. If you think you might ever run such
	      programs, use this option to tell	 sfdisk	 that  it
	      should  not  allocate the last cylinder.	Sometimes
	      the last cylinder contains a bad sector table.

       -n     Go through all the motions,  but	do  not	 actually
	      write to disk.

       -R     Only  execute the BLKRRPART ioctl (to make the ker-
	      nel re-read the partition table). This can be  use-
	      ful  for	checking  in advance that the final BLKR-
	      RPART 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.

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

       -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 disk, or
	      on a floppy).

       -I file
	      After destroying your filesystems with an	 unfortu-
	      nate  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 disk (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;



Linux 1.3.23		 1 September 1995			5





SFDISK(8)	    Linux Programmer's Manual		SFDISK(8)


		  unsigned char id;
		  hsc end_hsc;
		  unsigned int starting_sector;
		  unsigned int nr_of_sectors;
	      }

       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
       lilo documentation.

       Each partition has a type, its `Id', and if this type is 5
       or  f  (`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  par-
       tition  (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.)

       Partitions that are not primary	or  extended  are  called
       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 parti-
       tion 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	 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.

       The  <c,h,s>  parts can (and probably should) be omitted -
       sfdisk computes them from <start> and <size> and the  disk



Linux 1.3.23		 1 September 1995			6





SFDISK(8)	    Linux Programmer's Manual		SFDISK(8)


       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 sec-
       tor/cylinder/...

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

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

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


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

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


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



Linux 1.3.23		 1 September 1995			7





SFDISK(8)	    Linux Programmer's Manual		SFDISK(8)


       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.

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


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 prob-
       lem  with  the  supposedly-reliable DRDOS.  This was quite
       possibly due to DRDOS-6.0's FDISK command.  Unless I  cre-
       ated 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.esfdisk: `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



Linux 1.3.23		 1 September 1995			8





SFDISK(8)	    Linux Programmer's Manual		SFDISK(8)


       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 sug-
       gest 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.


BUGS
       A corresponding interactive cfdisk (with curses interface)
       is still lacking.

       There are too many options.


AUTHOR
       A. E. Brouwer (aeb@cwi.nl)


































Linux 1.3.23		 1 September 1995			9


