Convert and copy a file, write disk headers, boot records, create a boot floppy. dd can make an exact clone of an (unmounted) disk, this will include all blank space so the output destination must be at least as large as the input.
Syntax dd [Options] Key if=FILE Input file : Read from FILE instead of standard input. of=FILE Output file : Write to FILE instead of standard output. Unless `conv=notrunc' is given, `dd' truncates FILE to zero bytes (or the size specified with `seek='). ibs=BYTES Read BYTES bytes at a time. obs=BYTES Write BYTES bytes at a time. bs=BYTES Block size, both read and write BYTES bytes at a time. This overrides `ibs' and `obs'. cbs=BYTES Convert BYTES bytes at a time. skip=BLOCKS Skip BLOCKS `ibs'-byte blocks in the input file before copying. seek=BLOCKS Skip BLOCKS `obs'-byte blocks in the output file before copying. count=BLOCKS Copy BLOCKS `ibs'-byte blocks from the input file, instead of everything until the end of the file. conv=CONVERSION[,CONVERSION]... Convert the file as specified by the CONVERSION argument(s). (No spaces around any comma) Conversions: `ascii' Convert EBCDIC to ASCII. `ebcdic' Convert ASCII to EBCDIC. `ibm' Convert ASCII to alternate EBCDIC. `block' For each line in the input, output `cbs' bytes, replacing the input newline with a space and padding with spaces as necessary. `unblock' Replace trailing spaces in each `cbs'-sized input block with a newline. `lcase' Change uppercase letters to lowercase. `ucase' Change lowercase letters to uppercase. `swab' Swap every pair of input bytes. GNU `dd', unlike others, works when an odd number of bytes are read--the last byte is simply copied (since there is nothing to swap it with). `noerror' Continue after read errors. `notrunc' Do not truncate the output file. `sync' Pad every input block to size of `ibs' with trailing zero bytes.
The numeric-valued options (BYTES and BLOCKS) can be followed by a multiplier: `b'=512, `c'=1, `w'=2, `xM'=M, or any of the standard block size suffixes like `k'=1024.
The name dd may be an allusion to the DD statement found in IBM's Job Control Language (JCL), where the acronym stands for "Data Description".
dd can copy a smaller drive to a larger one, but can’t copy a larger drive to a smaller one.
When cloning a disk drive, its a good idea to list the partitions before and afterwards using sudo fdisk –l
An empty/unformatted drive will appear as "Disk dev/sdn doesn't contain a vaild partition table".
If dd receives a USR1 signal, the current input and output block counts will be written to the standard error output in the same format as the standard completion message. e.g. kill -USR1 1234 where 1234 is the process id.
Clone the drive sda onto drive sdb:
$ dd if=/dev/sda of=/dev/sdb
Clone the drive hda onto an image file:
$ dd if=/dev/hda of=/image.img
Copy a CD or DVD disc to a .iso image file, first unmounting the disc:
sudo umount /dev/dvd-device
dd if=/dev/dvd-device of=dvd.iso bs=2048 conv=sync,notrunc
# dvd-device will typically be dvd for a dvd disc or cdrom for a cdrom disc.
Clone a hard drive to a zipped image file in 100Mb blocks:
$ dd if=/dev/hda bs=100M | gzip -c > /image.img
Create a 10 KB file filled with random data (10 x 1K blocks):
$ dd if=/dev/random of=random.bin bs=1024 count=10
Completely wipe the hard drive hdz by overwriting it with random data:
$ dd if=/dev/urandom of=/dev/hdz
Create a boot floppy:
$ dd if=boot.img of=/dev/fd0 bs=1440
"..If it disagrees with experiment it is wrong. In that simple statement is the key to science. It does not make any difference how beautiful your guess is. It does not make any difference how smart you are, who made the guess, or what his name is – if it disagrees with experiment it is wrong" ~ Richard Feynman
CodeCoffee.com - dd examples
cp - Copy one or more files to another location
ddrescue - Data recovery tool
install - Copy files and set attributes
mtools - Manipulate MS-DOS files
sum - Print a checksum for a file
Equivalent Windows command: FSUTIL file setzerodata, or bbcopy.exe