Jump to content

дд (Unix)

дд
Оригинальный автор(ы) Кен Томпсон
( AT&T Bell Laboratories )
Разработчик(и) Различные с открытым исходным кодом и коммерческие разработчики разработчики
Первоначальный выпуск июнь 1974 г .; 50 лет назад ( 1974-06 )
Репозиторий основные утилиты: git .саванна .gnu .org /cgit /coreutils .git /
Написано в План 9: С
Операционная система Unix , Unix-подобные , Plan 9 , Inferno , Windows
Платформа Кросс-платформенный
Тип Команда
Лицензия основные утилиты : GPLv3+
План 9: МОЯ лицензия

dd — это утилита командной строки для Unix , Plan 9 , Inferno и Unix-подобных операционных систем и более поздних версий, основной целью которой является преобразование и копирование файлов. [1] В Unix драйверы устройств для оборудования (например, жестких дисков ) и специальные файлы устройств (например, /dev/zero и /dev/random ) появляются в файловой системе так же, как обычные файлы; dd также может читать и/или записывать в/из этих файлов, при условии, что эта функция реализована в соответствующем драйвере. Как результат, dd можно использовать для таких задач, как резервное копирование загрузочного сектора жесткого диска и получение фиксированного объема случайных данных. Программа dd также может выполнять преобразования данных по мере их копирования, включая замену порядка байтов и преобразование в текстовые кодировки ASCII и EBCDIC и обратно . [2]

В 1974 году Команда dd появилась как часть версии 5 Unix . По словам Денниса Ритчи , это название является намеком на оператор DD, найденный в IBM языке управления заданиями (JCL). [3] [4] в котором это аббревиатура от «Определение данных». [5] [6] По словам Дугласа Макилроя , dd «изначально предназначался для преобразования файлов между ASCII , прямым порядком байтов, миром компьютеров DEC , и EBCDIC , прямым порядком байтов, блокированным миром IBM »; таким образом, объясняя культурный контекст его синтаксиса. [7] Эрик С. Рэймонд считает, что «дизайн интерфейса явно был шуткой», поскольку синтаксис команды больше напоминает оператор JCL, чем другие команды Unix. [4]

В 1987 году Команда dd указана в X/Open Portability Guide, выпуск 2 от 1987 года. Она унаследована стандартом IEEE Std 1003.1-2008 ( POSIX ), который является частью единой спецификации UNIX . [8]

В 1990 году Дэвид Маккензи анонсировал GNU fileutils (теперь часть coreutils ), который включает в себя dd команда; [9] его написали Пол Рубин, Дэвид Маккензи и Стюарт Кемп. [10] С 1991 года его сопровождающим является Джим Мейеринг. [11]

В 1995 году второе издание Plan 9 было выпущено ; его Командный интерфейс dd был переработан для использования традиционного стиля параметров командной строки вместо стиля операторов JCL. [12]

По крайней мере, с 1999 г. [13] , собственный Win32 порт для Microsoft Windows под UnxUtils . [14]

dd иногда с юмором называют «Уничтожителем дисков» из-за его способности стирать данные с диска, включая опечатки. [15]

Использование

[ редактировать ]

командной строки Синтаксис dd отличается от многих других программ Unix. Он использует синтаксис option=value для параметров командной строки, а не для более стандартных -option value или --option=value форматы. По умолчанию, dd читает со стандартного ввода и записывает на стандартный вывод , но это можно изменить с помощью команды if (входной файл) и опций (выходного файла). [8]

Некоторые особенности dd будет зависеть от возможностей компьютерной системы, таких как возможность dd реализовать опцию прямого доступа к памяти. Отправка сигнала SIGINFO (или сигнала USR1 в Linux) работающему Процесс dd заставляет его один раз распечатать статистику ввода-вывода в стандартную ошибку , а затем продолжить копирование. dd может читать стандартный ввод с клавиатуры. Когда конец файла (EOF), достигается дд выйдет. Сигналы и EOF определяются программным обеспечением. Например, инструменты Unix, перенесенные в Windows, различаются в зависимости от EOF: Cygwin использует Ctrl+ D (обычный Unix EOF) и MKS Toolkit использует Ctrl+ Z (обычный Windows EOF).

Нестандартизированные части вызова dd различаются в зависимости от реализации.

Выходные сообщения

[ редактировать ]

По завершении, dd выводит в поток stderr статистику передачи данных. Формат стандартизирован в POSIX. [8] : СТДЕРР На странице руководства GNU dd этот формат не описан, но в руководствах BSD он описан.

