Как использовать команду dd в Linux

Dd Guide 00 Featured Image

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

Содержание

  • История dd
  • Основные операнды
  • Создание образа диска
  • Сохранение образа диска на раздел
  • Создание сжатого образа диска
  • Указание размера блока
  • Стирание жесткого диска
  • Создание загрузочного USB-накопителя
  • Клонирование конкретных разделов с помощью dd
  • Сброс содержимого CD с помощью dd
  • Запись ISO-дампа на CD
  • Часто задаваемые вопросы

Также читайте: 5 дистрибутивов Arch Linux, которые проще установить и использовать

История dd

Команда была изначально разработана в лабораториях AT&T Bell в 1970-х годах компьютерным ученым по имени Кен Томпсон. Она была разработана для систем на основе Unix и получила название, которое было выбрано как ссылка на утверждение, найденное в языке управления заданиями IBM, который назывался “DD”. Можно отметить, что синтаксис команды близок к утверждению в языке управления заданиями.

Команда изначально была задумана как утилита для преобразования ASCII в EBCDIC и наоборот. Она была впервые интегрирована с версией Unix в 1974 году с выпуском 5-го издания операционной системы.

dd шутливо называли “уничтожителем дисков” в сообществе Unix из-за его способности уничтожать данные на жестких дисках при неправильном использовании.

Также читайте: Как зашифровать ваши файлы в облаке с помощью Rclone

Основные операнды

Теперь, когда вы знаете немного о предыстории команды и ее разрушительных способностях при неправильном использовании, пришло время узнать, как воспользоваться всем, что она предлагает пользователям различных дистрибутивов Linux.

Во-первых, посмотрите руководство, используя флаг --help:

dd --help

Dd Guide 01 Dd Print Help

Существует два операнда для команды, которые чаще всего используются. Это if и of, которые означают “входной файл” и “выходной файл” соответственно. Операнд if используется для обозначения исходного местоположения, в то время как операнд of используется для обозначения местоположения, куда вы собираетесь сохранить данные из входного местоположения.

dd if=<входной файл> of=<выходной файл>

Наиболее распространенные исходные и выходные местоположения включают жесткие диски, разделы и образы дисков.

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

sudo fdisk -l

Dd Guide 02 List Fdisk Partitions

Также читайте: 4 способа клонировать весь жесткий диск в Linux

В этом случае if используется для обозначения диска “ /dev/sda”, а of обозначает диск “ /dev/sdb”, куда данные из “ /dev/sda” будут сохранены:

dd if=/dev/sda of=/dev/sdb

Dd Guide 03 Duplicate Device

Создание образа диска

Одним из лучших случаев использования команды является создание образов диска в формате файла “.img”. Это чрезвычайно полезно для резервного копирования данных на вашей системе на базе Linux и, вероятно, является самым быстрым и простым способом резервного копирования всего жесткого диска.

Логика здесь в основном такая же, с операндом if, представляющим диск “ /dev/sda”, и операндом of, представляющим файл “.img”, куда данные с жесткого диска будут сохранены:

dd if=/dev/sda of=/tmp/image.img

Dd Guide 04 Dump Partition To Img

Также читайте: Полное руководство по командам Apt и Apt-Get

Сохранение образа диска на раздел

Создание образа диска с помощью команды довольно просто, но так же просто и обратная версия этого процесса.

В этом сценарии наш файл образа диска выступает в качестве входного файла, а наш новый раздел выступает в качестве выходного файла. Утилита сохраняет данные из нашего образа диска на наш раздел “ /dev/sdb”:

dd if=/tmp/image.img of=/dev/sdb

Dd Guide 05 Write Img To Device

Также читайте: Как использовать команду ps в Linux для завершения процесса

Создание сжатого образа диска

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

Сжатый образ диска можно создать, используя команду pipe |. В этом случае она используется для того, чтобы взять содержимое входного файла и выполнить команду gzip с флагом -c, упаковывая содержимое в файл “.gz”:

dd if=/dev/sda | gzip -c > /tmp/image.gz

Dd Guide 06 Create Compressed Dump

Также читайте: Как использовать cURL для передачи данных через командную строку и многое другое

Указание размера блока

Вы также можете поэкспериментировать со скоростью работы команды dd. Это можно сделать с помощью операнда bs, который используется для обозначения размера блока. Размер блока представляет собой количество байтов, которые dd копирует в выходной файл за один раз. Он представлен в кратных 1024 байтам, а значение по умолчанию установлено на 512 байт. Чем больше размер блока, тем быстрее данные будут сохраняться в выходной файл.

В этом случае мы устанавливаем размер блока на 2048:

dd if=/dev/sda of=/tmp/image.img bs=2048

Размер блока также можно указать в килобайтах:

dd if=/dev/sda of=/tmp/image.img bs=2K

Dd Guide 07 Img Dump Modify Blocksize

Также читайте: Как использовать команду lsof в Linux для отображения открытых файлов

Стирание жесткого диска

dd также можно использовать для стирания вашего жесткого диска. Это достигается путем чтения нулей или случайных символов из “ /dev/zero” или “ /dev/urandom” и сохранения их на жестком диске/разделе, что перезаписывает данные на нем. Это чрезвычайно полезно, когда вы хотите убедиться, что ваши данные не могут быть легко восстановлены после того, как вы продали или иным образом утилизировали свой жесткий диск.

Перезапись жесткого диска нулями:

dd if=/dev/zero of=/dev/sdb

Dd Guide 08 Zeroing Disk

Вы также можете перезаписать устройство, используя случайные символы:

dd if=/dev/urandom of=/dev/sdb

Dd Guide 09 Randomized Disk

