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 і 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}]
- 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) параўноўвае [3] варыянты dd для задач аднаўлення:
Стандартная ўтыліта dd ажыццяўляе лінейнае чытанне дыска, і гэта можа заняць шмат часу ці нават спаліць носьбіт без аднаўлення нечага, калі памылкі размешчаны ў пачатку цвёрдага дыску.
dd_rescue робіць тое ж самае, што і dd, толькі больш эфектыўна.
dd_rhelp — гэта складаны shell-скрыпт, які выконвае dd_rescue шмат разоў, імкнучыся стратэгічна капіраваць носьбіт, але гэта вельмі неэфектыўна.
- dd_rhelp спачатку здабывае ўсе даступныя для чытання даныя і захоўвае іх у файл, устаўляючы нулі замест байтаў, якія немагчыма было прачытаць. Потым утыліта спрабуе паўторна прачытаць некарэктныя даныя і аднавіць гэты файл.
- GNU ddrescue можа быць ужыта для капіравання даных наўпрост на новы дыск па неабходнасці, як і dd.
Гл. таксама
[правіць | правіць зыходнік]Зноскі
- ↑ а б Sam Chessman. How and when to use the dd command?(недаступная спасылка). CodeCoffee. Архівавана з першакрыніцы 14 лютага 2008. Праверана 19 лютага 2008.
- ↑ Dd - LQWiki(недаступная спасылка). LinuxQuestions.org. Архівавана з першакрыніцы 18 студзеня 2012. Праверана 19 лютага 2008.
- ↑ Interview With GNU DDRescue's Antonio Diaz Diaz . Blue-GNU. Архівавана з першакрыніцы 15 красавіка 2008. Праверана 6 снежня 2008.
Спасылкі
[правіць | правіць зыходнік]dd(1)
— старонка даведкі man па карыстальніцкіх камандах GNU/Linux (англ.)- dd: Каманда, якая не падобна на іншыя
- Рэалізацыя dd для Windows