dd (dataset definition) — праграма UNIX, прызначаная як для капіравання, так і для канвертацыі файлаў. Назва ўспадкавана ад аператара DD (Dataset Definition) з мовы JCL.
Уводзіны Паколькі ў UNIX шматлікія аб’екты з’яўляюцца файламі, спектр ужывання dd значна шырэй, чым падаецца на першы погляд. Стала ўзнікае неабходнасць не проста скапіраваць файл ці некалькі файлаў (для чаго прызначана ўтыліта cp), а скапіраваць першыя n байтаў файла, прапусціць m байтаў ад пачатку, прачытаць файл з дэфектыўнага носьбіта, трансляваць змест файла ў ASCII, «павярнуць» парадак байтаў у файле (Little-Endian vs. Big-Endian), проста скапіраваць вельмі вялікі файл ці ўсё разам узятае. Для гэтай мэты і належыць dd.
Акрамя ўсяго іншага, дадзеная ўтыліта дазваляе скапіраваць рэгіёны з файлаў «сырых» прылад, напрыклад зрабіць рэзервовую копію загрузачнага сектара цвёрдага дыска, ці прачытаць фіксаваныя блокі даных з спецыяльных файлаў, такіх як /dev/zero ці /dev/random.
Назву ўтыліты dd іншы раз у жарт расшыфроўваюць як «disk destroyer», «data destroyer» альбо «delete data», таму што ўтыліта дазваляе праводзіць нізкаўзроўневыя аперацыі на цвёрдых дысках — пры найменшай памылцы, такой як рэверс параметраў if і of, можна страціць частку даных на дыску (ці нават усе даныя).
Некаторыя параметры Пры напісанні артыкула былі ўжыты матэрыялы 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}]
if=файл — чытае даныя з файла замест стандартнага ўводу. of=файл — піша даныя ў файл замест стандартнага вываду. bs=n — памер блока. ibs=nn и obs=nn — задае, колькі байтаў трэба счытваць ці запісваць за раз. count=n — колькі блокаў скапіраваць. seek=n — колькі блокаў прапусціць ад пачатку ў выніковым файле. skip=n — колькі блокаў ад пачатку файла прапусціць перад пачаткам капіравання. conv=фільтр,фільтр — ужыць фільтры канвертацыі. ascii — сканвертаваць у ASCII з EBCDIC… ebcdic — …і наадварот. block — выраўноўванне блокаў. lcase — пераўтварыць да ніжняга рэгістра. ucase — пераўтварыць да верхняга рэгістра. swab — мяняць месцамі пары байтаў. noerror — ігнараваць памылкі ўводу-вываду.
Прыклады ўжывання Работа з CD/DVD-дыскамі і вобразамі Стварыць вобраз 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
а можна і так:
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, арыентаваныя на аднаўленне Праграмы з адкрытым крынічным кодам для ўзнаўлення ўключаюць dd_rescue і dd_rhelp, што працуюць разам, savehd7 і GNU ddrescue .
Antonio Diaz Diaz (распрацоўшчык GNU ddrescue) параўноўвае варыянты dd для задач аднаўлення:
Стандартная ўтыліта dd ажыццяўляе лінейнае чытанне дыска, і гэта можа заняць шмат часу ці нават спаліць носьбіт без аднаўлення нечага, калі памылкі размешчаны ў пачатку цвёрдага дыску.
dd_rescue робіць тое ж самае, што і dd, толькі больш эфектыўна.
dd_rhelp — гэта складаны shell-скрыпт, які выконвае dd_rescue шмат разоў, імкнучыся стратэгічна капіраваць носьбіт, але гэта вельмі неэфектыўна.
dd_rhelp спачатку здабывае ўсе даступныя для чытання даныя і захоўвае іх у файл, устаўляючы нулі замест байтаў, якія немагчыма было прачытаць. Потым утыліта спрабуе паўторна прачытаць некарэктныя даныя і аднавіць гэты файл. GNU ddrescue можа быць ужыта для капіравання даных наўпрост на новы дыск па неабходнасці, як і dd.
Гл. таксама cp cat GNU Unix dcfldd
Спасылкі
dd: Каманда, якая не падобна на іншыя Рэалізацыя dd для Windows
Катэгорыя:Сістэмнае праграмнае забеспячэнне Катэгорыя:Аптычныя дыскі Катэгорыя:Утыліты UNIX