Dd (Unix/Linux)

De Wiki do Bernardino
Ir para: navegação, pesquisa


In computing, dd is a common program for Unix and Unix-like operating systems whose primary purpose is to "convert and copy a file."<ref name="Unix-V7-man">Predefinição:Cite web</ref> On Unix, device drivers for hardware (such as hard disks) and special device files (such as /dev/zero and /dev/random) appear in the file system just like normal files; dd can also read from (and in some cases write to) these files. As a result, dd can be used for tasks such as backing up the boot sector of a hard drive, and obtaining fixed amount of random data. The dd program can also perform conversions on the data as it is copied, including byte order swapping and conversion to and from the ASCII and EBCDIC text encodings.<ref name="tfl-dd">Predefinição:Cite web</ref>

The name dd may be an allusion to the DD statement found in IBM's Job Control Language (JCL),<ref name="jargon-dd">Predefinição:Cite web</ref> where the acronym stands for "Data Description."<ref>See this old discussion Predefinição:Cite web</ref> The command's syntax resembles the JCL statement more than it does other Unix commands, so the syntax may have been a joke.<ref name="jargon-dd"/> Another explanation for the command's name is that "cc" (for "convert and copy", as in the command's decription) was already taken by the C compiler.Predefinição:Citation needed

The dd command is specified by IEEE Std 1003.1-2008, which is part of the Single UNIX Specification.


The command line syntax of dd differs from many other Unix programs, in that it uses the syntax option=value for its command line options, rather than the more-standard -option value and --option=value formats. By default, dd reads from STDIN and writes to STDOUT, but these can be changed by using the if (input file) and of (output file) options.

Usage varies across different operating systems. Also, certain features of dd will depend on the computer system capabilities, such as dd's ability to implement an option for direct memory access. Sending a SIGINFO signal (or a USR1 signal on Linux) to a running dd process makes it print I/O statistics to standard error and then continue copying (note that signals may terminate the process on OS X). dd can read standard input from the keyboard. When end-of-file (EOF) is reached, dd will exit. Signals and EOF are determined by the software. For example, Unix tools ported to Windows vary as to the EOF: Cygwin uses <ctrl-d> (the usual Unix EOF) and MKS Toolkit uses <ctrl-z> (the usual Windows EOF).

In compliance with the Unix philosophy, dd does one thing well. Unlike a sophisticated and highly abstracted utility, dd has no algorithm other than in the low-level decisions of the user concerning how to vary the run options. Often the options are changed for each run of dd in a multi-step process to solve a computer problem.

Output messages

The GNU variant of dd as supplied with Linux does not describe the format of the messages displayed on standard output on completion, however these are described by other implementations e.g. that with BSD.

Each of the "Records in" and "Records out" lines shows the number of complete blocks transferred + the number of partial blocks, e.g. because the physical medium ended before a complete block was read, or a physical error prevented reading the complete block.

Block size

A block is a unit measuring the number of bytes that are read, written, or converted at one time. Command line options can specify a different block size for input/reading (ibs) compared to output/writing (obs), though the block size (bs) option will override both ibs and obs<code>. The default value for both input and output block sizes is 512 bytes (the block size of Unix block devices). The <code>count option for copying is measured in blocks, as are both the skip count for reading and seek count for writing. Conversion operations are also affected by the "conversion block size" (cbs).

For some uses of the dd command, block size may have an effect on performance. For example, when recovering data from a hard disk, a small block size will generally cause the most bytes to be recovered. For greater speed during copy operations, a larger block size may be used. When dd is used for network transfers, the block size may have an impact on packet size, depending on the network protocol used.

The value provided for block size options is interpreted as a decimal (base 10) integer, and can also include suffixes to indicate multiplication. The suffix w means multiplication by 2, b means 512, k means 1024, M means 1024 × 1024, G means 1024 × 1024 × 1024, and so on. Additionally, some implementations understand the x character as a multiplication operator for both block size and count parameters.

For example, a block size such as bs=2x80x18b is interpreted as 2 × 80 × 18 × 512 = 1474560 bytes, the exact size of a 1440 KiB floppy disk.


The dd command can be used for a variety of purposes.

Data transfer

dd can duplicate data across files, devices, partitions and volumes. The data may be input or output to and from any of these; but there are important differences concerning the output when going to a partition. Also, during the transfer, the data can be modified using the conv options to suit the medium.

An attempt to copy the entire disk using cp may omit the final block if it is of an unexpected lengthPredefinição:Citation needed; whereas dd may succeed. The source and destination disks should have the same size.

Data transfer forms of dd
dd if=/dev/sr0 of=myCD.iso bs=2048 conv=noerror,sync create an ISO disk image from a CD-ROM.
dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=noerror Clone one partition to another
dd if=/dev/ad0 of=/dev/ad1 bs=1M conv=noerror Clone a hard disk "ad0" to "ad1".

The noerror option means to keep going if there is an error. The sync option means to pad the output blocks.

Master boot record backup and restore

It is possible to repair a master boot record. It can be transferred to and from a repair file. To duplicate the first two sectors of a floppy drive: <source lang="bash"> dd if=/dev/fd0 of=MBRboot.img bs=512 count=2 </source> To create an image of the entire master boot record (including the partition table): <source lang="bash"> dd if=/dev/sda of=MBR.img bs=512 count=1 </source> To create an image of only the boot code of the master boot record (without the partition table): <source lang="bash"> dd if=/dev/sda of=MBR_boot.img bs=446 count=1 </source>

