Библиотека сайта rus-linux.net
Изучаем команды Linux: dd
Оригинал: Learning Linux commands: ddАвтор: Rares Aioanei
Дата публикации: 16 ноября 2011 года
Перевод: А. Кривошей
Дата перевода: апрель 2011 г.
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) |
4. Заключение
Здесь была представлена только небольшая часть того, что можно сделать с помощью dd, и мы надеемся, что в этой статье нам удалось собрать самые полезные примеры для применения dd в повседневной работе. Для тех, кто хочет узнать больше, рекомендуем читать документацию жестких дисков, касающуюся таких вещей, как LBA limitation. Необходимо также еще раз напомнить, что нужно быть очень осторожным при использовании dd с правами суперпользователя.