How to copy the partition layout of a whole disk using standard tools
You can use sfdisk for this task even in GPT partitioned disks*.
sfdisk -d /dev/sdX > part_table
Restore keeping the same disk & partition IDs**:
sfdisk /dev/sdX < part_table
Restore generating new disk & partition IDs**:
grep -v ^label-id part_table | sed -e 's/, *uuid=[0-9A-F-]*//' | sfdisk /dev/sdY
*: For GPT partition tables, this requires
sfdisk from util-linux 2.26 or later. It was re-written from scratch on top of libfdisk.
**: by default
sfdisk will copy the disk and partition IDs unchanged, rather than generating new ones. So the new disk will be a clone of the original, not just another disk with the same layout. Note that Linux's
/dev/disk/by-uuid/ looks at filesystem UUIDs, though, not UUIDs in the partition table.
sfdisk will generate new UUIDs if you delete the references to partitions ids (
, uuid=...) and the reference to the disk id (
label-id: ...) from the dump .
It depends if your source disk uses an MBR (aka "dos" or "msdos") or a GPT (aka "GUID") partition table.
Disks over 2 TB cannot use MBR, so they are GPT.
Disks under 2 TB can use both, so you will have to first find out which it is.
Assuming you are on Linux, use either of these commands to find out which partition table your source disk uses:
disk=/dev/sda # Always available, but old versions may not recognize gpt fdisk -l $disk | grep type # `apt-get install gdisk` or equivalent on non-Debian systems gdisk -l $disk | grep -A4 'scan' # `apt-get install parted` parted $disk print | grep Table
For MBR disks
sfdisk as suggested by Petr Uzel's answer, or this variant:
# Save MBR disks sfdisk -d $source > /partitions-backup-$(basename $source).sfdisk sfdisk -d $dest > /partitions-backup-$(basename $dest).sfdisk # Copy $source layout to $dest sfdisk -d $source | sfdisk $dest
For GPT disks
The correct answer was given here and here by Kris Harper.
You need GPT fdisk. Look at the download page or run
sudo apt-get install gdisk.
Then use the sgdisk command:
# Save GPT disks sgdisk --backup=/partitions-backup-$(basename $source).sgdisk $source sgdisk --backup=/partitions-backup-$(basename $dest).sgdisk $dest # Copy $source layout to $dest and regenerate GUIDs sgdisk --replicate=$dest $source sgdisk -G $dest
The last command randomizes the GUID on the disk and all the partitions. This is only necessary if the disks are to be used in the same machine, otherwise it's unnecessary.
Older but still interesting pyparted and python-lvm bindings.
The previous was posted because the above does not work in many modern situations per the sfdisk man page.
sfdisk doesn't understand GUID Partition Table (GPT) and it is not designed for large partitions. In particular case use more advanced GNU parted(8).
This command however supports >2 TB partitions and LVM.
# parted -ms /dev/sda print > sda.parted
BYT; /dev/sda:12.9GB:scsi:512:512:msdos:VMware Virtual disk; 1:1049kB:12.9GB:12.9GB:::boot, lvm;