Каждая из строк «Входящие записи» и «Выходящие записи» показывает количество переданных полных блоков + количество частичных блоков, например, потому, что физический носитель закончился до того, как был прочитан полный блок, или из-за физической ошибки, не позволившей прочитать полный блок.

Размер блока

[ редактировать ]

Блок — это единица измерения количества байтов , которые читаются, записываются или преобразуются за один раз. Параметры командной строки могут указывать другой размер блока для ввода/чтения ( ibs ) по сравнению с выводом/записью ( obs ), хотя размер блока ( bs ) опция переопределит оба ibs и обс . Значение по умолчанию для размеров входного и выходного блока составляет 512 байт (традиционный размер блока дисков и размер «блока», установленный POSIX). опция количества для копирования измеряется в блоках, как и пропустить счет для чтения и искать счет для письма. На операции преобразования также влияет «размер блока преобразования» ( КБС ). [8] : ОПЕРАНДЫ

Значение, указанное для параметров размера блока, интерпретируется как десятичное (по основанию 10) целое число байтов. Он также может содержать суффиксы, указывающие, что размер блока представляет собой целое число единиц, превышающих байты. POSIX указывает только суффиксы. б (блоки) по 512 и k ( кибибайты ) для 1024. [8] : ОПЕРАНДЫ Реализация различается в зависимости от поддерживаемых дополнительных суффиксов: (Бесплатно) BSD использует строчные буквы. м ( мебибайты ), g ( гибибайты ) и так далее для тебибайтов , эксбибайтов , пебибайтов , зебибайтов и йобибайтов , [16] в то время как GNU использует М и G для тех же единиц, с КБ , МБ и ГБ используется для их аналогов единиц СИ ( килобайтов ). [10] Например, для GNU дд , bs=16M указывает на размер блока 16 мегабайт (16777216 байт) и bs=3kB указывает 3000 байт.

Кроме того, некоторые реализации понимают x в качестве оператора умножения как для размера блока, так и для параметров количества. Например, bs=2x80x18b интерпретируется как 2 × 80 × 18 × 512 = 1 474 560 байт , точный размер дискеты емкостью 1 440 КиБ . Это требуется в POSIX. [8] : ОПЕРАНДЫ Для реализаций, которые не поддерживают эту функцию, оболочки POSIX арифметический синтаксис bs=$((2*80*18))b можно использовать.

Размер блока влияет на производительность копирования команды дд . Выполнение большого количества небольших операций чтения или записи часто выполняется медленнее, чем выполнение меньшего количества крупных операций. Использование больших блоков требует больше оперативной памяти и может затруднить восстановление ошибок. Когда dd используется с устройствами с переменным размером блока, такими как ленточные накопители или сети, размер блока может определять размер записи на ленте или размер пакета , в зависимости от сетевого протокола используемого .

Использование

[ редактировать ]

The Команда dd может использоваться для различных целей. Для команд простого копирования он, как правило, медленнее, чем альтернативы, специфичные для предметной области, но он выделяется своей уникальной способностью «перезаписывать или усекать файл в любой точке или искать в файле», довольно низкоуровневый интерфейс для Unix. файловый API. [17]

В приведенных ниже примерах предполагается использование GNU dd, в основном в аргументе размера блока. Чтобы сделать их переносимыми, замените, например, bs=64M с арифметическим выражением оболочки bs=$((64*1024*1024)) или bs=$((64 << 20)) (написано эквивалентно с небольшим сдвигом ).

Передача данных

[ редактировать ]

dd может дублировать данные в файлах, устройствах, разделах и томах. Данные могут вводиться или выводиться в любой из них; но есть важные различия, касающиеся вывода при переходе к разделу. Также во время передачи данные можно изменить с помощью варианты конв , соответствующие среде. (Однако для этого дд медленнее, чем кот .) [17]

Формы передачи данных дд
blocks=$(isosize -d 2048 /dev/sr0)
dd if=/dev/sr0 of=isoimage.iso bs=2048 count=$blocks status=progress
Создает ISO образ диска с диска CD-ROM , DVD или Blu-ray . [18]
dd if=system.img of=/dev/sdc bs=64M conv=noerror
Восстанавливает жесткий диск (или, например, SD-карту) из ранее созданного образа.
dd if=/dev/sdb2 of=partition.image bs=64M conv=noerror
Создайте образ раздела sdb2, используя размер блока 64 МБ.
dd if=/dev/sda2 of=/dev/sdb2 bs=64M conv=noerror
Клонирует один раздел в другой.
dd if=/dev/ad0 of=/dev/ad1 bs=64M conv=noerror
Клонирует жесткий диск «ad0» в «ad1».

