These docs are under active development and cover the v0.20 Kobicha security model.
On this page
reference 3 min read

dd

dd copies data from one place to another, a block at a time, and can transform the data as it goes. It is the tool for low-level copying — writing a disk image to a device, extracting an exact byte range out of a file, copying from or to a raw device.

dd [operand]...
$ dd if=disk.img of=/dev/mydisk bs=4M status=progress

How dd is told what to do

dd does not take options in the usual -x form. It takes operands, each written name=value, in any order. With no if= operand it reads from standard input; with no of= operand it writes to standard output.

The operands

Operand Meaning
if=FILE Read input from FILE.
of=FILE Write output to FILE.
bs=BYTES Read and write BYTES at a time. Sets both the input and output block size at once.
ibs=BYTES Input block size (default 512).
obs=BYTES Output block size (default 512).
cbs=BYTES Conversion block size — used by the block and unblock conversions.
count=N Stop after N input blocks, rather than reading to the end.
skip=N Skip N input blocks before copying. Also spelled iseek=N.
seek=N Skip N output blocks before writing. Also spelled oseek=N.
conv=LIST Apply the comma-separated conversions below.
iflag=LIST Comma-separated input flags — how the input is opened and read.
oflag=LIST Comma-separated output flags — how the output is opened and written.
status=LEVEL How much to report: progress (periodic stats while copying), noxfer (final counts only), none (silent).

A size value accepts a unit suffix (K, M, G, …). So bs=4M is four mebibytes per block.

Conversions (conv=)

Value Effect
ucase / lcase Convert the data to upper-case / lower-case.
swab Swap every adjacent pair of bytes.
sync Pad each input block out to its full size — with zeros, or with spaces alongside block/unblock.
block / unblock Convert between newline-terminated lines and fixed-size cbs records.
sparse Where an output block is all zeros, seek past it instead of writing it.
excl Fail if the output file already exists.
nocreat Fail if the output file does not already exist.
notrunc Do not truncate the output file when opening it.
noerror Continue past read errors instead of stopping.
fdatasync / fsync Flush the data — or the data and metadata — to storage before finishing.

Input and output flags (iflag=, oflag=)

Flag Applies to Effect
count_bytes input Interpret count=N as a number of bytes, not blocks.
skip_bytes input Interpret skip=N as a number of bytes.
fullblock input Wait for a full ibs of data on each read.
seek_bytes output Interpret seek=N as a number of bytes.
append output Open the output in append mode.
direct both Use direct I/O, bypassing the cache.
dsync / sync both Use synchronised I/O — for data, or for data and metadata.
nonblock both Use non-blocking I/O.
noatime both Do not update the file's access time.
nocache both Ask the system to drop the file's cached pages.
directory both Fail unless the file is a directory.

What dd prints

Unless status=none is set, dd prints a summary when it finishes:

16+0 records in
16+0 records out
67108864 bytes (67 MB, 64 MiB) copied, 1.234 s, 54.4 MB/s

The records in / records out counts are written complete+partial — full-sized blocks plus any short final block. status=progress prints the last line periodically during a long copy.

Exit status

Code Meaning
0 The copy completed.
1 The copy failed — a bad operand, an I/O error, or a file that could not be opened.