Cheatsheet & Examples: dd

The dd
command is a powerful utility for copying files, converting data, and performing low-level disk operations. It is often used for cloning disks, creating backups, and transferring data between devices.
Copy a Disk to an Image File
Example Usage:dd if=/dev/sdX of=image.img
What it does:
Creates a disk image of the source device (/dev/sdX
) and saves it to image.img
.
Command-line Arguments Explained:
if
: Specifies the input file or device (e.g.,/dev/sdX
is the source disk).of
: Specifies the output file or device (e.g.,image.img
is the destination file).
Create a Bootable USB Drive
Example Usage:dd if=image.iso of=/dev/sdY bs=4M status=progress
What it does:
Writes a bootable ISO file (image.iso
) to a USB drive (/dev/sdY
) for creating a bootable device.
Command-line Arguments Explained:
if
: Input file (e.g., the ISO image to write to the USB).of
: Output device (e.g., the USB drive, typically/dev/sdY
).bs
: Block size (e.g.,4M
improves performance by reading/writing 4MB chunks).status=progress
: Displays real-time progress of the copy operation.
Copy Files with Custom Block Size
Example Usage:dd if=source.txt of=destination.txt bs=1M
What it does:
Copies source.txt
to destination.txt
using a block size of 1MB for faster transfers.
Command-line Arguments Explained:
if
: Source file (e.g.,source.txt
).of
: Destination file (e.g.,destination.txt
).bs
: Block size (e.g.,1M
sets 1MB blocks for efficiency).
Monitor Copy Progress
Example Usage:dd if=largefile of=backupfile bs=1G status=progress
What it does:
Copies a large file (largefile
) to backupfile
and shows real-time progress updates.
Command-line Arguments Explained:
if
: Input file (e.g.,largefile
).of
: Output file (e.g.,backupfile
).bs
: Block size (e.g.,1G
for 1GB chunks).status=progress
: Displays progress (bytes copied, time elapsed, speed).
Skip or Seek Specific Blocks
Example Usage:dd if=image.img of=part.img skip=512 count=100 bs=512
What it does:
Extracts a portion of a disk image (image.img
) starting from block 512, copying 100 blocks to part.img
.
Command-line Arguments Explained:
if
: Input file (e.g.,image.img
).of
: Output file (e.g.,part.img
).skip
: Number of input blocks to skip before starting (e.g., 512 blocks).count
: Number of blocks to copy (e.g., 100 blocks).bs
: Block size (e.g.,512
for sector-sized blocks).
Convert File Case or Process Data
Example Usage:dd if=input.txt of=output.txt conv=ucase
What it does:
Converts all lowercase letters in input.txt
to uppercase and saves the result to output.txt
.
Command-line Arguments Explained:
if
: Input file (e.g.,input.txt
).of
: Output file (e.g.,output.txt
).conv=ucase
: Converts input text to uppercase (other options likelcases
exist).
Transfer Data Over a Network
Example Usage:dd if=/dev/sda | ssh user@remote 'dd of=/backup/sda.img'
What it does:
Sends data from /dev/sda
to a remote server's /backup/sda.img
via SSH.
Command-line Arguments Explained:
if
: Input device (e.g.,/dev/sda
).of
: Output path on the remote system (e.g.,/backup/sda.img
).ssh
: Executes thedd
command on the remote machine.
Create a Zero-Filled File
Example Usage:dd if=/dev/zero of=file.img bs=1M count=1024
What it does:
Generates a 1GB file (file.img
) filled with zeros, useful for testing or allocating space.
Command-line Arguments Explained:
if
: Input source (e.g.,/dev/zero
provides null bytes).of
: Output file (e.g.,file.img
).bs
: Block size (e.g.,1M
for 1MB blocks).count
: Number of blocks to copy (e.g., 1024 × 1MB = 1GB).
Clone One Disk to Another
Example Usage:dd if=/dev/sda of=/dev/sdb
What it does:
Clones the entire contents of /dev/sda
to /dev/sdb
, creating an exact copy of the disk.
Command-line Arguments Explained:
if
: Source disk (/dev/sda
).of
: Destination disk (/dev/sdb
).
Verify Data Integrity
Example Usage:dd if=/dev/sdX of=/dev/null bs=1M conv=noerror,sync
What it does:
Reads data from /dev/sdX
and discards it (/dev/null
), skipping errors and padding blocks to ensure data integrity checks.
Command-line Arguments Explained:
if
: Input source (/dev/sdX
).of
: Output destination (/dev/null
to discard data).bs
: Block size (e.g.,1M
for efficiency).conv=noerror,sync
:noerror
skips read errors,sync
pads blocks with nulls to handle bad sectors.
Compress Data on the Fly
Example Usage:dd if=image.img | gzip > image.gz
What it does:
Streams a disk image (image.img
) through gzip
for compression, saving the result as image.gz
.
Command-line Arguments Explained:
if
: Input file (image.img
).| gzip
: Pipes the output togzip
for compression (not add
argument but part of the command chain).
Benchmark Disk Performance
Example Usage:dd if=/dev/zero of=tempfile bs=1G count=1 oflag=direct
What it does:
Tests write performance by writing 1GB of zeros to tempfile
without using system cache (oflag=direct
).
Command-line Arguments Explained:
if
: Input source (/dev/zero
for zeros).of
: Output file (tempfile
).bs
: Block size (1G
for large chunks).count
: Number of blocks to copy (1
block of 1GB).oflag=direct
: Bypasses the system cache for raw I/O.
Copy File Segments
Example Usage:dd if=bigfile of=partfile skip=100 seek=500 bs=1M
What it does:
Copies data from bigfile
and writes it to partfile
, skipping 100 blocks and seeking 500 blocks.
Command-line Arguments Explained:
if
: Input file (bigfile
).of
: Output file (partfile
).skip
: Skips the first 100 input blocks.seek
: Starts writing at the 500th output block.bs
: Block size (e.g.,1M
for 1MB blocks).
Subscribe to my newsletter
Read articles from Hong directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Hong
Hong
I am a developer from Malaysia. I work with PHP most of the time, recently I fell in love with Go. When I am not working, I will be ballroom dancing :-)