Изучаем команду dd


1. Введение
1.1. Почему dd?

Мы выбрали dd как первого соискателя в нашей серии, потому что это очень полезная утилита, имеющая, как вы увидите ниже, множество опций. Это делает ее практически швейцарским армейским ножом в мире Linux.
2. Общепринятое использование

Перед тем, как начать, мы хотим выяснить, для чего в целом предназначена dd. Во-первых, ее название происходит от "data duplicator", но в шутку ее еще расшифровывают как "disk destroyer" или "data destroyer", потому что это очень мощная утилита. Поэтому мы рекомендуем использовать ее очень аккуратно, так как малейшая неосторожность может стоить вам всех ваших данных. Синтаксис dd выглядит следующим образом:

$ dd if=$input_data of=$output_data [options]


Входными и выходными данными могут быть диски, разделы, файлы, устройства... практически все, с чего можно считывать информацию, и куда ее можно записывать. Как вы увидите ниже, с помощью dd можно также пересылать данные, например, по локальной сети. Вы можете использовать входную часть команды, или только выходную, а в некоторых случаях могут отсутствовать обе части. Все это будет проиллюстировано в представленной ниже таблице.
3. ПримерыСинтаксис команды Описание
Файловые системы

dd if=/dev/urandom of=/dev/sda bs=4k
Заполняет устройство случайными данными

dd if=/dev/sda of=/dev/sdb bs=4096
Побайтное копирование данных с устройства на устройство

dd if=/dev/zero of=/dev/sda bs=4k
Очистка жесткого диска (для полной уверености в уничтожении данных можно выполнить несколько раз)

dd if=inputfile of=/dev/st0 bs=32k conv=sync
Копирование файла на ленточное устройство

dd if=/dev/st0 of=outfile bs=32k conv=sync
Копирование файла с ленточного устройства

dd if=/dev/sda | hexdump -C | grep [^00]
Проверяет, заполнен ли диск нулями

dd if=/dev/urandom of=/home/$user/hugefile
bs=4096
Заполняет раздел (острожнее с системными разделами!)

ls -l myfile
-rw-r--r-- 6703104 Oct 31 18:25 myfile
dd if=/dev/urandom of=myfile bs=6703104 count=1
Перемешивает содержимое файла (может применяться перед его удалением)

dd if=/dev/sda3 of=/dev/sdb3 bs=4096
conv=notrunc,noerror
Копирует раздел в другой раздел

dd if=/proc/filesystems | hexdump -C | less
Просмотр доступных файловых систем

dd if=/proc/partitions | hexdump -C | less
Просмотр размеров доступных разделов в кБ

dd if=/dev/sdb2 ibs=4096 | gzip > partition.image.gz
conv=noerror
Создает сжатый образ второго диска

dd bs=10240 cbs=80 conv=ascii,unblock
if=/dev/st0 of=ascii.out
Копирует содержимое ленточного устройства в файл, преобразуя кодировку EBCDIC в ASCII

dd if=/dev/st0 ibs=1024 obs=2048 of=/dev/st1
Копирует содержимое устройства с размером блока 1кБ на устройство с размером блока 2 кБ

dd if=/dev/zero of=/dev/null bs=100M count=100
100+0 records in
100+0 records out
10485760000 bytes (10 GB) copied,

5.62955 s, 1.9 GB/s
Копирует 10 ГБ нулей в никуда

dd if=/dev/zero of=/dev/sda bs=512 count=2
fdisk -s /dev/sda
dd if=/dev/zero of=/dev/sda seek=
(number_of_sectors - 20) bs=1k
Удаляет таблицу разделов диска. Так как таблица разделов записывает данные в начало в конец диска, то после удаления данных с начала диска нам необходимо найти количество секторов (вторая команда), а затем стереть последние 20 секторов.

dd if=/home/$user/bootimage.img of=/dev/sdc
Создание загрузочного USB-диска (он показан как /dev/sdc)

dd if=/dev/sda of=/dev/null bs=1m
Хороший способ проверки диска на испорченные блоки
Резервное копирование и системные операции

dd if=/dev/sda of=/dev/fd0 bs=512 count=1
Копирование главной загрузочной записи на дискету

dd if=/dev/sda1 of=/dev/sdb1 bs=4096
Полное копирование диска на другой диск

dd if=/dev/sr0 of=/home/$user/mycdimage.iso
bs=2048 conv=nosync
Создание образа CD

mount -o loop /home/$user/mycdimage.iso
/mnt/cdimages/
локальное монтирование созданного образа

dd if=/dev/sda2 of=/home/$user/hddimage1.img
bs=1M count=4430
dd if=/dev/sda2 of=/home/$user/hddimage2.img
bs=1M count=8860
[...]
Создание DVD-образов раздела (используется для резервного копирования)

dd if=/$location/hddimage1.img of=/dev/sda2
bs=1M
dd if=/$location/hddimage2.img of=/dev/sda2
seek=4430 bs=1M
dd if=/$location/hddimage3.img of=/dev/sda2
seek=8860 bs=1M
[и так далее...]
Восстановление из созданной выше резервной копии

dd if=/dev/zero count=1 bs=1024 seek=1 of=/dev/sda6
Уничтожение суперблока

dd if=/dev/zero count=1 bs=4096 seek=0 of=/dev/sda5
Еще один способ уничтожения суперблока

dd if=/home/$user/suspicious.doc | clamscan -
Проверка файла на вирусы (необходим ClamAV)

dd if=/home/$user/binary file | hexdump -C | less
Просмотр содержимого бинарного файла (необходим hexdump)

