dd

Что делает команда dd в Linux

Команда dd в Linux — это мощный инструмент для низкоуровневого копирования и преобразования данных. Она работает с байтами напрямую, что позволяет использовать её для создания образов дисков, клонирования разделов, восстановления данных и тестирования скорости устройств хранения.

В отличие от обычных команд вроде cp или rsync, команда dd в Linux может читать и записывать данные прямо на устройства, минуя файловую систему. Это делает её особенно полезной для системных администраторов, DevOps-инженеров и специалистов по резервному копированию.

Основной синтаксис:

Bash
dd if=<входной_файл> of=<выходной_файл> [параметры]

Где:

  • if (input file) — источник данных;
  • of (output file) — место назначения;
  • параметры позволяют управлять размером блоков, количеством данных, форматом вывода и т.д.

1. Основные параметры команды dd в Linux

Чтобы эффективно использовать команду dd в Linux, важно знать её ключевые параметры. Они позволяют точно контролировать процесс копирования и предотвращать потерю данных.

1.1. if и of

Это два главных параметра.

  • if= — путь к источнику данных, например, диск, раздел или файл.
  • of= — путь к целевому файлу или устройству.

Пример копирования содержимого флешки в ISO-образ:

Bash
sudo dd if=/dev/sdb of=/home/user/usb_backup.iso bs=4M status=progress

Этот пример создаёт точную копию всего содержимого устройства /dev/sdb в виде файла usb_backup.iso.

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

1.2. bs (block size)

Параметр bs задаёт размер блока чтения и записи.
Например:

Bash
dd if=/dev/zero of=test.img bs=1M count=100

Команда создаёт файл test.img размером 100 МБ, заполненный нулями.

Больший размер блока (например, 4M или 8M) ускоряет процесс копирования, но увеличивает использование оперативной памяти.
Меньший размер блока может быть полезен при работе с медленными устройствами или при тестировании.

1.3. count

Параметр count определяет, сколько блоков нужно скопировать.

Bash
dd if=/dev/zero of=test.img bs=1M count=10

В этом примере копируются только 10 блоков по 1 МБ, создавая файл размером 10 МБ.
Без параметра count команда dd в Linux копирует весь входной поток до его завершения.

1.4. skip и seek

Параметры skip и seek позволяют пропускать блоки при чтении и записи.

Пример пропуска первых 100 МБ при копировании:

Bash
dd if=/dev/sda of=backup.img bs=1M skip=100

Пример записи с отступом 200 МБ на целевом устройстве:

Bash
dd if=image.img of=/dev/sdb bs=1M seek=200

Эти параметры удобны для частичного восстановления данных или обновления части образа диска.

1.5. status

Параметр status=progress отображает ход выполнения операции в реальном времени.

Bash
dd if=/dev/sda of=/dev/sdb bs=4M status=progress

Без него команда dd в Linux по умолчанию не выводит ничего до завершения копирования, что может быть неудобно при больших объёмах данных.

1.6. conv

Параметр conv используется для изменения способа обработки данных.
Наиболее распространённые значения:

  • noerror — продолжить копирование даже при ошибках чтения;
  • sync — выравнивать блоки, добавляя нули, если блок неполный;
  • fdatasync — синхронизировать данные перед завершением, чтобы убедиться в записи на диск.

Пример:

Bash
dd if=/dev/sda of=/dev/sdb bs=4M conv=noerror,sync status=progress

Так можно клонировать диск с повреждёнными секторами, не останавливая процесс при ошибках чтения.

2. Практическое применение команды dd в Linux

2.1. Создание резервной копии диска

Чтобы создать полный бэкап диска в образ:

Bash
sudo dd if=/dev/sda of=/mnt/backup/disk.img bs=4M status=progress

После этого можно восстановить систему, просто поменяв if и of:

Bash
sudo dd if=/mnt/backup/disk.img of=/dev/sda bs=4M status=progress

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

2.2. Создание загрузочной флешки

Команда dd в Linux часто используется для записи ISO-образов на USB-носители:

Bash
sudo dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress
sync

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

2.3. Тестирование скорости диска

С помощью команды dd в Linux можно измерить скорость записи и чтения:

Тест записи:

Bash
dd if=/dev/zero of=testfile bs=1G count=1 oflag=dsync

Тест чтения:

Bash
dd if=testfile of=/dev/null bs=1G count=1

Результаты покажут скорость операций с диском в мегабайтах в секунду.
Так можно оценить производительность SSD, HDD или флеш-накопителя.

2.4. Безопасное удаление данных

Чтобы безопасно стереть диск, заполнив его нулями:

Bash
sudo dd if=/dev/zero of=/dev/sdb bs=1M status=progress

Для более надёжного удаления можно использовать случайные данные:

Bash
sudo dd if=/dev/urandom of=/dev/sdb bs=1M status=progress

Этот метод затрудняет восстановление информации с помощью программ анализа.

3. Дополнительные возможности команды dd в Linux

3.1. Создание загрузочного MBR

Bash
dd if=/dev/sda of=mbr_backup.bin bs=512 count=1

Эта команда сохраняет первые 512 байт диска — главный загрузочный сектор (MBR).
Чтобы восстановить MBR:

Bash
dd if=mbr_backup.bin of=/dev/sda bs=512 count=1

3.2. Конвертация и обработка данных

Команда dd в Linux может использоваться для преобразования форматов и обработки данных. Например, преобразование текста в верхний регистр:

Bash
dd if=text.txt of=output.txt conv=ucase

Хотя для подобных задач чаще применяют tr или awk, dd остаётся полезным при необходимости комбинировать операции копирования и преобразования.

4. Полезные советы и меры предосторожности

  • Совет: перед использованием команды всегда проверяйте устройства с помощью lsblk или fdisk -l, чтобы не перезаписать нужный диск.
  • Не используйте sudo dd без полного понимания пути назначения (of=). Ошибка может привести к потере данных.
  • При работе с большими объёмами данных добавляйте параметр status=progress — это упростит контроль процесса.

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