Англо-русский словарь сокращений — что такое DD

Выведем обозначение разделов всех устройств

Синтаксис команды dd

Полное стирание диска

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

Операции с MBR

Копируем с архивированием
Копируем по сети

Выводим текущий статус выполнения командой

Узнаем обозначение флешки в системе. Будьте внимательны так как при ошибке в название флешки в команде dd можно повредить винчестер хоста.

Выведем обозначение разделов всех устройств

и найдем среди них флеш накопитель:

sudo fdisk -u -l /dev/sd?

Так же, для определения разделов на всех устройства, можно воспользоваться командой:

sudo cat /proc/partitions

Синтаксис команды dd

dd if=/AAAA of=/BBBB bs=CCCC count=DDDD conv=noerror

Где:

  • if: (input file) указывает на источник, т.е. на то, откуда копируем. Указывается файл, который может быть как обычным файлом, так и файлом устройства.
  • of: (output file) указывает на файл назначения. То же самое, писать можем как в обычный файл, так и напрямую в устройство.
  • bs: количество байт, которые будут записаны за раз. То есть размер куска данных, которые будут прочитаны и записаны за раз. рекомендуют ставить bs= размеру кеша винчестера т.е. 8M 16M 32M
  • count: сколько кусков bs будет скопировано.
  • conv: позволяет подключать фильтрs, применимых к потоку данных. Фильтр «noerror» как раз отключает остановку работы программы, когда наткнется на ошибку чтения.

Примеры

Полное стирание диска

Чтобы на носителе ничего нельзя было восстановить — можно забить его нулями, эта команда всегда закончиться ошибкой «на носителе кончилось место»

dd if=/dev/zero of=/dev/sdX

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

dd if=/dev/cdrom of=image.iso conv=noerror

так же можно смонтировать образ в систему

mount -o loop /PathToImageFile/image.iso /mnt/FolderMount

Если что-то не получается, процесс разбивается на 2 уровня:

losetup -e /dev/loop0 /PathToImageFile/image.isomount /dev/loop0 /mnt/FolderMount

Операции с MBR

MBR расположена в первых 512 байтах жесткого диска, и состоит из таблицы разделов, загрузчика и пары доп. байт. Иногда, ее приходится бекапить, восстанавливать и т.д. Бекап выполняется так: 

dd if=/dev/sda of=mbr.img bs=512 count=1

Восстановить можно проще: 

dd if=mbr.img of=/dev/sda

Копируем с архивированием

(используя gzip) данные с флешки на винчестера.

dd if=/dev/sdX conv=sync,noerror bs=8M | gzip -c >/PathToSave/sdX.img.gz

и обратно

gunzip -c /PathToFile/sdX.img.gz | dd of=/dev/sdX conv=sync,noerror bs=8M

Копируем по сети

dd if=/dev/sdX conv=sync,noerror bs=8M | ssh -c blowfish UserName@HostName «dd of=sdX.img.gz bs=8M»

и обратно

dd if=sdX.img.gz | ssh -c blowfish UserName@HostName «dd of=/dev/sdX bs=8М»

Выводим текущий статус выполнения командой

killall -USR1 dd

dd (dataset definition) — программа UNIX , предназначенная как для копирования, так и для конвертации файлов.

HOW-TO: Команда dd и ее секреты

Название унаследовано от оператора DD (Dataset Definition) из языка JCL .

Поскольку в UNIX очень многие объекты (жёсткие/гибкие диски, COM/LPT-порты, оперативная память компьютера, память с кодом/данными каждого процесса) представлены в виде специальных файлов, спектр применения утилиты dd гораздо шире, чем кажется на первый взгляд. Регулярно возникает необходимость не просто скопировать файл или несколько файлов (для чего предназначена утилита cp ), а скопировать первые n байт файла, пропустить m байт от начала, прочитать файл с дефектного носителя, транслировать содержимое файла в ASCII , «развернуть» порядок байтов в файле ( Little-Endian vs. Big-Endian ), просто скопировать очень большой файл или все вместе взятое. Для этой цели и служит dd.

Кроме всего прочего, данная утилита позволяет скопировать регионы из файлов «сырых» устройств, например, сделать резервную копию загрузочного сектора жёсткого диска, или прочитать фиксированные блоки данных из специальных файлов, таких, как /dev/zero или /dev/random .

