dd dd (dataset definition) — праграма UNIX, прызначаная як для капіравання, так і для канвертацыі файлаў. Назва ўспадкавана ад аператара DD (Dataset Definition) з мовы JCL
Паколькі ў UNIX шматлікія аб’екты з’яўляюцца файламі, спектр ужывання dd значна шырэй, чым падаецца на першы погляд. Стала ўзнікае неабходнасць не проста скапіраваць файл ці некалькі файлаў (для чаго прызначана ўтыліта cp), а скапіраваць першыя n байтаў файла, прапусціць m байтаў ад пачатку, прачытаць файл з дэфектыўнага носьбіта, трансляваць змест файла ў ASCII, «павярнуць» парадак байтаў у файле (Little-Endian vs. Big-Endian),[1] проста скапіраваць вельмі вялікі файл ці ўсё разам узятае. Для гэтай мэты і належыць dd.
Акрамя ўсяго іншага, дадзеная ўтыліта дазваляе скапіраваць рэгіёны з файлаў «сырых» прылад, напрыклад зрабіць рэзервовую копію загрузачнага сектара цвёрдага дыска, ці прачытаць фіксаваныя блокі даных з спецыяльных файлаў, такіх як /dev/zero ці /dev/random.[2]
Назву ўтыліты dd іншы раз у жарт расшыфроўваюць як «disk destroyer», «data destroyer» альбо «delete data», таму што ўтыліта дазваляе праводзіць нізкаўзроўневыя аперацыі на цвёрдых дысках — пры найменшай памылцы, такой як рэверс параметраў if i of, можна страціць частку даных на дыску (ці нават усе даныя)[1].
Пры напісанні артыкула былі ўжыты матэрыялы man dd, якія апісваюць версію dd ад GNU. Версіі dd на іншых аперацыйных сістэмах могуць адрознівацца.
dd [–help] [–version] [if=файл] [of=файл] [ibs=байты] [obs=байты] [bs=байты] [cbs=байты] [skip=блокі] [seek=блокі] [count=блокі] [conv={ascii, ebcdic, ibm, block, unblock, lcase, ucase, swab, noerror, notrunc, sync}]
Стварыць вобраз CD/DVD, ужываючы вялікі памер блока. Ігнараваць памылкі:
dd if=/dev/cdrom of=backup.iso bs=65536 conv=noerror
Запісаць ISO-вобраз «image.iso» на прыладу sdb разам з яго загрузачным сектарам і фарматаваннем падзела ў файлавую сістэму вобраза (як правіла, ISO 9660 ці UDF):
dd if=image.iso of=/dev/sdb
Скапіраваць файл foo ў файл bar:
dd if=foo of=bar
Скапіраваць файл foo ў файл bar, прапусціўшы першыя 10 КБ з файла foo:
dd if=foo of=bar bs=1k skip=10
Парэзаць 10-мегабайтны файл foo на 2 па 5 МБ:
dd if=foo of=bar.0 bs=1M count=5
dd if=foo of=bar.1 bs=1M skip=5
Склеіць чатыры 100-мегабайтных файлы ў адзін:
dd if=SMILE.001 of=SMILE bs=1M seek=0
dd if=SMILE.002 of=SMILE bs=1M seek=100
dd if=SMILE.003 of=SMILE bs=1M seek=200
dd if=SMILE.004 of=SMILE bs=1M seek=300
а можна i так:
dd if=SMILE.001 > SMILE
dd if=SMILE.002 >> SMILE
dd if=SMILE.003 >> SMILE
dd if=SMILE.004 >> SMILE
альбо (для зборкі файла з вялікай колькасці кавалкаў):
for i in \{1..4\}; do
dd if=SMILE.00$i >> SMILE
done
Прыклады вышэй паказваюць магчымасці dd на практыцы, звычайна ўжываецца cat
cat SMILE.00\{1,2,3,4\} > SMILE
Вывесці на экран (у /dev/stdout) першыя 256 байтаў файла foo:
dd if=foo of=/dev/stdout bs=128 count=2
ці:
dd if=foo bs=128 count=2
Папярэдняя каманда годная толькі для прагляду тэкставага файла. Змест бінарнага файла варта глядзець так:
dd if=foo bs=1 count=10 2>/dev/null | hexdump
Скапіраваць адзін падзел цвёрдага дыска на другі цвёрды дыск, ігнаруючы памылкі ўводу-вываду:
dd if=/dev/sda1 of=/dev/sdb2 bs=4096 conv=noerror
Зрабіць копію галоўнага загрузачнага запісу (MBR) першага цвёрдага дыска:
dd if=/dev/hda of=bootloader.mbr bs=512 count=1
Перагледзець змест галоўнага загрузачнага запісу (MBR) першага цвёрдага дыска:
dd if=/dev/sda bs=512 count=1 | hexdump -C
Капіраваць усё, акрамя меткі, з дыска на магнітную стужку:
(dd bs=4k skip=1 count=0 && dd bs=512k) <$disk >$tape
Капіраваць усё, не перазапісваючы метку, з магнітнай стужкі на дыск:
(dd bs=4k seek=1 count=0 && dd bs=512k) <$tape >$disk
Знішчыць змест прылады /dev/sdg, запоўніўшы яго «нулямі» з /dev/zero:
dd if=/dev/zero of=/dev/sdg bs=65535
Даведацца статус выканання аперацыі:
killall -USR1 dd
Праграмы з адкрытым крынічным кодам для ўзнаўлення ўключаюць dd_rescue i dd_rhelp, што працуюць разам, savehd7 i GNU ddrescue.
Antonio Diaz Diaz (распрацоўшчык GNU ddrescue) параўноўвае [3] варыянты dd для задач аднаўлення:
Стандартная ўтыліта dd ажыццяўляе лінейнае чытанне дыска, і гэта можа заняць шмат часу ці нават спаліць носьбіт без аднаўлення нечага, калі памылкі размешчаны ў пачатку цвёрдага дыску.
dd_rescue робіць тое ж самае, што і dd, толькі больш эфектыўна.
dd_rhelp — гэта складаны shell-скрыпт, якi выконвае dd_rescue шмат разоў, імкнучыся стратэгічна капіраваць носьбіт, але гэта вельмі неэфектыўна.
[dd(1)](http://linux.die.net/man/1/dd)
— старонка даведкі man па карыстальніцкіх камандах GNU/Linux (англ.)