The Опция noerror означает продолжение работы в случае ошибки, в то время как опция Опция синхронизации приводит к дополнению выходных блоков.

Модификация на месте

[ редактировать ]

dd может изменять данные на месте. Например, это перезаписывает первые 512 байт файла нулевыми байтами:

dd if=/dev/zero of=path/to/file bs=512 count=1 conv=notrunc

The Опция преобразования notrunc означает, что выходной файл не обрезается — то есть, если выходной файл уже существует, просто замените указанные байты и оставьте остальную часть выходного файла в покое. Без этой опции dd создаст выходной файл длиной 512 байт.

Резервное копирование и восстановление основной загрузочной записи

[ редактировать ]

Приведенный выше пример также можно использовать для резервного копирования и восстановления любой области устройства в файл, например основную загрузочную запись .

Чтобы дублировать первые два сектора дискеты:

dd if=/dev/fd0 of=MBRboot.img bs=512 count=2

Очистка диска

[ редактировать ]

По соображениям безопасности иногда необходимо выполнить очистку диска выброшенного устройства. Этого можно добиться путем «переноса данных» из специальных файлов Unix.

  • Чтобы записать нули на диск, используйте dd if=/dev/zero of=/dev/sda bs=16M.
  • Чтобы записать случайные данные на диск, используйте dd if=/dev/urandom of=/dev/sda bs=16M.

примером модификации данных По сравнению с приведенным выше : Опция преобразования notrunc не требуется, поскольку она не имеет эффекта, когда Выходной файл dd является блочным устройством. [19]

The Опция bs=16M позволяет dd читать и записывать по 16 мегабайт за раз. Для современных систем даже больший размер блока может быть быстрее. Обратите внимание, что заполнение диска случайными данными может занять больше времени, чем обнуление диска, поскольку случайные данные должны создаваться процессором, а создание нулей происходит очень быстро. На современных жестких дисках обнуление диска приведет к тому, что большую часть содержащихся на нем данных невозможно будет восстановить. [20] Однако при использовании других типов накопителей, таких как флэш-память, большую часть данных все равно можно восстановить с помощью остаточной намагниченности .

Современные жесткие диски содержат команду безопасного стирания, предназначенную для окончательного и безопасного стирания всех доступных и недоступных частей диска. Это также может работать для некоторых твердотельных накопителей (флэш-накопителей). По состоянию на 2017 год он не работает ни на USB-накопителях , ни на флэш-памяти Secure Digital . [ нужна ссылка ] Если это возможно, это быстрее, чем использование dd, и более безопасно. [ нужна ссылка ] На машинах Linux он доступен через hdparm. команду --security-erase-enhanced опция.

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

Восстановление данных

[ редактировать ]

Восстановление данных предполагает чтение с диска, некоторые части которого потенциально недоступны. dd хорошо подходит для этой работы благодаря гибкому пропуску ( seek) и другие низкоуровневые настройки. Ваниль ddОднако его неудобно использовать, поскольку пользователю приходится читать сообщения об ошибках и вручную рассчитывать области, которые можно прочитать. Размер одного блока также ограничивает степень детализации восстановления, поскольку приходится идти на компромисс: либо использовать маленький блок для восстановления большего количества данных, либо использовать большой блок для увеличения скорости.

Программа переменного тока под названием dd_rescue[21] был написан в октябре 1999 года. В нем упразднена функциональность преобразования ddи поддерживает два размера блоков для решения этой дилеммы. Если чтение с использованием большого размера завершается неудачно, оно возвращается к меньшему размеру, чтобы собрать как можно больше данных. Он также может бежать назад. В 2003 году dd_rhelp написан скрипт для автоматизации процесса использования dd_rescue, самостоятельно отслеживая, какие области были прочитаны. [22]

В 2004 году GNU написала отдельную утилиту, не связанную с dd, называется ddrescue . Он имеет более сложный алгоритм динамического размера блока и отслеживает то, что было прочитано внутри. Авторы обоих dd_rescue и dd_rhelp считают, что это превосходит их реализацию. [23] Чтобы отличить новую программу GNU от старого сценария, для GNU-сценариев иногда используются альтернативные имена. ddrescue, включая addrescue (имя на сайтах freecode.com и Freshmeat.net), gddrescue ( имя пакета Debian ) и gnu_ddrescue ( openSUSE имя пакета ).

