User Tools

Site Tools


программа_dd

dd

Заполнения диска нулями

Для того, чтобы забить диск нулями (делается для затруднения восстановления данных). divace нужно заменить на требуемое устройство

dd if=/dev/zero of=/dev/divace

Посмотреть прогресс выполнения операции можно с помощью программы pv

pv /dev/zero | dd of=/dev/divace

либо с помощью status=progress 1)

dd if=/dev/zero of=/dev/divace status=progress

Проверить можно тем же dd, но преобразовав данные в hex, должны посыпаться нули

dd if=/dev/sda | hexdump -C 

Клонирование диска

Побайтовой копирование с размером буфера 4 Кб

dd if=/dev/sda of=/dev/sdb bs=4096

Копирование MBR в файл

Команда, которая скопирует mbr в файл, выглядит так

dd if=/dev/hda of=backup.mbr bs=512 count=1

Для восстановления загрузчика, проделаем обратную операцию

dd if=backup.mbr of=/dev/hda bs=512 count=1

Создание файла заданного размера

Команда создаст файл размером в 1GB забитый нулями

dd if=/dev/zero of=file.name bs=1M count=1000

Так же, есть возможность создать sparse file. Это файл, который создаётся с заданным размером, но при этом физически не занимает пространство на диске, пока в него не будут записаны данные

dd if=/dev/zero of=file.name bs=1M count=0 seek=1000

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

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

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

Если диск битый, можно попробовать его прочитать, игнорируя ошибки чтения. Параметр conv позволяет подключать несколько фильтров, применимых к потоку данных. Фильтр noerror как раз отключает остановку работы программы, когда наткнется на ошибку чтения

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

Подключить, образ можно при помощи команды mount с ключем -o loop

mount -o loop image.iso /mnt/image

Резервное копирование

Пример бекапа по сети

dd if=/dev/divace | ssh user@host «dd of=/home/user/divace.img

Отслеживание прогресса dd

pv

С помощью упомянутой выши утилиты pv. Рассмотрим несколько примеров.

dd if=/dev/urandom | pv | dd of=/dev/null
1.14GiB 0:00:10 [ 116MiB/s] [         <=>                                     ]

Следующий пример предполагает, что диск объемом 2 ГБ копируется из /dev/sdb. Для оценки времени, указываем размер с помощью директивы –size

sudo dd if=/dev/sdb | pv -s 2G | dd of=DriveCopy1.dd bs=4096
 
440MB 0:00:38 [11.6MB/s] [======>                             ] 21% ETA 0:02:19

pkill

Есть еще достаточно хитрый способ. Получать прогресс будем с помощью утилиты pkill. Для этого потребуются два она терминала. В первом окне готовимся принимать сигнал от dd

watch -n1 pkill -usr1 dd

во втором окне запускаем dd и смотрим за прогрессом

 dd if=/dev/urandom of=rando bs=1024 count=1048576
 
27829+0 records in
27828+0 records out
28495872 bytes (28 MB, 27 MiB) copied, 0.204704 s, 139 MB/s
200674+0 records in
200673+0 records out
205489152 bytes (205 MB, 196 MiB) copied, 1.20689 s, 170 MB/s
372534+0 records in
372534+0 records out
381474816 bytes (381 MB, 364 MiB) copied, 2.20909 s, 173 MB/s
544761+0 records in
544760+0 records out
557834240 bytes (558 MB, 532 MiB) copied, 3.21126 s, 174 MB/s
716516+0 records in
716515+0 records out
733711360 bytes (734 MB, 700 MiB) copied, 4.21369 s, 174 MB/s
888834+0 records in
888834+0 records out
910166016 bytes (910 MB, 868 MiB) copied, 5.21583 s, 175 MB/s
1048576+0 records in
1048576+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 10.4975 s, 102 MB/s
1048576+0 records in
1048576+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 10.4975 s, 102 MB/s
1)
присутствует в дистрибутивах с coreutils 8.24 и выше
программа_dd.txt · Last modified: 2023/04/06 10:28 (external edit)