Название утилиты dd иногда в шутку расшифровывают, как «disk destroyer», «data destroyer» или «delete data», так как утилита позволяет производить низкоуровневые операции на жёстких дисках — при малейшей ошибке (такой, как реверс параметров if и of) можно потерять часть данных на диске . Есть и более «уважительное» прозвище — «disk duplicator», потому что на практике основное её применение — это копии, образы и бэкапы разделов.

Для того, чтобы сделать резервную копию (файл-образ) винчестера для последующего восстановления вовсе не нужны коммерческие, проприетарные утилиты — есть старый, как мир, dd.

Всё, что нужно сделать — просто правильно его использовать. Утилита dd есть в любом дистрибутиве, и даже в Knoppix, который можно использовать для восстановления данных.

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

Но, чтобы точно не было никаких проблем стоит загрузиться с любого LiveCD диска с Линукс / BSD. После этого залогиниваемся под root-аккаунтом. Убеждаемся, написав в консоли df / mount, что ни один из тех разделов, что мы собираемся копировать, не примонтирован на запись. Решаем, куда будем архивировать данные: это может быть другой раздел на винчестере, внешний жёсткий диск или по сети.

  • /dev/hda это винчестер, который архивируем,
  • /dev/sda1 — это раздел внешнего винчестера или другая партиция, на которую архивируем,
  • hda.img.gz — получившийся сжатый файл-образ.

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

dd if=/dev/hda of=/dev/sda — полная копия жесткого диска, с одного на другой.

dd if=/dev/hdx of=/path/to/image — копия диска в какую-то папку.

dd if=/dev/hda | gzip -c > /mnt/sda1/hda.img.gz — архивирование с одновременным сжатием, результат чего записывается в файл. hda.img.gz

dd if=/dev/hda conv=sync,noerror of=/dev/sda — параметр "conv=sync,noerror" указывает dd не читать блок, если при этом происходит ошибка, но записать в архивируемый файл-образ данные, чтобы размер блока не менялся.

dd if=/dev/hda bs=64K of=/dev/sda — параметр "bs=64K" это размер блока в килобайтах — использование такого большого размера блока ускоряет процесс копирования.

Параметр bs можно сделать ещё больше, а именно равным размеру кеша копируемого диска (например bs=8m), это сильно ускорит весь процесс.

dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.img.gz — все параметры можно использовать одновременно.

dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c | ssh -c blowfish user@hostname "dd of=hda.img.gz bs=64k" — копирование удаленно по сети, с использованием SSH.

Изучаем команды Linux: dd

Архивный файл появится в домашней директории пользователя user на машине hostname. Если сеть маленькая, лучше вместо hostname использовать просто ip-адрес. Опция -c blowfish заставляет SSH выбрать алгоритм шифрования Blowfish, который быстрее остальных шифрует данные.

Восстановление данных из резервной копии

gunzip -c /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K — восстановление с внешнего жестокого диска или другого раздела. Все параметры были разъяснены ранее.

dd if=hda.img.gz | ssh -c blowfish user@deadhost "gunzip -c | dd of=/dev/hda1 bs=64k" — сетевой вариант с восстановлением из файл-образа. Следует помнить, что в данном случае не следует использовать опцию в опциях dd — если вы всё-таки включите эту опцию, в большинстве случаев это исказит записываемые данные (это заставляет dd не дожидаться данных, приходящих по сети, если целый блок недоступен).


Заметки по теме:

Команда dd Linux

Запустил бэкап диска с передачей данных на другой сервер:

dd if=/dev/sda | gzip -3 — | ssh root@1.1.1.1 dd of=/storage/image.gz

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

Открываем еще одну консоль и в ней выполняем команду:

pkill -USR1 dd

Возвращаемся в консоль, где запущен команда и видим примерно следующий результат:

46581824+0 records in 46581823+0 records out 23849893376 bytes (24 GB) copied, 650.728 s, 36.7 MB/s 52076416+0 records in 52076415+0 records out 26663124480 bytes (27 GB) copied, 736.246 s, 36.2 MB/s 232366273+0 records in 232366272+0 records out 118971531264 bytes (119 GB) copied, 1193.34 s, 99.7 MB/s 234441648+0 records in 234441648+0 records out 120034123776 bytes (120 GB) copied, 1198.1 s, 100 MB/s

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

watch -n 10 pkill -USR1 dd

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *