Last updated on September 30, 2020 by Dan Nanni
fdisk is a command-line utility for disk partition management. It's not common that you want to automate
fdisk (i.e., running
fdisk in a batch mode), since (re)-partitioning your system is a rare thing, and you typically deal with a small number of partitions at once. However, if you try to automate virtual machine creation, partitioning and formatting in batch mode may no longer be so unrealistic.
If you would like to run
fdisk in non-interactive batch mode on Linux, you can use one of the two methods.
The first method is to leverage the following shell snippet.
#!/bin/sh hdd="/dev/hda /dev/hdb /dev/hdc" for i in $hdd;do echo "n p 1 w "|fdisk $i;mkfs.ext3 $i;done
Note that there are two blank lines between
w lines. Given three hard drives (mapped to
/dev/hdc), this script creates for each hard drive a single primary partition, allocates all available space in the drive to the partition, and finally builds an EXT3-type file system on it. By tweaking the script, you should be able to create any number of (primary/logical) partitions for any number of disk drives in non-interactive fashion.
The second method to automate disk partitioning is to use a command-line tool called
sfdisk. This tool allows you to create/change partition tables according to the disk partitioning specification read from standard input. It also allows you to export the partition table specification of a device to a file, so that
sfdisk can read the file back in to apply the same partitioning to a different device.
The basic usage of
sfdisk for non-interactive disk partitioning is as follows.
To prepare a disk partitioning specification:
$ sudo sfdisk -d /dev/sda > my.layout
The exported disk layout information looks as follows.
$ cat my.layout
# partition table of /dev/sda unit: sectors /dev/sda1 : start= 2048, size= 497664, Id=83, bootable /dev/sda2 : start= 501758, size=1953021954, Id= 5 /dev/sda3 : start= 0, size= 0, Id= 0 /dev/sda4 : start= 0, size= 0, Id= 0 /dev/sda5 : start= 501760, size=1953021952, Id=8e
To apply the same disk partitioning and layout to another device (e.g.,
$ sudo sfdisk /dev/sdb < my.layout