Linux: How to backup hard disk partition table (MBR)

Posted on in Categories Debian Linux, File system, Gentoo Linux, Howto, Linux, RedHat/Fedora Linux, Suse Linux, Sys admin, Tips, Troubleshooting, Ubuntu Linux, UNIX last updated July 10, 2006

If you don’t want to take any chances with your data, it is recommended that you backup hard disk partition table. Last Friday I was discussing some issues with one of our customer and he pointed out me dd command.

Backup MBR with dd command

dd the old good command which now backup partition tables even writes CDs ;). Backing up partition is nothing but actually backing up MBR (master boot record). The command is as follows for backing up MBR stored on /dev/sdX or /dev/hdX :
# dd if=/dev/sdX of=/tmp/sda-mbr.bin bs=512 count=1

Replace X with actual device name such as /dev/sda.

Now to restore partition table to disk, all you need to do is use dd command:
# dd if= sda-mbr.bin of=/dev/sdX bs=1 count=64 skip=446 seek=446

dd command works with Solaris, HP-UX and all other UNIX like operating systems. Read man page of dd for more info.

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin and a trainer for the Linux operating system/Unix shell scripting. He has worked with global clients and in various industries, including IT, education, defense and space research, and the nonprofit sector. Follow him on Twitter, Facebook, Google+.

14 comment

    1. Wrong! This method DOES WORK with extended , primary partitions. I’ve used it all the time, to both backup & restore. Just remember to backup MBR if you add any changes to partitions.

      1. No. He’s right. The MBR lists whether a partition is active, its type, start point and number of sectors within the partition. MBR lists this for a maximum of 4 partitions. This not include logical partitions. They are described within the extended partition. They are not described in the MBR.

  1. jns, it could be because only one seek is needed.
    there are 446b of MBR, 64b of Partition Table and 2 as end (0x55aa). {= 512b}
    if skip and seek aren’t synonimous, you seek 446 + 446.
    thus, command line must be
    dd if=sda-mbr.bin of=/dev/sdX bs=1 count=64 skip=446
    or
    dd if=sda-mbr.bin of=/dev/sdX bs=1 count=64 seek=446

    1. from man dd
      seek=N skip N obs-sized blocks at start of output
      skip=N skip N ibs-sized blocks at start of input

      so, you need seek to start from byte 446 of the disk and skip to ignore first 446 byte of the backup image. skip and seek are, definitely, not synonymous 🙂

  2. i’m sorry, i’m mistake. error coud be if mbr is all zero. then you must add conv=notrunc for no file optimization.
    ej:
    2GB file
    dd if=/dev/zero of=afile bs=1 seek=2GB count=1 (file size in hd<1kb)
    or
    dd if=/dev/zero of=afile bs=1 count=2GB (file size in hd=2gb)

    size must be specific in bytes, 2gb is only for easy read.
    note: a little bs spend more time

    1. He’s talking about bytes. 446 bytes of Bootstrap code, then 4 partition entries x 16 bytes = 64 bytes, then 2 bytes of signature (a 16 bit number = 0101010110101010). This is 55aa in hex and 21930 in decimal.

Leave a Comment