Команда 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 -, мы увидим, что программа очень проста в использовании, поскольку нам нужно только указать ей раздел или диск для клонирования (входной формат) и его место назначения (выходной формат).