Использование команды dd

Команда dd (Dataset Definition) - простой, полезный и удивительно простой в использовании инструмент; С помощью этого инструмента вы можете делать то же самое на устройствах: дисках и разделах, как с коммерческими программами, такими как Norton Ghost, в Windows или бесплатными программами, такими как CloneZilla, в Linux, с помощью только короткой командной строки.

Базовый синтаксис:

Самый простой синтаксис для использования команды dd будет следующим:

sudo dd if=origen of=destino

где если означает "входной файл = входной файл«, То есть то, что вы хотите скопировать и средств "выходной файл = выходной файл«, То есть файл назначения (куда будут копироваться данные);происхождение и Местом назначения могут быть устройства (устройство чтения компакт-дисков или DVD-дисков, жесткий диск, дискета, флешка, раздел и т. Д.), Файл резервной копии или образ диска и т. Д., Но не папки или подпапки.

Для беспрепятственного использования этой команды в первую очередь всегда нужно четко понимать, какие разделы / жесткие диски вызываются в Linux (например, / dev / sda1; / dev происходит от device = device на английском языке). чтобы узнать исходный и целевой диск / раздел, то, что мы можем легко узнать с помощью команды sudo fdisk -lo с какой-нибудь программой графического раздела, например gparted. Всю информацию о команде dd можно получить с помощью команд man dd и info dd,

Эту команду следует использовать с осторожностью и всегда проверять порядок и имя дисков / разделов, потому что как только диск клонируется, он стирает его в мгновение ока.

Синтаксис с командой pv: использование команды dd с предыдущим синтаксисом имеет небольшой недостаток, поскольку это очень зарезервированная команда - она ​​не дает информации - потому что, когда она выполняется, приглашение терминала остается неподвижным, поэтому мы не знаем что происходит и сколько времени осталось до его завершения. Это незначительное неудобство можно решить, добавив команду pv, (*), которая действует как оконечный конвейер, измеряющий данные, проходящие через него, к синтаксису команды dd, так что теперь синтаксис будет следующим:

dd if=origen |pv|dd of=destino

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

(alf) - (~) └──┤ dd if = / devmmcblk0p1 | pv | dd of = / dev / mmcblk0p2 1,630 ГБ 0:21:30 [1,12 МБ / с] [

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

(alf) - (~) └──┤ dd if = / devmmcblk0p1 | pv | dd of = / dev / mmcblk0p2 10530816 + 0 прочитанных записей <=> 10530816 + 0 записанных записей 5391777792 байта (5.4 ГБ) скопировано, 3873,48 с, 1,4 МБ / с 5,02 ГБ 1:04:33 [1,33 МБ / с] [<=> 10530816 + 0 записей прочитано <=> 10530816 + 0 записано записано 5391777792 байта (5.4 ГБ) скопировано, 3873,48, 1,4 с, XNUMX МБ / s (alf) - (~) └──┤

(*) Перед выполнением любой командной строки с этим вторым синтаксисом убедитесь, что в системе установлен пакет pv, или установите его, если его у нас нет: и то, и другое с помощью Synaptic.

Давайте посмотрим на некоторые практические примеры и параметры этой команды (в ее версии с трюком, описанным выше с помощью команды pv):

А) О жестких дисках и разделах:

= Клонировать жесткий диск:

Таким образом мы клонируем жесткий диск в hdb. (Диски IDE):

sudo dd if=/dev/hda |pv|dd of=/dev/hdb bs=1M

С этим мы бы клонировали sda-диск в sdb. (Диски SATA):

sudo dd if=/dev/sda |pv|dd of=/dev/sdb bs=1M

С опцией bs = 1M достигается, что и чтение, и запись выполняются блоками по 1 мегабайту (меньше, это будет медленнее, но безопаснее, а при большем количестве данных мы рискуем потерять данные по пути).

Имейте в виду, что таким образом диск записывается «как есть», MBR, таблица разделов, пустое пространство и т. Д., Поэтому вы можете записывать только на диск того же или большего размера.

= Записать только первый раздел (hda1) исходного диска на целевой диск (hdb):

sudo dd if=/dev/hda1 |pv|dd of=/dev/hdb bs=1M

= Записать весь диск (hda) в первый раздел (hdb1) целевого диска:

sudo dd if=/dev/hda |pv|dd of=/dev/hdb1 bs=1M

= Создать образ - может быть bin или iso - с жесткого диска (hda) в каталоге / home:

sudo dd if=/dev/hda |pv|dd of=/home/hda.bin

= Полностью стереть информацию с диска: для этого заполните диск случайными символами пять раз. На диске не останется и следа информации:

for n in {1..5}; do dd if=/dev/urandom |pv|dd of=/dev/hda bs=8b conv=notrunc;

= Стереть любой раздел и весь диск с любого устройства:

sudo dd if=/dev/zero |pv|dd of=/dev/sdx (Полное стирание диска)

sudo dd if=/dev/zero |pv|dd of=/dev/sdxa (Очистка раздела диска)

где: x - диск, который нужно стереть, a - раздел, который нужно стереть

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

Б) На CD / DVD