dd if=/home/$user/bigfile of=/dev/null
dd if=/dev/zero of=/home/$user/bigfile
bs=1024 count=1000000
Тестирование жесткого диска на скорость чтения/записи

dd if=/dev/sda of=/dev/sda
Восстанавливает работоспособность старых жестких дисков (диск должен быть отмонтирован)

dd if=/dev/mem | strings | grep 'string_to_search'
Проверяет содержимое памяти (читаемое человеком)

dd if=/dev/fd0 of=/home/$user/floppy.image
bs=2x80x18b conv=notrunc
Копирование дискеты

dd if=/proc/kcore | hexdump -C | less
Просмотр виртуальной памяти

dd if=/proc/filesystems | hexdump -C | less
Просмотр доступных файловых систем

dd if=/proc/kallsyms | hexdump -C | less
Просмотр загруженных модулей

dd if=/proc/interrupts | hexdump -C | less
Просмотр таблицы прерываний

dd if=/proc/uptime | hexdump -C | less
Просмотр времени работы системы в секундах

dd if=/proc/partitions | hexdump -C | less
Просмотр размеров доступных разделов в кб

dd if=/proc/meminfo | hexdump -C | less
Просмотр статистики использования памяти

dd if=/dev/urandom of=/home/$user/myrandom
bs=100 count=1
Создание файла размером 1 кб, заполненного мусором

dd if=/dev/mem of=/home/$user/mem.bin
bs=1024
Создание образа мгновенного состояния системной памяти

dd if=/home/$user/myfile
Печать файла в stdout

dd if=/dev/sda2 bs=16065 | hexdump -C
| grep 'text_to_search'
Поиск заданной строки на всем разделе. Даже если он защищен, вы можете загрузиться с liveCD

dd if=/home/$user/file.bin skip=64k bs=1
of=/home/$user/convfile.bin
Копирование файла file.bin в convfile.bin за исключением первых 64 kB

dd if=/home/$user/bootimage.img of=/dev/sdc
Создание загрузочного USB-устройства (показано здесь как /dev/sdc)

dd if=/dev/mem bs=1k skip=768 count=256
2>/dev/null | strings -n 8
Чтение BIOS

dd bs=1k if=imagefile.nrg of=imagefile.iso skip=300k
Конвертирование образа Nero в стандартный ISO. Это возможно, так как все отличие между ними заключается в заголовке размером 300 кб, добавляемом Nero к стандартному ISO-образу.

echo -n "hello vertical world" | dd cbs=1
conv=unblock 2> /dev/null
Попробуйте, это не опасно... :-)

dd if=/dev/sda1 | gzip -c | split -b 2000m -
/mnt/hdc1/backup.img.gz
Создание образа диска, сжатого с помощью gzip и разрезанного на части с помощью split.

cat /mnt/hdc1/backup.img.gz.* | gzip -dc |
dd of=/dev/sda1
Восстановление раздела из созданного выше образа.

dd if=/dev/zero of=myimage bs=1024 count=10240
Создание пустого образа диска

dd ibs=10 skip=1
Вырезание первых 10 байт из stdin

dd bs=265b conv=noerror if=/dev/st0
of=/tmp/bad.tape.image
Создание образа с ленточного накопителя с плохими участками

dd if=/dev/sda count=1 | hexdump -C
Просмотр MBR

dd if=/dev/sda | nc -l 10001
nc $system_to_backup_IP 10001 | dd
of=sysbackupsda.img
Быстрое сетевое резервное копирование с помощью netcat

dd if=/dev/zero of=/dev/sdX
bs=1024000 count=1
Очистка первых 10 MB раздела

dd if=/dev/zero of=tmpswap bs=1k
count=1000000
chmod 600 tmpswap
mkswap tmpswap
swapon tmpswap
Создание временного пространства подкачки

dd if=/dev/sda of=/dev/null bs=1024k
count=1024
1073741824 bytes (1.1 GB) copied,
24.1684 s, 44.4 MB/s
Определение скорости системы ввода/вывода вашего диска. Чтение файла размером 1 Гб.

dd if=/dev/random count=1 2>/dev/null | od -t u1 |
awk '{ print $2}' | head -1
Генерация случайного числа

dd if=/dev/mem of=myRAM bs=1024
Копирование содержимого оперативной памяти в файл.

dd if=/dev/sda bs=512 count=1 | od -xa
Просмотр содержимого главной загрузочной записи в шестнадцатеричном формате и в ASCII

dd if=/my/old/mbr of=/dev/sda bs=446 count=1
Восстановление главной загрузочной записи, не затрагивая таблицу разделов.

dd if=/dev/sda1 | split -b 700m - sda1-image
Создание копии раздела и сохранение ее в образах максимальным размером 700 Мб.
Работа с текстом

ls -l | dd conv=ucase
Преобразует вывод команды в верхний регистр

echo "MY UPPER CASE TEXT" | dd conv=lcase
Преобразует любой текст в нижний регистр

dd if=/etc/passwd cbs=132 conv=ebcdic of=/tmp/passwd.ebcdic
Преобразует файл системных паролей в файл формата EBCDIC фиксированной длины

dd if=text.ascii of=text.ebcdic conv=ebcdic
Преобразование ASCII в EBCDIC

dd if=myfile of=myfile conv=ucase
Преобразование файла в нижний регистр (простая замена sed или tr)


http://how-to.linuxcareer.com/learning-linux-commands-dd

Обновлено: 13.03.2015