| Examples of the use of sfdisk 3.0 (to partition a disk) |
| Input lines have fields <start>,<size>,<type>... - see sfdisk.8. |
| Usually no <start> is given, and input lines start with a comma. |
| |
| Before doing anything with a disk, make sure it is not in use; |
| unmount all its file systems, and say swapoff to its swap partitions. |
| (The final BLKRRPART ioctl will fail if anything else still uses |
| the disk, and you will have to reboot. It is easier to first make |
| sure that nothing uses the disk, e.g., by testing: |
| % umount /dev/sdb1 |
| % sfdisk -R /dev/sdb |
| BLKRRPART: Device or resource busy |
| * Device busy for revalidation (usage=2) |
| % swapoff /dev/sdb3 |
| % sfdisk -R /dev/sdb |
| * sdb: sdb1 < sdb5 sdb6 > sdb3 |
| % |
| Note that the starred messages are kernel messages, that may be |
| logged somewhere, or written to some other console. |
| In sfdisk 3.01 sfdisk automatically does this check, unless told not to.) |
| |
| 1. One big partition: |
| sfdisk /dev/hda << EOF |
| ; |
| EOF |
| |
| (If there was garbage on the disk before, you may get error messages |
| like: `ERROR: sector 0 does not have an msdos signature' |
| and `/dev/hda: unrecognized partition'. This does not matter |
| if you write an entirely fresh partition table anyway.) |
| |
| The output will be: |
| ----------------------------------------------------------------------- |
| Old situation: |
| ... |
| New situation: |
| Units = cylinders of 208896 bytes, blocks of 1024 bytes, counting from 0 |
| |
| Device Boot Start End #cyls #blocks Id System |
| /dev/hda1 0+ 1023 1024- 208895+ 83 Linux native |
| Successfully wrote the new partition table |
| hda: hda1 |
| ----------------------------------------------------------------------- |
| Writing and rereading the partition table takes a few seconds - |
| don't be alarmed if nothing happens for six seconds or so. |
| |
| |
| 2. Three primary partitions: two of size 50MB and the rest: |
| sfdisk /dev/hda -uM << EOF |
| ,50 |
| ,50 |
| ; |
| EOF |
| ----------------------------------------------------------------------- |
| New situation: |
| Units = megabytes of 1048576 bytes, blocks of 1024 bytes, counting from 0 |
| |
| Device Boot Start End MB #blocks Id System |
| /dev/hda1 0+ 50- 51- 51203+ 83 Linux native |
| /dev/hda2 50+ 100- 51- 51204 83 Linux native |
| /dev/hda3 100+ 203 104- 106488 83 Linux native |
| Successfully wrote the new partition table |
| hda: hda1 hda2 hda3 |
| ----------------------------------------------------------------------- |
| /dev/hda1 is one block (in fact only half a block) shorter than |
| /dev/hda2 because its start had to be shifted away from zero in |
| order to leave room for the Master Boot Record (MBR). |
| |
| |
| 3. A 1MB OS2 Boot Manager partition, a 50MB DOS partition, |
| and three extended partitions (DOS D:, Linux swap, Linux): |
| sfdisk /dev/hda -uM << EOF |
| ,1,a |
| ,50,6 |
| ,,E |
| ; |
| ,20,4 |
| ,16,S |
| ; |
| EOF |
| ----------------------------------------------------------------------- |
| Device Boot Start End MB #blocks Id System |
| /dev/hda1 0+ 1- 2- 1223+ a OS/2 Boot Manager |
| /dev/hda2 1+ 51- 51- 51204 6 DOS 16-bit FAT >=32M |
| /dev/hda3 51+ 203 153- 156468 5 Extended |
| /dev/hda4 0 - 0 0 0 Empty |
| /dev/hda5 51+ 71- 21- 20603+ 4 DOS 16-bit FAT <32M |
| /dev/hda6 71+ 87- 17- 16523+ 82 Linux swap |
| /dev/hda7 87+ 203 117- 119339+ 83 Linux native |
| Successfully wrote the new partition table |
| hda: hda1 hda2 hda3 < hda5 hda6 hda7 > |
| ----------------------------------------------------------------------- |
| All these rounded numbers look better in cylinder units: |
| % sfdisk -l /dev/hda |
| ----------------------------------------------------------------------- |
| Device Boot Start End #cyls #blocks Id System |
| /dev/hda1 0+ 5 6- 1223+ a OS/2 Boot Manager |
| /dev/hda2 6 256 251 51204 6 DOS 16-bit FAT >=32M |
| /dev/hda3 257 1023 767 156468 5 Extended |
| /dev/hda4 0 - 0 0 0 Empty |
| /dev/hda5 257+ 357 101- 20603+ 4 DOS 16-bit FAT <32M |
| /dev/hda6 358+ 438 81- 16523+ 82 Linux swap |
| /dev/hda7 439+ 1023 585- 119339+ 83 Linux native |
| ----------------------------------------------------------------------- |
| But still - why does /dev/hda5 not start on a cylinder boundary? |
| Because it is contained in an extended partition that does. |
| Of the chain of extended partitions, usually only the first is |
| shown. (The others have no name under Linux anyway.) But |
| these additional extended partitions can be made visible: |
| % sfdisk -l -x /dev/hda |
| ----------------------------------------------------------------------- |
| Device Boot Start End #cyls #blocks Id System |
| /dev/hda1 0+ 5 6- 1223+ a OS/2 Boot Manager |
| /dev/hda2 6 256 251 51204 6 DOS 16-bit FAT >=32M |
| /dev/hda3 257 1023 767 156468 5 Extended |
| /dev/hda4 0 - 0 0 0 Empty |
| |
| /dev/hda5 257+ 357 101- 20603+ 4 DOS 16-bit FAT <32M |
| - 358 1023 666 135864 5 Extended |
| - 257 256 0 0 0 Empty |
| - 257 256 0 0 0 Empty |
| |
| /dev/hda6 358+ 438 81- 16523+ 82 Linux swap |
| - 439 1023 585 119340 5 Extended |
| - 358 357 0 0 0 Empty |
| - 358 357 0 0 0 Empty |
| |
| /dev/hda7 439+ 1023 585- 119339+ 83 Linux native |
| - 439 438 0 0 0 Empty |
| - 439 438 0 0 0 Empty |
| - 439 438 0 0 0 Empty |
| ----------------------------------------------------------------------- |
| |
| Why the empty 4th input line? The description of the extended partitions |
| starts after that of the four primary partitions. |
| You force an empty partition with a ",0" input line, but here all |
| space was divided already, so the fourth partition became empty |
| automatically. |
| |
| How did I know about 4,6,a,E,S? Well, E,S,L stand for Extended, |
| Swap and Linux. The other values are hexadecimal and come from |
| the table: |
| % sfdisk -T |
| Id Name |
| |
| 0 Empty |
| 1 DOS 12-bit FAT |
| 2 XENIX root |
| 3 XENIX usr |
| 4 DOS 16-bit FAT <32M |
| 5 Extended |
| 6 DOS 16-bit FAT >=32M |
| 7 OS/2 HPFS or QNX or Advanced UNIX |
| 8 AIX data |
| 9 AIX boot or Coherent |
| a OS/2 Boot Manager |
| ... |
| |
| |
| 4. Preserving the sectors changed by sfdisk. |
| % sfdisk -O save-hdd-partition-sectors /dev/hda |
| ... |
| will write the sectors overwritten by sfdisk to file. |
| If you notice that you trashed some partition, you may |
| be able to restore things by |
| % sfdisk -I save-hdd-partition-sectors /dev/hda |
| % |
| |
| 5. Preserving some old partitions. |
| % sfdisk -N2 /dev/hda |
| ... |
| will only change the partition /dev/hda2, and leave the rest |
| unchanged. The most obvious application is to change an Id: |
| % sfdisk -N7 /dev/hda |
| ,,63 |
| % |
| ----------------------------------------------------------------------- |
| Old situation: |
| |
| Device Boot Start End #cyls #blocks Id System |
| /dev/hda1 0+ 5 6- 1223+ a OS/2 Boot Manager |
| ... |
| /dev/hda6 358+ 438 81- 16523+ 82 Linux swap |
| /dev/hda7 439+ 1023 585- 119339+ 83 Linux native |
| |
| New situation: |
| |
| Device Boot Start End #cyls #blocks Id System |
| /dev/hda1 0+ 5 6- 1223+ a OS/2 Boot Manager |
| ... |
| /dev/hda6 358+ 438 81- 16523+ 82 Linux swap |
| /dev/hda7 439+ 1023 585- 119339+ 63 GNU HURD |
| ----------------------------------------------------------------------- |
| Note that changing a logical partition into an empty partition |
| will decrease the number of all subsequent logical partitions. |
| |
| 6. Deleting a partition. |
| At first I thought of having an option -X# for deleting partitions, |
| but there are several ways in which a partition can be deleted, and |
| it is probably better to handle this just as a general change. |
| % sfdisk -d /dev/hda > ohda |
| will write the current tables on the file `ohda'. |
| ----------------------------------------------------------------------- |
| % cat ohda |
| # partition table of /dev/hda |
| unit: sectors |
| |
| /dev/hda1 : start= 1, size= 40799, Id= 5 |
| /dev/hda2 : start= 40800, size= 40800, Id=83 |
| /dev/hda3 : start= 81600, size= 336192, Id=83 |
| /dev/hda4 : start= 0, size= 0, Id= 0 |
| /dev/hda5 : start= 2, size= 40798, Id=83 |
| ----------------------------------------------------------------------- |
| In order to delete the partition on /dev/hda3, edit this file |
| and feed the result to sfdisk again. |
| ----------------------------------------------------------------------- |
| % emacs ohda |
| % cat ohda |
| # partition table of /dev/hda |
| unit: sectors |
| |
| /dev/hda1 : start= 1, size= 40799, Id= 5 |
| /dev/hda2 : start= 40800, size= 40800, Id=83 |
| /dev/hda3 : start= 0, size= 0, Id= 0 |
| /dev/hda4 : start= 0, size= 0, Id= 0 |
| /dev/hda5 : start= 2, size= 40798, Id=83 |
| % sfdisk /dev/hda < ohda |
| Old situation: |
| Units = cylinders of 208896 bytes, blocks of 1024 bytes, counting from 0 |
| |
| Device Boot Start End #cyls #blocks Id System |
| /dev/hda1 0+ 99 100- 20399+ 5 Extended |
| /dev/hda2 100 199 100 20400 83 Linux native |
| /dev/hda3 200 1023 824 168096 83 Linux native |
| /dev/hda4 0 - 0 0 0 Empty |
| /dev/hda5 0+ 99 100- 20399 83 Linux native |
| New situation: |
| Units = sectors of 512 bytes, counting from 0 |
| |
| Device Boot Start End #sectors Id System |
| /dev/hda1 1 40799 40799 5 Extended |
| /dev/hda2 40800 81599 40800 83 Linux native |
| /dev/hda3 0 - 0 0 Empty |
| /dev/hda4 0 - 0 0 Empty |
| /dev/hda5 2 40799 40798 83 Linux native |
| Successfully wrote the new partition table |
| % sfdisk -l -V /dev/hda |
| |
| Disk /dev/hda: 12 heads, 34 sectors, 1024 cylinders |
| Units = cylinders of 208896 bytes, blocks of 1024 bytes, counting from 0 |
| |
| Device Boot Start End #cyls #blocks Id System |
| /dev/hda1 0+ 99 100- 20399+ 5 Extended |
| /dev/hda2 100 199 100 20400 83 Linux native |
| /dev/hda3 0 - 0 0 0 Empty |
| /dev/hda4 0 - 0 0 0 Empty |
| /dev/hda5 0+ 99 100- 20399 83 Linux native |
| /dev/hda: OK |
| ----------------------------------------------------------------------- |
| This is a good way of making changes: dump the current status |
| to file, edit the file, and feed it to sfdisk. |
| Preserving the file on some other disk could be useful: |
| if ever the MBR gets thrashed it can be used to restore |
| the old situation. |