dd (dataset definition) — программа UNIX, предназначенная как для копирования, так и для конвертации файлов. Название унаследовано от оператора DD (Dataset Definition) из языка JCL[1][2].
В OS X
диски монтируются автоматически, а при попытке отмонитровать, что стандартной unix-командой umount, что из UI устройство пропадает из /dev
, а сделать dd
на примонитрованное устройство не разрешает. Как это всё обойти — ниже.
Шаг 1: смотрим командой diskutil диски до того, как вставить usb-хранилище в порт:
diskutil list
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *500.3 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_CoreStorage Macintosh HD 499.4 GB disk0s2
3: Apple_Boot Recovery HD 650.1 MB disk0s3
/dev/disk1 (internal, virtual):
#: TYPE NAME SIZE IDENTIFIER
0: Apple_HFS Macintosh HD +499.0 GB disk1
Logical Volume on disk0s2
5CE61117-8117-4CE4-97F1-CBA5B943E5C5
Unlocked Encrypted
Шаг 2: вставляем флешку или usb-диск и снова смотрим список дисков.
diskutil list
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *500.3 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_CoreStorage Macintosh HD 499.4 GB disk0s2
3: Apple_Boot Recovery HD 650.1 MB disk0s3
/dev/disk1 (internal, virtual):
#: TYPE NAME SIZE IDENTIFIER
0: Apple_HFS Macintosh HD +499.0 GB disk1
Logical Volume on disk0s2
5CE61117-8117-4CE4-97F1-CBA5B943E5C5
Unlocked Encrypted
/dev/disk2 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *4.0 GB disk2
1: DOS_FAT_32 4.0 GB disk2s1
Видим, что появился /dev/disk2
, 1 — размеченный слайс, теперь с этим можно работать.
Волшебная команда для отмонтирования, которая позволит не удалить устройство из /dev
, отмонтируем слайс 1 диска 2:
sudo diskutil unmount /dev/disk2s1
Теперь заливаем образ обычной юниксовой командой:
sudo dd if=image.iso of=/dev/disk2 bs=1m
Clone
клонирование дисков:
dd if=/dev/diskX of=/dev/diskX bs=32m status=progress
Копирование содержимого диска в образ
dd if=/dev/sda of=/home/user/image.img
В этом примере утилита dd копирует содержимое диска /dev/sda в файл /home/user/image.img. Этот файл будет содержать полный образ диска, включая файловую систему и данные.
Создание загрузочного USB-накопителя
dd if=/path/to/iso/file.iso of=/dev/sdb bs=4M status=progress
Этот пример демонстрирует, как создать загрузочный USB-накопитель из образа диска ISO. Утилита dd записывает содержимое файла ISO на накопитель /dev/sdb, используя блочный размер 4M и отображая прогресс операции.
Запись образа на диск
dd if=/home/user/image.img of=/dev/sda
В этом примере утилита dd записывает содержимое образа /home/user/image.img на диск /dev/sda. Это может быть полезно, если вы хотите быстро восстановить диск из образа или скопировать содержимое диска на другой диск.
Удаление данных с диска
dd if=/dev/urandom of=/dev/sda bs=4M status=progress
В этом примере утилита dd записывает случайные данные с /dev/urandom на диск /dev/sda. Это может быть полезно, если вы хотите полностью удалить данные с диска перед его утилизацией или продажей.
Клонирование с помощью dd на удаленный сервер.
1. Клонировать раздел диска, используя dd через SSH
Попробуем клонировать весь раздел диска Linux с помощью dd через ssh с сервера A на сервер B.
Предположим, вы используете пользователя root.
Выполните эту команду на сервере A (источник):
# dd bs=16M if=/dev/sda | ssh root@serverB "dd bs=16M of=/dev/sda"
Если вы хотите клонировать только какой-то определенный раздел, просто выберите раздел, который вы хотите клонировать, как показано ниже, например, мы будем клонировать раздел /dev/sda3.
Запустите эту команду на сервере A (источник):
# dd bs=16M if=/dev/sda3 | ssh root@serverB "dd bs=16M of=/dev/sda3"
2. Клонировать раздел диска, используя dd через telnet со сжатием bzip
Клонирование с использованием telnet и bzip имеет преимущества, позволяющие сократить время клонирования, но убедитесь, что вы используете безопасную сеть.
Предположим, что сервер-B имеет IP-адрес 192.168.100.2.
Запустите эту команду на сервере B (пункт назначения):
# nc -l -p 19000 | bzip2 -d | dd bs=16M of=/dev/sda
Запустите эту команду на сервере A (источник):
# dd bs=16M if=/dev/sda | bzip2 -c | nc 192.168.100.2 19000
Основываясь на этих 2 командах выше, мы подключимся к серверу-B через порт 19000.
ВНИМАНИЕ! Параметр of=/dev/sda перезапишет диск sda на целевом сервере, если нужно записать в файл, укажите путь к нему of=/home/user/file1.bz2 (к примеру так)
Свежие комментарии