Data modification

dd can modify data in place.

Overwrite the first 512 bytes of a file with null bytes: <source lang="bash"> dd if=/dev/zero of=path/to/file bs=512 count=1 conv=notrunc </source> The notrunc conversion option means do not truncate the output file — that is, if the output file already exists, just replace the specified bytes and leave the rest of the output file alone. Without this option, dd would create an output file 512 bytes long.

To duplicate a disk partition as a disk image file on a different partition: <source lang="bash"> dd if=/dev/sdb2 of=partition.image bs=4096 conv=noerror </source>

Disk wipe

For security reasons, it is necessary to have a disk wipe of the discarded device.

To check to see if a drive has data on it, send the output to standard out. <source lang="bash"> dd if=/dev/sda </source> To wipe a disk by writing zeros:

<source lang="bash"> dd if=/dev/zero of=/dev/sda bs=1M </source>

The bs=1M option makes dd read and write 1 mebibyte at a time. This makes the whole process a lot faster on any relatively modern system. Note that filling the drive with random data will always take a lot longer than zeroing the drive because the random data has to be rendered by the CPU first. On most relatively modern drives, zeroing the drive will render any data it contains permanently irrecoverable; thus being the preferred method.<ref>Predefinição:Cite journal</ref>

Zeroing the drive will render any data it contains irrecoverable by software. Note that it still may be recoverable by special laboratory techniques; read about data remanence.

The shred program may be used as a higher level tool for the same task.

Data recovery

The history of open-source software (OSS) for data recovery and restoration of files, drives, and partitions started with GNU dd in 1984, with one block size per dd process, and no recovery algorithm other than the user's interactive session running one form of dd after another. Then a C program was authored October 1999 called dd_rescue. It has two block sizes in its algorithm. But the author of the 2003 shell script dd_rhelp that enhances dd_rescue's data recovery algorithm, now recommends GNU ddrescue,<ref>Predefinição:Cite web</ref> a C++ program that was initially released in 2004 and is now in most Linux distributions. GNU ddrescue has the most sophisticated block-size-changing algorithm available in OSS.<ref>Predefinição:Cite web</ref> (The names ddrescue and dd_rescue are similar, yet they are different programs. Still, the Debian Linux distribution packages dd_rescue as "ddrescue", and packages GNU ddrescue as "gddrescue").

GNU ddrescue is stable and safe.<ref>Predefinição:Cite web</ref> Here is an untested rescue using 3 of ddrescue's 31 options: <source lang="bash"> ddrescue -n /dev/old_disk /dev/new_disk # quickly grab large error-free areas, then stop ddrescue -d -r1 /dev/old_disk /dev/new_disk # work with direct disk access on error areas </source>

Another open source program called savehd7 uses a sophisticated algorithm, but it also requires the installation of its own programming-language interpreter.

Benchmarking drive performance

To make drive benchmark test and analyze the sequential read and write performance for 1024 byte blocks : <source lang="bash"> dd if=/dev/zero bs=1024 count=1000000 of=file_1GB dd if=file_1GB of=/dev/null bs=64k </source>

Generating a file with random data

To make a file of 100 random bytes: <source lang="bash"> dd if=/dev/random of=myrandom bs=100 count=1 </source>

Converting a file to upper case

To convert a file to uppercase: <source lang="bash"> dd if=filename of=filename1 conv=ucase </source>

Creating empty files of arbitrary size

Create a 1 GiB sparse file or resize an existing file to 1 GiB without overwriting: <source lang="bash"> dd if=/dev/zero of=mytestfile.out bs=1 count=0 seek=1G </source>


Seagate documentation warns, "Certain disc utilities, such as DD, which depend on low-level disc access may not support 48-bit LBAs until they are updated".<ref>Windows 137GB (128 GiB) Capacity Barrier - Seagate Technology (March 2003)</ref> Using ATA harddrives over 128 GiB requires 48-bit LBA. However, in Linux, dd uses the kernel to read or write to raw device files.<ref>This is verifiable with strace.</ref> Support for 48-bit LBA has been present since version 2.4.23 of the kernel, released in 2003.<ref>Predefinição:Cite web</ref><ref>Linux-2.4.23 released Linux kernel mailing list, 2003.</ref>

It is jokingly said that dd stands for "disk destroyer", "data destroyer", "death and destruction", "damn dangerous", or "delete data", since when used for low-level operations on hard disks, a small mistake, such as reversing the if and of (input file and output file) parameters, could result in the loss of some or all data on a disk.<ref name="tfl-dd" />

See also



External links

Predefinição:Optical disc image software Predefinição:Unix commandsbe:Dd ca:Dd de:Dd (Unix) es:Dd (Unix) fa:Dd (یونیکس) fr:Dd (Unix) it:Dd (Unix) ka:Dd hu:Dd (Unix) nl:Dd (Unix) ja:Dd (UNIX) no:Dd (Unix) pl:Dd ro:Dd (Unix) ru:Dd sv:Dd uk:Dd