Dd

From Linuxintro
Revision as of 20:38, 5 March 2010 by imported>ThorstenStaerk (→‎create an iso image of a CD)

dd is a utility to create a disk dump by reading every single block on a disk, e.g. your hard drive. However, its architecture is laid out so it can do much more than creating a dump. Here is what dd can do for you:

  • manage a disk backup
    • create a backup from a disk to a file
    • restore a backup from a file to a disk
    • clone a harddisk
    • create a disk image and transfer it over the network
  • create an iso image of a CD
  • rescue a file that contains bad blocks
  • analyze your disk by displaying selected blocks
  • create your own operating system by dumping your bootloader to the boot sector
  • benchmark the throughput of your disks

Disk Backup

Create a backup

Say we have a harddisk /dev/sda that we want to backup entirely (sector-by-sector) to a USB volume /dev/sdb1, mounted on /mnt/sdb1. We call this a dump or an image of /dev/sda. The dump shall be named backup.img. Here is the dd command:

dd if=/dev/sda of=/mnt/sdb1/backup.img

In this command, if stands for input file and of for output file.

Restore a backup

To restore this backup, we boot from a live CD and do the command vice versa. This can overwrite all content on your harddisk, this is the intention.

dd if=/mnt/sdb1/backup.img of=/dev/sda

Clone a harddisk

To clone a disk A to B, both disks need to have the same capacity. It is very convenient for USB disks. Say our USB disk source is called /dev/sdb and the target is called /dev/sdc. Do it like this:

dd if=/dev/sdb of=/dev/sdc

Now if sdc has a bigger capacity, this capacity will be lost because the file system is not aware of it.

Transfer a disk image

To transfer a disk image over the network to a computer named target, use

dd if=/dev/sdb | ssh root@target "(cat >backup.img)"

create an iso image of a CD

To create an iso image of a CD, read it block-by-block and save the blocks to a file:

dd if=/dev/cdrom of=cdimage.iso

create a disk image

To create an empty image of a harddisk, e.g. for qemu virtualization:

dd if=/dev/zero of=harddisk.img bs=516096 seek=6241 count=0

creates a 3GB-Image. For a 6GB-Image, use seek=12482.

rescue a file that contains bad blocks

If your favorite movie or song cannot be played any longer because the file is corrupt, you can use dd to ignore the corrupt part:

dd if=movie.avi of=rescued_movie.avi conv=noerror

analyze your disk

DD is great to learn about your system. To analyze your disk by displaying selected blocks, in this case block 1001 use:

dd if=/dev/sdc1 count=1 skip=1000

Create your own bootloader

To create your own operating system by dumping your bootloader to the boot sector of a bootable disk image use

dd conv=notrunc if=bootloader of=qemu.img

benchmark the throughput of your disks

To benchmark the throughput of your disk /dev/sda1, e.g. for different block sizes, proceed like this:

# dd if=/dev/sda1 of=/dev/null bs=512 count=1000000
1000000+0 records in
1000000+0 records out
512000000 bytes (512 MB) copied, 5.16588 s, 99.1 MB/s
# dd if=/dev/sda1 of=/dev/null bs=4096 count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 36.0667 s, 114 MB/s

However, make sure you have read Background:How caching works first otherwise you will be surprised by a mysterious accelleration like this:

# dd if=/dev/sda1 of=/dev/null bs=512 count=1000000
1000000+0 records in
1000000+0 records out
512000000 bytes (512 MB) copied, 5.32254 s, 96.2 MB/s
# dd if=/dev/sda1 of=/dev/null bs=512 count=1000000
1000000+0 records in
1000000+0 records out
512000000 bytes (512 MB) copied, 1.09851 s, 466 MB/s