Еще одна программа с открытым исходным кодом под названием savehd7 использует сложный алгоритм, но также требует установки собственного интерпретатора языка программирования .

Сравнительный анализ производительности привода

[ редактировать ]

Чтобы провести тест производительности накопителя и проанализировать производительность последовательного (и обычно однопоточного) чтения и записи системы для блоков размером 1024 байта:

  • Напишите производительность: dd if=/dev/zero bs=1024 count=1000000 of=1GB_file_to_write
  • Читать производительность: dd if=1GB_file_to_read of=/dev/null bs=1024

Генерация файла со случайными данными

[ редактировать ]

Чтобы создать файл из 100 случайных байтов с помощью драйвера случайных чисел ядра:

dd if=/dev/urandom of=myrandom bs=100 count=1

Преобразование файла в верхний регистр

[ редактировать ]

Чтобы преобразовать файл в верхний регистр:

dd if=filename of=filename1 conv=ucase,notrunc

Индикатор прогресса

[ редактировать ]

Будучи программой, в основном созданной как фильтр, dd обычно не отображает какой-либо индикации прогресса. Это можно решить, отправив Сигнал USR1 работающему GNU дд ( процесс INFO о системах BSD), в результате чего dd печать текущего количества переданных блоков.

Следующая однострочная строка приводит к непрерывному выводу прогресса каждые 10 секунд до завершения передачи, когда dd-pid заменяется идентификатором процесса дд :

while kill -USR1 dd-pid ; do sleep 10 ; done

Новые версии GNU дд поддержу опция status=progress , которая включает периодическую печать статистики передачи в stderr. [24]

dcfldd — это ответвление GNU. dd США — это расширенная версия, разработанная Ником Харбором, который в то время работал в лаборатории компьютерной криминалистики Министерства обороны . [25] [26] [27] По сравнению с дд , dcfldd позволяет использовать более одного выходного файла, поддерживает одновременные вычисления нескольких контрольных сумм, обеспечивает режим проверки соответствия файлов и может отображать процент выполнения операции. По состоянию на февраль 2024 года последней версией была версия 1.9.1 от апреля 2023 года. [28]

dc3dd — еще один форк GNU. дд США из Центра киберпреступности Министерства обороны (DC3). Его можно рассматривать как продолжение dcfldd с заявленной целью обновления при каждом обновлении исходной версии GNU. По состоянию на июнь 2023 г. , последний выпуск был 7.3.1 от апреля 2023 года. [29]

См. также