= Создать / смонтировать образ .iso с компакт-диска (или DVD)

Чтобы создать образ .iso компакт-диска в каталоге / home:

sudo dd if=/dev/cdrom |pv|dd of=/home/imagendeCD.iso

Чтобы смонтировать образ .iso с компакт-диска:

sudo mount -o loop imagedeCD.iso /mnt/home

= Восстановить поцарапанный DVD (это не восстанавливает весь DVD, в данном случае только читаемые сектора). Также подходит для неисправных жестких дисков:

sudo dd if=/dev/cdrom |pv|dd of=/home/dvd_recuperado.iso conv=noerror,sync

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

В) О MBR и VBS:

= Копировать / восстановить основную загрузочную запись (MBR):

Чтобы скопировать MBR:

sudo dd if=/dev/hda |pv|dd of=mbr count=1 bs=512

Чтобы восстановить MBR:

sudo dd if=mbr |pv|dd of=/dev/hda

= Очистите нашу MBR и таблицу разделов:

sudo dd if=/dev/zero |pv|dd of=/dev/hda bs=512 count=1

= Очищает MBR, но не затрагивает таблицу разделов (очень полезно для стирания GRUB без потери данных в разделах):

sudo dd if=/dev/zero |pv|dd of=/dev/hda bs=446 count=1

= Копировать / восстановить загрузочный сектор тома (VBS):

Чтобы скопировать VBS:

sudo dd if=/dev/hda |pv|dd of=/home/sector_arranque_hda count=1 bs=512

Чтобы восстановить VBS:

sudo dd if=/home/sector_arranque_hda |pv|dd of=/dev/hda

D) Другое:

= Записать образ диска в нашу директорию / home, пропуская ошибки диска (очень полезно для умирающих дисков):

sudo dd conv=noerror if=/dev/hda |pv|dd of=~/home/imagen_disco_con_errores.iso

= Создайте пустой файл размером 1 Мб:

sudo dd if=/dev/zero |pv|dd of=archivo_nuevo_vacio bs=1024 count=1024

= Создайте файл подкачки 2 ГБ:

sudo dd if=/dev/zero |pv|dd of=/swapspace bs=4k count=2048M
mkswap /swapspace
swapon /swapspace

= Преобразовать все буквы в верхний регистр:

sudo dd if=miarchivo |pv|dd of=miarchivo conv=ucase

Используйте команду dd с программой графической среды: Gdiskdump - это графическая среда для этой команды dd, которая упрощает задачу клонировать разделы или диски, быстро и легко. Его можно скачать со страницы https://launchpad.net/gdiskdump/ Как только мы откроем ее с правами root - sudo gdiskdump -, мы увидим, что программа очень проста в использовании, поскольку нам нужно только указать ей раздел или диск для клонирования (входной формат) и его место назначения (выходной формат).