dd (dataset definition) — универсальный инструмент, предназначенный для побайтового копирования и для конвертации файлов.
Пример, наглядно иллюстрирующий основные параметры команды:
dd if=/dev/urandom of=/dev/null bs=100M count=5
Параметры:
- if: указывает на источник, т.е. на то, откуда копируем. Указывается файл, который может быть как обычным файлом, так и файлом устройства.
- of: указывает на файл назначения. То же самое, писать можем как в обычный файл, так и напрямую в устройство.
- bs: количество байт, которые будут записаны за раз. Можно представлять этот аргумент как размер куска данные, которые будут записаны или прочитаны, а количество кусков регулируется уже следующим параметром.
- count: как раз то число, которое указывает: сколько кусочков будет скопировано.
Таким образом, описанная команда читает 5*100 мегабайт из устройства /dev/urandom в устройство /dev/null. Придавая этой команде смысловую нагрузку получается, что система сгенерирует 500 мегабайт случайных значений и запишет их в null устройство. Конечно, единственное, что сделает эта команда: нагрузит процессор на несколько секунд.
Создание образа диска:
dd if=/dev/cdrom of=image.iso
Команда будет считывать из устройства данные и записывать в файл до тех пор, пока не достигнет окончания устройства. Если диск битый, можно попробовать его прочитать, игнорируя ошибки чтения:
dd if=/dev/cdrom of=image.iso conv=noerror
Параметр «conv» позволяет подключать несколько фильтров, применимых к потоку данных. Фильтр «noerror» как раз отключает остановку работы программы, когда наткнется на ошибку чтения. Таким образом, некоторые данные с диска все же можно будет прочитать.
Смонтировать образ можно при помощи команды mount с ключем “-o loop”:
mount -o loop image.iso /mnt/image
Если что-то не получается, процесс разбивается на 2 уровня:
losetup -e /dev/loop0 image.iso
mount /dev/loop0 /mnt/image
Если и так не работает, значит файловая система образа полетела.
Работа с носителями информации
Клонирования жесткого диска:
Подробности см. в статье “DD+GnuPG(AES256/SHA512+BZIP2)+SPLIT клонируем, сжимаем шифруем раздел”
Забить носитель нулями:
dd if=/dev/zero of=/dev/DEVICE
ВАЖНО! данный способ СОВЕРШЕННО не гарантирует полного уничтожения данных на жестком диске и их все равно можно будет восстановить с помощью специального ПО и спец. оборудования. Для гарантии полного уничтожения данных необходимо применять спец. алгоритмы стирания данных, такие например как Gutman, VSITR, RCMP TSSIT OPS-II и др.
Проверить можно тем же dd, но преобразовав данные в hex:
dd if=/dev/sda | hexdump -C
Должны посыпаться нули.
Операции с MBR
MBR расположена в первых 512 байтах жесткого диска, и состоит из таблицы разделов, загрузчика и пары доп. байт.
Резервное копирование MBR:
dd if=/dev/sda of=mbr.img bs=512 count=1
Восстановление MBR из резервной копии:
dd if=mbr.img of=/dev/sda
Обратите внимание на то, что если Linux монтирует файловые системы согласно суперблоку, то Windows ориентируются на ID разделов из MBR. Поэтому всегда нужно проверять ID разделов при помощи fdisk.
Генерация файлов
При помощи dd можно генерировать файлы, а затем использовать их как контейнеры других файловых систем, так же возможно применении шифрования.
При помощи dd создадим файл, забитый нулями.
При генерации файла для последующего использования в качестве контейнера случайными числами забивать не рационально: долго и бессмысленно. Но если, например, вам нужно сгенерировать файл для тестирования скорости скорости соединения с вашим сервером, то генерируемый файл обязательно нужно забивать случайными числами.
Генерация файла, забитого нулями:
dd if=/dev/zero of=image.img bs=1M count=1024
или
Генерация файла, забитого случайными числами:
dd if=/dev/urandom of=image.img bs=1M count=1024
Будет создан файл размером 1 Гигабайт. Теперь нужно сделать этот файл блочным устройством и, при этом, пропустить его через механизм шифрования ядра linux. Для примера будем использовать алгоритм blowfish.
Загрузка модулей:
modprobe cryptoloop
modprobe blowfish
Ассоциация образа с блочным устройством со включенным шифрованием:
losetup -e blowfish /dev/loop0 image.img
Команда запросит ввести пароль к образу. Если ключ введен не правильно, система не смонтируется. Можно будет заново создать данные в образе, используя новый ключ, но к старым данным доступа не будет.
Создаем файловую систему и монтируем:
mkfs.ext2 /dev/loop0
mount /dev/loop0 /mnt/image
Образ готов к записи данных. После завершения работы с ним, нужно не забыть его отмонтировать и отключить от блочного loop устройства.
Отключение от блочного loop устройства:
umount /dev/loop0 losetup -d /dev/loop0
Теперь зашифрованный образ готов.