[ редактировать ]
  1. ^ Остин Групп. «Стандарт POSIX: вызов dd» . Архивировано из оригинала 10 марта 2010 г. Проверено 29 сентября 2016 г.
  2. ^ Шахматная фигура, Сэм. «Как и когда использовать команду dd?» . КодКофе. Архивировано из оригинала 14 февраля 2008 года . Проверено 19 февраля 2008 г.
  3. ^ Ричи, Деннис (17 февраля 2004 г.). «Re: происхождение команды UNIX dd» . Группа новостей : alt.folklore.computers . Usenet:   [электронная почта защищена] . Архивировано из оригинала 22 января 2011 года . Проверено 10 января 2016 г. dd всегда назывался в честь карт JCL dd.
  4. ^ Перейти обратно: а б Рэймонд, Эрик С. «дд» . Архивировано из оригинала 13 декабря 2018 г. Проверено 19 февраля 2008 г.
  5. ^ Страбл, Джордж (1969). Программирование на языке ассемблера: IBM System/360 . Ридинг, Массачусетс, паб Addison-Wesley. Компания р. 123 .
  6. ^ Шейн, Барри (22 апреля 1990 г.). «Re: этимология команды Unix «dd»» . Группа новостей : alt.folklore.computers . Usenet:   [электронная почта защищена] . Архивировано из оригинала 24 октября 2023 г. Проверено 14 июля 2016 г.
  7. ^ Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). CSTR. Лаборатории Белла. 139.
  8. ^ Перейти обратно: а б с д и ж dd – Справочник по оболочке и утилитам, Единая спецификация UNIX , версия 4 от Open Group.
  9. ^ «Файловые утилиты GNU версии 1.0» . groups.google.com . Архивировано из оригинала 28 апреля 2023 г. Проверено 28 апреля 2023 г.
  10. ^ Перейти обратно: а б dd(1) Linux пользователя Руководство – Пользовательские команды
  11. ^ «Кто GNU» . Архивировано из оригинала 28 апреля 2023 г. Проверено 28 апреля 2023 г.
  12. ^ dd(1) Plan 9 , том 1 Руководство программиста
  13. ^ «Собственные порты Win32 некоторых утилит GNU» . 15 августа 2000 г. Архивировано из оригинала 15 августа 2000 г.
  14. ^ «Собственные порты Win32 некоторых утилит GNU» . unxutils.sourceforge.net . Архивировано из оригинала 9 февраля 2006 г. Проверено 23 февраля 2022 г.
  15. ^ «Как использовать dd в Linux, не разрушая диск» . Opensource.com . 05.07.2018. Архивировано из оригинала 11 октября 2020 г. Проверено 11 октября 2020 г.
  16. ^ dd(1) FreeBSD по основным командам Руководство
  17. ^ Перейти обратно: а б Жиль (2011). «Клонирование — ДД против кота — ДД по-прежнему актуален в наши дни?» . Обмен стеками Unix и Linux . Архивировано из оригинала 24 октября 2023 г. Проверено 24 апреля 2020 г.
  18. ^ «Создание ISO-образа с CD, DVD или BD» . АрчВики . Архивировано из оригинала 18 апреля 2022 года . Проверено 18 апреля 2022 г.
  19. ^ «Linux – Зачем использовать conv=notrunc при клонировании диска с помощью dd?» . Переполнение стека. 11 декабря 2013 г. Архивировано из оригинала 24 марта 2014 г. Проверено 24 марта 2014 г.
  20. ^ Райт, Крейг С.; Клейман, Дэйв; С., Шьяам Сундхар Р. (2008). «Перезапись данных на жестком диске: великий спор об удалении». Ин Секар, Р.; Пуджари, Арун К. (ред.). Безопасность информационных систем, 4-я Международная конференция, ICISS 2008, Хайдарабад, Индия, 16-20 декабря 2008 г. Материалы . Конспекты лекций по информатике. Том. 5352. Спрингер. стр. 243–257. дои : 10.1007/978-3-540-89862-7_21 .
  21. ^ "dd_rescue" . garloff.de . Архивировано из оригинала 16 мая 2001 г. Проверено 10 ноября 2006 г.
  22. ^ ЛАБ Валентин (19 сентября 2011 г.). «Авторский репозиторий dd_rhelp» . Архивировано из оригинала 16 мая 2008 года . Проверено 13 мая 2008 г. Важное примечание: какое-то время dd_rhelp был единственным инструментом (AFAIK), который выполнял такую ​​работу, но через несколько лет это уже не так: Антонио Диас написал идеальную замену моему инструменту: GNU 'ddrescue'.
  23. ^ «Ddrescue — Проект GNU — Фонд свободного программного обеспечения (FSF)» . gnu.org . Архивировано из оригинала 2 июля 2021 г. Проверено 22 июля 2016 г.
  24. ^ «GNU Coreutils: вызов dd» . Операционная система GNU и движение за свободное программное обеспечение . Архивировано из оригинала 22 августа 2019 г. Проверено 26 августа 2019 г.
  25. ^ «DCFLDD в Source Forge» . Исходная кузница. Архивировано из оригинала 2 августа 2013 г. Проверено 17 августа 2013 г.
  26. ^ Джереми Фэйрклот, Крис Херли (2007). Набор инструментов с открытым исходным кодом для тестера на проникновение . Сингресс. стр. 470–472. ISBN  9780080556079 .
  27. ^ Джек Уайлс, Энтони Рейес (2011). Лучшая книга периода о киберпреступности и цифровой криминалистике . Сингресс. стр. 408–411. ISBN  9780080556086 .
  28. ^ «dcfldd: расширенная версия dd для криминалистики и безопасности» . Гитхаб. Архивировано из оригинала 31 октября 2020 г. Проверено 19 ноября 2020 г.
  29. ^ "dc3dd" . СоурсФордж . 25 апреля 2023 г. Архивировано из оригинала 25 февраля 2020 г. Проверено 24 апреля 2020 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: c3bec635d3b5feed6650c3e7f4cad287__1722269100
URL1:https://arc.ask3.ru/arc/aa/c3/87/c3bec635d3b5feed6650c3e7f4cad287.html
Заголовок, (Title) документа по адресу, URL1:
dd (Unix) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)