dd

Поделись знанием:
Перейти к: навигация, поиск

dd (dataset definition) — программа UNIX, предназначенная как для копирования, так и для конвертации файлов. Название унаследовано от оператора DD (Dataset Definition) из языка JCL.

Поскольку в UNIX очень многие объекты (жёсткие/гибкие диски, COM/LPT-порты, оперативная память компьютера, память с кодом/данными каждого процесса) представлены в виде специальных файлов, спектр применения утилиты 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]. Есть и более «уважительное» прозвище — «disk duplicator», потому что на практике основное её применение — это копии, образы и бэкапы разделов.





Некоторые параметры

При написании статьи были использованы материалы man dd, описывающие версию dd от GNU. Версии dd на других операционных системах могут отличаться.

Базовые параметры

dd [--help] [--version] [status] [if=файл] [of=файл] [ibs=байты] [obs=байты] [bs=байты] [cbs=байты] [skip=блоки] [seek=блоки] [count=блоки] [conv={ascii, ebcdic, ibm, block, unblock, lcase, ucase, swab, noerror, notrunc, sync}]

  • status=progress — отображает статистику передачи, возможны 3 варианта 'none', 'noxfer', 'progress' GNU Coreutils 8.24+ (Ubuntu 16.04 and newer) .
  • 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,sync

Сделать копию главной загрузочной записи (MBR) первого жёсткого диска:

    dd if=/dev/hda of=bootloader.mbr bs=512 count=1

Заполнить всё свободное место в текущем разделе нулями:

    dd if=/dev/zero of=zerofill

Создать сжатый образ первого жёсткого диска со всеми разделами (рекомендуется сначала заполнить свободное место нулями для лучшего сжатия):

    dd if=/dev/sda | xz -9 > MyFuBu.ISO.XZ

