dd to narzędzie do kopiowania i konwersji danych na poziomie bloków. Zamiast operować na plikach jak cp, czyta surowe bajty ze źródła (if) i zapisuje je do celu (of) porcjami o zadanym rozmiarze. Dzięki temu kopiuje nie tylko zwykłe pliki, ale też całe dyski, partycje czy obrazy ISO. Bywa nazywane „disk destroyer”, bo jeden literówka w of= potrafi nadpisać niewłaściwy dysk bez pytania o zgodę.
Składnia i najważniejsze opcje
Podstawowa forma to dd if=ŹRÓDŁO of=CEL [bs=...] [count=...]. Argumenty podaje się jako opcja=wartość, bez myślników.
if=— plik wejściowy (input file); domyślnie standardowe wejście.of=— plik wyjściowy (output file); domyślnie standardowe wyjście.bs=— rozmiar bloku odczytu i zapisu naraz (np.bs=4M); większy blok zwykle przyspiesza kopiowanie.count=— ile bloków skopiować; przydatne, gdy nie chcesz całego źródła.skip=— pomiń N bloków na wejściu przed startem.seek=— przeskocz N bloków na wyjściu przed zapisem.conv=— konwersje, np.noerror(nie przerywaj na błędzie odczytu),sync(dopełnij bloki zerami),fsync(wymuś zapis na dysk przed końcem).status=progress— pokazuje postęp na bieżąco (GNU coreutils; na macOS/BSD tej opcji nie ma).
Przykłady użycia
dd if=/dev/sda of=/dev/sdb bs=64M status=progress— klonuje cały dysksdanasdbblokami po 64 MB.dd if=debian.iso of=/dev/sdc bs=4M conv=fsync status=progress— wypala obraz ISO na pendrive i wymusza zrzut bufora na nośnik.dd if=/dev/zero of=test.img bs=1M count=100— tworzy pusty plik o rozmiarze 100 MB wypełniony zerami.dd if=/dev/sda of=mbr.bak bs=512 count=1— robi kopię pierwszego sektora dysku (MBR) do pliku.dd if=uszkodzony.iso of=ratunek.iso conv=noerror,sync bs=4M— próbuje odzyskać dane z uszkodzonego obrazu, pomijając błędne sektory.
Częste błędy i pułapki
Najgroźniejsza pomyłka to zamiana if z of albo wskazanie złego urządzenia w of= — dd nie pyta o potwierdzenie i bezpowrotnie nadpisze cel. Zawsze sprawdź nazwy dysków przez lsblk przed startem. Pamiętaj też o różnicy: kopiuj urządzenie blokowe (/dev/sdb), a nie partycję (/dev/sdb1), jeśli chcesz cały dysk. Na Linuksie podejrzysz postęp przez status=progress, ale na macOS i BSD tej opcji brak — tam wyślij sygnał SIGINFO skrótem Ctrl+T, żeby zobaczyć ile już przeleciało. Zbyt mały bs (np. domyślne 512 bajtów) potrafi drastycznie spowolnić kopiowanie dużych dysków, więc ustaw rozsądny rozmiar bloku. I uważaj na jednostki: bs=1M to 1 MiB, a bs=1MB to 1 000 000 bajtów.
Powiązane komendy: cp, lsblk, sync, pv, cat, mkfs, fdisk.