dd
— одна из самых важных команд в Linux, чаще всего используемая для резервного копирования жестких дисков и разделов. При правильном использовании dd может стать мощным инструментом для записи данных из одного раздела в другой и выполнения различных задач с файлами. Здесь мы покажем вам, как эффективно использовать команду dd.
Также читайте: 5 дистрибутивов Arch Linux, которые проще установить и использовать
История ДД
Команда была первоначально разработана в AT&T Bell Laboratories в 1970-х годах ученым-компьютерщиком Кеном Томпсоном. Он был разработан для систем на базе Unix и получил имя, которое было выбрано в качестве ссылки на оператор, найденный в языке управления заданиями IBM, который назывался «DD». Можно отметить, что синтаксис команды очень похож н
Contents
- 1 История ДД
- 2 Основные операнды
- 3 Создание образа диска
- 4 Сохранение образа диска в раздел
- 5 Создание сжатого образа диска
- 6 Указание размера блока
- 7 Очистка жесткого диска
- 8 Создание загрузочного USB-накопителя
- 9 Клонирование определенных разделов с помощью dd
- 10 Сохранение содержимого компакт-диска с помощью dd
- 11 Часто задаваемые вопросы
История ДД
равления заданиями.Команда изначально была разработана как утилита для преобразования ASCII в EBCDIC и наоборот. Впервые он был интегрирован с версией Unix в 1974 году, с выпуском 5-го издания операционной системы.
В сообществе Unix dd в шутку называли «разрушителем дисков» из-за его способности уничтожать данные на жестких дисках при неправильном использовании.
Читайте также: Как зашифровать ваши файлы в облаке с помощью Rclone
Основные операнды
Теперь, когда вы немного знаете об истории этой команды и ее разрушительных способностях при неправильном использовании, пришло время узнать, как воспользоваться всем, что она предлагает пользователям различных дистрибутивов Linux.
Сначала просмотрите руководство, используя флаг --help
:
dd --help
У команды наиболее часто используются два операнда. Это if
и of
, что означает «входной файл» и «выходной файл» соответственно. Операнд if
используется для представления исходного местоположения, а операнд of
используется для представления местоположения, в котором вы собираетесь сохранить данные из входного местоположения.
dd if=<input file> of=<output file>
Наиболее распространенными местами хранения и вывода данных являются жесткие диски, разделы и образы дисков.
Перед использованием команды может быть полезно использовать утилиту fdisk
для просмотра разделов вашей системы. Это легко сделать с помощью флага -l
команды:
sudoОсновные операнды
l
Читайте также: 4 способа клонировать весь жесткий диск в Linux
В этом случае if
используется для обозначения диска «/dev/sda», а of
обозначает диск «/dev/sdb», где хранятся данные. из «/dev/sda» будет сохранено в:
dd if=/dev/sda of=/dev/sdb
Создание образа диска
Один из лучших вариантов использования этой команды — создание образов дисков в формате файла «.img». Это чрезвычайно полезно для резервного копирования данных в вашей системе Linux и, вероятно, это самый быстрый и простой способ резервного копирования всего жесткого диска.
В этом случае логика в основном та же самая: операнд if
представляет диск «/dev/sda», а операнд of
представляет диск «.img». ” файл, в котором данные с жесткого диска будут сохранены в:
dd if=/dev/sda of=/tmp/image.img
Читайте также: Полное руководство по командам Apt и Apt-Get
Сохранение образа диска в раздел
Создать образ диска с помощью этой команды довольно просто, но не менее проста и обратная версия этого процесса.
В этом сценарии наш файл образа диска действует как входной файл, а наш новый раздел — как выходной файл. Утилита сохраняет данные из образа диска в раздел «/dev/sdb»:
dd if=/tmp/image.img of=/dev/sdb
Читайте также: Как использовать команду ps в Linux для завершения процесса
Создание сжатого образа диска
Если вы создаете образ полноразмерного жесткого диска, вы можете себе представить, что размер файла конечного образа диска, скорее всего, будет довольно большим. По этой причине в утилите dd есть функция создания сжатых образов дисков.
Сжатый образ диска можно создать с помощью команды канала |
. В этом случае он используется для получения содержимого входного файла и выполнения команды gzip
с флагом -c
, при этом содерж
Создание образа диска
». файл:dd if=/dev/sda | gzip -c > /tmp/image.gz
Читайте также: Как использовать cURL для передачи данных из командной строки и многого другого
Указание размера блока
Вы также можете поиграть со скоростью работы команды dd. Это можно сделать с помощью операнда bs
, который используется для представления размера блока. Размер блока представляет собой количество байтов, копируемых в выходной файл за один экземпляр. Он представлен кратными 1024 байтам, а значение по умолчанию установлено равным 512 байтам. Чем больше размер блока, тем быстрее данные будут сохранены в выходной файл.
В данном случае мы устанавливаем размер блока 2048:
dd if=/dev/sda of=/tmp/image.img bs=2048
Размер блока также можно указать в килобайтах:
dd iСохранение образа диска в раздел
da of=/tmp/image.img bs=2K
Читайте также: Как использовать команду lsof в Linux для вывода списка открытых файлов
Очистка жесткого диска
dd также можно использовать для очистки жесткого диска. Это достигается путем чтения нулей или случайных символов из «/dev/zero» или «/dev/urandom» и сохранения их на жестком диске/разделе, при этом данные на нем перезаписываются. Это чрезвычайно полезно, если вы хотите убедиться, что ваши данные невозможно будет легко получить после того, как вы продали или иным образом избавились от жесткого диска.
Перезапись жесткого диска нулями:
dd if=/dev/zero of=/dev/sdb
Вы также можете перезаписать устройство, используя случайные символы:
dd if=/dev/urandom of=/dev/sdb
Читайте также: Как запускать команды Bash в фоновом режиме в Linux
Создание загрузочного USB-накопителя
Создать загрузочный USB-флешки с использованием файлов «.iso» с помощью команды очень просто:
dd if=os.iso of=<USB drive location>
Клонирование определенных разделов с помощью dd
Еще одно блестящее применение dd
— клонирование активных разделов в вашей системе Linux. В отличие от файла IMG, клонирование позволяет создать точную копию определенного раздела и немедленно использовать ее. Это может быть полезно, если у вас многодисковая система и вы хотите создать резервные разделы для своей системы.
Чтобы клонировать раздел из «/dev/sda4» в «/dev/sdd1».
Указание размера блока
>/dev/sda4 of=/dev/sdb1 conv=noerror,sync
Параметр conv
позволяет вам включить дополнительные параметры для изменения поведения dd. Это может быть как простое преобразование имени файла в верхний регистр, так и что-то более сложное, например изменение свойства блока. В данном случае я использую noerror
и sync
:
- Опция «noerror» указывает dd продолжать копирование файла устройства, даже если он сообщает об ошибках устройства. Это может быть полезно, если устройство, на котором находится ваш раздел, уже неисправно, поскольку «noerror» гарантирует, что dd скопирует все восстанавливаемые данные в этот раздел.
- Опция «sync» указывает dd дополнять каждый входящий блок данных в буфер копирования. Это означает, что dd будет следить за тем, чтобы каждый бит данных, которые он может скопировать, был абсолютно одинаковым между источником и местом назначения. Это необходимо для обеспечения целостности данных клонируемого раздела.
Читайте также: Как использовать команду lp в Linux для печати файлов из терминала
Сохранение содержимого компакт-диска с помощью dd
Также можно использовать dd в качестве инструмента для дампа содержимого диска. Подобно файлу IMG, вы можете сделать это, используя диск в качестве входных данных и расширение.ISO в качестве выходных данных. Рассмотрим следующий пример:
dd if=/dev/cdrom of=/tmp/dumОчистка жесткого диска
,sync
Эта команда сообщит dd загрузить устройство CD-ROM и скопировать его содержимое в файл ISO.
После этого вы можете использовать команду file
, чтобы проверить, является ли файл дампа изображением ИСО 9660 :
file /tmp/dump.iso
Запись дампа ISO на компакт-диск
Далее вы можете использовать dd для создания дубликатов только что созданного ISO-файла. Для этого вам нужно вставить чистый диск в привод и использовать «/dev/cdrom» в качестве выходного файла dd. После этого вы можете запустить следующую команду, чтобы правильно записать ISO-файл на диск:
dd if=/tmp/image.iso of=/dev/cdrom obs=32k seek=0
Эта команда не пытается использовать какие-либо обходы ошибок или проверки целостности. Вместо этого он устанавливает две опции, специфичные для записи на компакт-диски:
- Опция «obs» задает размер блоков, которые dd будет записывать на диск. В этом случае команда использует 32 килобайта в качестве базового значения для передачи оптических носителей.
- С другой стороны, опция «seek» указывает dd установить начало передачи на определенный блок данных. Для правильной передачи на CD-ROM важно установить значение 0, чтобы dd немедленно записывал в первый сектор диска.
Создание загрузочного USB-накопителя
ntist.ru/2021/09/29/8-poleznyh-i-interesnyh-podskazok-bash/" title="8 полезных и интересных команд Bash">8 полезных и интересных команд Bash
Часто задаваемые вопросы
Можно ли увидеть ход операции dd?
Да! Невероятно легко наблюдать за ходом операции dd. Для этого все, что вам нужно сделать, это включить параметр status
в конец команды dd:
dd if=/dev/sda4 of=/dev/sdd1 conv=noerror,sync status=progress
Опция «прогресс» указывает dd печатать блоки, которые он в данный момент копирует, на стандартный вывод, что позволяет
Клонирование определенных разделов с помощью dd
мо параметра «прогресс», параметр статуса также принимает два дополнительных значения:- Noxfer : значение «noxfer» похоже на «прогресс», но оно не выводит общую информацию о передаче в конце команды. Это может быть полезно, если вы используете команды dd как часть большого канала UNIX.
- Нет : значение «нет» указывает dd не выводить никакой информации, кроме ошибок, во время работы. Это полезно, если вы выполняете запланированные задачи dd, такие как создание резервных файлов IMG для активных в данный момент разделов.
Можно ли всегда устанавливать большой размер блока для ускорения передачи данных?
Нет. Хотя установка большого размера блока, безусловно, ускорит скорость передачи данных dd, это не гарантирует правильную инициализацию устройства, на которое вы записываете. Например, установка большого размера блока для оптических носителей, таких как CD-ROM или DVD-ROM, может привести к тому, что диски станут нечитаемыми при воспроизведении на проигрывателе дисков.
Хорошее практическое правило — использовать блоки большого размера только при выгрузке с таких носителей, как диски и флэш-накопители. Кроме того, рекомендуется устанавливать максимальный размер блока только на уровне 2048 килобайт. Это гарантирует, что вы сможете поместить обратно содержимое диска на CD или DVD.
Я пытался создать загрузочный USB-накопитель, но он не загрузился. Дд не работает?
Нет! Наиболее вероятная причина, по которой он не загрузился, заключается в том, что файл, скопированный dd на USB-накопитель, не является загрузочным. Например, запись установочного компакт-диска на USB-накопитель не установит правильные флаги, чтобы сделать его загрузочным.
Один из способов убедиться, что он является загрузочным, — проверить его свойства с помощью программы file
. Например:
file /Downloads/ubuntu-21.10.iso
Оттуда вам нужно будет просмотреть свойства, которые выводятся в стандартном выводе. Загрузочный файл должен представлять собой либо образ диска, либо гибридный файл ISO.
Изображение предоставлено: Unsplash