Table of Contents
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