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 Архівавана 17 красавіка 2013..

Antonio Diaz Diaz (распрацоўшчык GNU ddrescue) параўноўвае [3] варыянты dd для задач аднаўлення:

Стандартная ўтыліта dd ажыццяўляе лінейнае чытанне дыска, і гэта можа заняць шмат часу ці нават спаліць носьбіт без аднаўлення нечага, калі памылкі размешчаны ў пачатку цвёрдага дыску.

dd_rescue робіць тое ж самае, што і dd, толькі больш эфектыўна.

dd_rhelp — гэта складаны shell-скрыпт, які выконвае dd_rescue шмат разоў, імкнучыся стратэгічна капіраваць носьбіт, але гэта вельмі неэфектыўна.

  • dd_rhelp спачатку здабывае ўсе даступныя для чытання даныя і захоўвае іх у файл, устаўляючы нулі замест байтаў, якія немагчыма было прачытаць. Потым утыліта спрабуе паўторна прачытаць некарэктныя даныя і аднавіць гэты файл.
  • GNU ddrescue можа быць ужыта для капіравання даных наўпрост на новы дыск па неабходнасці, як і dd.

Гл. таксама

Зноскі

  1. а б Sam Chessman. How and when to use the dd command?(недаступная спасылка). CodeCoffee. Архівавана з першакрыніцы 14 лютага 2008. Праверана 19 лютага 2008.
  2. Dd - LQWiki(недаступная спасылка). LinuxQuestions.org. Архівавана з першакрыніцы 18 студзеня 2012. Праверана 19 лютага 2008.
  3. Interview With GNU DDRescue's Antonio Diaz Diaz. Blue-GNU. Архівавана з першакрыніцы 15 красавіка 2008. Праверана 6 снежня 2008.

Спасылкі

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.