Также читайте: Как запускать команды Bash в фоновом режиме в Linux

Создание загрузочного USB-накопителя

Создание загрузочных USB-накопителей с использованием файлов “.iso” с помощью команды просто:

dd if=os.iso of=<местоположение USB-накопителя>

Dd Guide 10 Write Image To Device

Клонирование конкретных разделов с помощью dd

Еще одно замечательное применение для dd — клонирование активных разделов на вашей системе Linux. В отличие от файла IMG, клонирование позволяет создать точную копию конкретного раздела и использовать ее немедленно. Это может быть полезно, если у вас есть многодисковая установка, и вы хотите создать резервные разделы для вашей системы.

Чтобы клонировать раздел с “ /dev/sda4” на “ /dev/sdd1”.

dd if=/dev/sda4 of=/dev/sdb1 conv=noerror,sync

Параметр conv позволяет вам включать дополнительные параметры для изменения поведения dd. Это может быть так же просто, как преобразование имени файла в верхний регистр или что-то сложное, например изменение свойства блока. В этом случае я использую noerror и sync:

  • Опция “noerror” говорит dd продолжать копирование через файл устройства, даже если он сообщает об ошибках устройства. Это может быть полезно, если устройство, на котором находится ваш раздел, уже неисправно, потому что “noerror” гарантирует, что dd скопирует все восстанавливаемые данные в этом разделе.
  • Опция “sync” говорит dd дополнить каждый входящий блок данных до буфера копирования. Это означает, что dd убедится, что каждый бит данных, который он может скопировать, точно такой же между источником и назначением. Это необходимо для обеспечения целостности данных раздела, который вы клонируете.

Dd Guide 11 Strict Clone Partition

Также читайте: Как использовать команду lp в Linux для печати файлов из терминала

Сброс содержимого CD с помощью dd

Также возможно использовать dd в качестве инструмента для сброса содержимого диска. Аналогично файлу IMG, вы можете сделать это, используя дисковод в качестве входного устройства и расширение .ISO в качестве выходного. Рассмотрим следующий пример:

dd if=/dev/cdrom of=/tmp/dump.iso conv=noerror,sync

Эта команда скажет dd загрузить устройство CD-ROM и скопировать его содержимое в файл ISO.

Dd Guide 12 Dump Cd Disc

После завершения вы можете использовать команду file, чтобы проверить, является ли сброшенный файл образом ISO 9660:

file /tmp/dump.iso

Запись ISO-дампа на CD

Затем вы можете использовать dd для создания дубликатов ISO-файла, который вы только что создали. Для этого вам нужно вставить пустой диск в ваш привод и использовать “ /dev/cdrom” в качестве выходного файла dd. С этим вы можете выполнить следующую команду, чтобы правильно записать ISO-файл на диск:

dd if=/tmp/image.iso of=/dev/cdrom obs=32k seek=0

Эта команда не пытается использовать обход ошибок или проверки целостности. Вместо этого она устанавливает два параметра, которые специфичны для записи на CD-ROM:

  • Опция “obs” устанавливает размер блоков, которые dd собирается записать на диск. В этом случае команда использует 32 килобайта в качестве базового значения для передачи оптических носителей.
  • С другой стороны, опция “seek” говорит dd установить начало передачи на определенный блок данных. Чтобы правильно передать данные на CD-ROM, важно установить это значение на 0, чтобы dd немедленно записал в первый сектор диска.

Dd Guide 13 Burn Cd Disk

Также читайте: 8 полезных и интересных приглашений Bash

Часто задаваемые вопросы

Можно ли увидеть прогресс операции dd?

Да! Очень легко посмотреть на прогресс операции dd. Для этого вам просто нужно включить параметр status в конце вашей команды dd:

dd if=/dev/sda4 of=/dev/sdd1 conv=noerror,sync status=progress

Опция “progress” говорит dd выводить блоки, которые он в настоящее время копирует, на стандартный вывод, что эффективно позволяет вам следить за прогрессом команды. Кроме опции “progress”, параметр status также принимает два дополнительных значения:

  • Noxfer: Значение “noxfer” похоже на “progress”, но не выводит общую информацию о передаче в конце команды. Это может быть полезно, если вы используете команды dd как часть большого UNIX-конвейера.
  • None: Значение “none” говорит dd не выводить никакой информации, кроме ошибок, во время выполнения. Это полезно, если вы запускаете запланированные задачи dd, такие как создание резервных IMG-файлов для активных разделов.

Можно ли всегда устанавливать высокий размер блока для ускорения передачи?

Нет. Хотя установка высокого размера блока определенно ускорит скорость передачи dd, это не гарантирует, что устройство, на которое вы записываете, инициализируется должным образом. Например, установка высокого размера блока для оптических носителей, таких как CD-ROM или DVD-ROM, может привести к тому, что диски будут нечитаемыми при воспроизведении на проигрывателе дисков.

Хорошее правило — использовать большие размеры блоков только при сбросе с носителей, таких как диски и флеш-накопители. Кроме того, также хорошей практикой является установка максимального размера блока на 2048 килобайт. Это гарантирует, что вы все еще сможете вернуть содержимое диска на CD или DVD.

Я пытался создать загрузочный USB-накопитель, но он не загрузился. dd не работает?

Нет! Наиболее вероятная причина, по которой он не загрузился, заключается в том, что файл, который dd скопировал на USB-накопитель, не является загрузочным файлом. Например, запись установщика CD на USB-накопитель не установит правильные флаги, чтобы сделать его загрузочным.

Один из способов убедиться, что он загрузочный, — это проверить его свойства через программу file. Например:

file /Downloads/ubuntu-21.10.iso

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

Кредит изображения: Unsplash