Просмотреть содержимое главной загрузочной записи (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=65536

Узнать статус выполнения операции:

    killall -USR1 dd

В некоторых случаях статус выполнения просматривается командой:

    pkill -USR1 -x dd

Варианты dd, ориентированные на восстановление

Программы с открытым исходным кодом для восстановления включают [www.garloff.de/kurt/linux/ddrescue/ dd_rescue] и [www.kalysto.org/utilities/dd_rhelp/index.en.html dd_rhelp], которые работают вместе, [seed7.sourceforge.net/scrshots/savehd7.htm savehd7] и [www.gnu.org/software/ddrescue/ddrescue.html GNU ddrescue].

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

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

dd_rescue делает то же самое, что и dd, только более эффективно.

dd_rhelp — это сложный shell-скрипт, который запускает dd_rescue много раз, стараясь стратегически копировать накопитель, но это очень неэффективно.

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

См. также

Напишите отзыв о статье "Dd"

Примечания

  1. 1 2 Sam Chessman. [www.codecoffee.com/tipsforlinux/articles/036.html How and when to use the dd command?]. CodeCoffee. Проверено 19 февраля 2008. [www.webcitation.org/64qfNrOEu Архивировано из первоисточника 21 января 2012].
  2. [wiki.linuxquestions.org/wiki/Dd Dd - LQWiki]. LinuxQuestions.org. Проверено 19 февраля 2008. [www.webcitation.org/64qfOLjf6 Архивировано из первоисточника 21 января 2012].
  3. [blue-gnu.biz/content/interview_gnu_ddrescue_039_s_antonio_diaz_diaz Interview With GNU DDRescue's Antonio Diaz Diaz]. Blue-GNU. Проверено 6 декабря 2008. [web.archive.org/web/20080415135125/blue-gnu.biz/content/interview_gnu_ddrescue_039_s_antonio_diaz_diaz Архивировано из первоисточника 15 апреля 2008].

Ссылки

  • [linux.die.net/man/1/dd dd(1)] — страница справки man по пользовательским командам GNU/Linux  (англ.)
  • [rus-linux.net/lib.php?name=MyLDP/consol/dd/dd-1.html dd: Команда, которая не похожа на другие]


Отрывок, характеризующий Dd

18 и 19 ноября войска прошли еще два перехода вперед, и неприятельские аванпосты после коротких перестрелок отступали. В высших сферах армии с полдня 19 го числа началось сильное хлопотливо возбужденное движение, продолжавшееся до утра следующего дня, 20 го ноября, в который дано было столь памятное Аустерлицкое сражение.
До полудня 19 числа движение, оживленные разговоры, беготня, посылки адъютантов ограничивались одной главной квартирой императоров; после полудня того же дня движение передалось в главную квартиру Кутузова и в штабы колонных начальников. Вечером через адъютантов разнеслось это движение по всем концам и частям армии, и в ночь с 19 на 20 поднялась с ночлегов, загудела говором и заколыхалась и тронулась громадным девятиверстным холстом 80 титысячная масса союзного войска.
Сосредоточенное движение, начавшееся поутру в главной квартире императоров и давшее толчок всему дальнейшему движению, было похоже на первое движение серединного колеса больших башенных часов. Медленно двинулось одно колесо, повернулось другое, третье, и всё быстрее и быстрее пошли вертеться колеса, блоки, шестерни, начали играть куранты, выскакивать фигуры, и мерно стали подвигаться стрелки, показывая результат движения.
Как в механизме часов, так и в механизме военного дела, так же неудержимо до последнего результата раз данное движение, и так же безучастно неподвижны, за момент до передачи движения, части механизма, до которых еще не дошло дело. Свистят на осях колеса, цепляясь зубьями, шипят от быстроты вертящиеся блоки, а соседнее колесо так же спокойно и неподвижно, как будто оно сотни лет готово простоять этою неподвижностью; но пришел момент – зацепил рычаг, и, покоряясь движению, трещит, поворачиваясь, колесо и сливается в одно действие, результат и цель которого ему непонятны.
Как в часах результат сложного движения бесчисленных различных колес и блоков есть только медленное и уравномеренное движение стрелки, указывающей время, так и результатом всех сложных человеческих движений этих 1000 русских и французов – всех страстей, желаний, раскаяний, унижений, страданий, порывов гордости, страха, восторга этих людей – был только проигрыш Аустерлицкого сражения, так называемого сражения трех императоров, т. е. медленное передвижение всемирно исторической стрелки на циферблате истории человечества.
Князь Андрей был в этот день дежурным и неотлучно при главнокомандующем.
В 6 м часу вечера Кутузов приехал в главную квартиру императоров и, недолго пробыв у государя, пошел к обер гофмаршалу графу Толстому.
Болконский воспользовался этим временем, чтобы зайти к Долгорукову узнать о подробностях дела. Князь Андрей чувствовал, что Кутузов чем то расстроен и недоволен, и что им недовольны в главной квартире, и что все лица императорской главной квартиры имеют с ним тон людей, знающих что то такое, чего другие не знают; и поэтому ему хотелось поговорить с Долгоруковым.
– Ну, здравствуйте, mon cher, – сказал Долгоруков, сидевший с Билибиным за чаем. – Праздник на завтра. Что ваш старик? не в духе?
– Не скажу, чтобы был не в духе, но ему, кажется, хотелось бы, чтоб его выслушали.
– Да его слушали на военном совете и будут слушать, когда он будет говорить дело; но медлить и ждать чего то теперь, когда Бонапарт боится более всего генерального сражения, – невозможно.
– Да вы его видели? – сказал князь Андрей. – Ну, что Бонапарт? Какое впечатление он произвел на вас?
– Да, видел и убедился, что он боится генерального сражения более всего на свете, – повторил Долгоруков, видимо, дорожа этим общим выводом, сделанным им из его свидания с Наполеоном. – Ежели бы он не боялся сражения, для чего бы ему было требовать этого свидания, вести переговоры и, главное, отступать, тогда как отступление так противно всей его методе ведения войны? Поверьте мне: он боится, боится генерального сражения, его час настал. Это я вам говорю.
– Но расскажите, как он, что? – еще спросил князь Андрей.
– Он человек в сером сюртуке, очень желавший, чтобы я ему говорил «ваше величество», но, к огорчению своему, не получивший от меня никакого титула. Вот это какой человек, и больше ничего, – отвечал Долгоруков, оглядываясь с улыбкой на Билибина.
– Несмотря на мое полное уважение к старому Кутузову, – продолжал он, – хороши мы были бы все, ожидая чего то и тем давая ему случай уйти или обмануть нас, тогда как теперь он верно в наших руках. Нет, не надобно забывать Суворова и его правила: не ставить себя в положение атакованного, а атаковать самому. Поверьте, на войне энергия молодых людей часто вернее указывает путь, чем вся опытность старых кунктаторов.
– Но в какой же позиции мы атакуем его? Я был на аванпостах нынче, и нельзя решить, где он именно стоит с главными силами, – сказал князь Андрей.
Ему хотелось высказать Долгорукову свой, составленный им, план атаки.
– Ах, это совершенно всё равно, – быстро заговорил Долгоруков, вставая и раскрывая карту на столе. – Все случаи предвидены: ежели он стоит у Брюнна…
И князь Долгоруков быстро и неясно рассказал план флангового движения Вейротера.
Князь Андрей стал возражать и доказывать свой план, который мог быть одинаково хорош с планом Вейротера, но имел тот недостаток, что план Вейротера уже был одобрен. Как только князь Андрей стал доказывать невыгоды того и выгоды своего, князь Долгоруков перестал его слушать и рассеянно смотрел не на карту, а на лицо князя Андрея.
– Впрочем, у Кутузова будет нынче военный совет: вы там можете всё это высказать, – сказал Долгоруков.
– Я это и сделаю, – сказал князь Андрей, отходя от карты.
– И о чем вы заботитесь, господа? – сказал Билибин, до сих пор с веселой улыбкой слушавший их разговор и теперь, видимо, собираясь пошутить. – Будет ли завтра победа или поражение, слава русского оружия застрахована. Кроме вашего Кутузова, нет ни одного русского начальника колонн. Начальники: Неrr general Wimpfen, le comte de Langeron, le prince de Lichtenstein, le prince de Hohenloe et enfin Prsch… prsch… et ainsi de suite, comme tous les noms polonais. [Вимпфен, граф Ланжерон, князь Лихтенштейн, Гогенлое и еще Пришпршипрш, как все польские имена.]
– Taisez vous, mauvaise langue, [Удержите ваше злоязычие.] – сказал Долгоруков. – Неправда, теперь уже два русских: Милорадович и Дохтуров, и был бы 3 й, граф Аракчеев, но у него нервы слабы.
– Однако Михаил Иларионович, я думаю, вышел, – сказал князь Андрей. – Желаю счастия и успеха, господа, – прибавил он и вышел, пожав руки Долгорукову и Бибилину.
Возвращаясь домой, князь Андрей не мог удержаться, чтобы не спросить молчаливо сидевшего подле него Кутузова, о том, что он думает о завтрашнем сражении?
Кутузов строго посмотрел на своего адъютанта и, помолчав, ответил:
– Я думаю, что сражение будет проиграно, и я так сказал графу Толстому и просил его передать это государю. Что же, ты думаешь, он мне ответил? Eh, mon cher general, je me mele de riz et des et cotelettes, melez vous des affaires de la guerre. [И, любезный генерал! Я занят рисом и котлетами, а вы занимайтесь военными делами.] Да… Вот что мне отвечали!


В 10 м часу вечера Вейротер с своими планами переехал на квартиру Кутузова, где и был назначен военный совет. Все начальники колонн были потребованы к главнокомандующему, и, за исключением князя Багратиона, который отказался приехать, все явились к назначенному часу.