Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
На главную -> MyLDP -> Тематический каталог -> Работа в консоли Linux

dd: Команда, которая не похожа на другие

Автор: Алексей Дмитриев
Дата: ноябрь 2008

Давайте на примерах рассмотрим многообразие применения команды dd, не слишком углубляясь в дебри синтаксиса.

Пример 2. Создание загрузочной дискеты из файла-образа.

Допустим, мы скачали из Интернета файл-образ чрезвычайно полезного загрузочного менеджера SBM (SmartBootManager) sbm.img. Теперь нужно создать загрузочную дискету SBM:

# dd if=/путь/sbm.img of=/dev/fd0

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

Пример 3. Разрезать 10 мегабайтный файл file.10m на два пяти-мегабайтных:

dd if=file.10m of=file1.5m bs=1M count=5
dd if=file.10m of=file2.5m bs=1M skip=5

Пример 4. вывести на экран первые 100 байт содержимого файла schema.txt:

# dd if=Desktop/shema.txt bs=100 count=1

<html> <head> <meta content="text/html; charset=koi8-r" http-equiv="Content-Type"> <title> 1+0 записей считано 1+0 записей написано скопировано 100 байт (100 B), 0,00155746 секунд, 64,2 kB/s

Обратите внимание, что мы не указывали выходной файл (of). Поэтому команда dd по умолчанию воспользовалась стандартным выводом (экраном монитора).

Пример 5. Создание образа оптического диска:

dd if=/dev/cdrom of=image.iso bs=2k

При желании, с помощью полученного образа image.iso можно будет "прожечь" полноценный загрузочный диск (если, конечно, оригинал был загрузочным). Если копировать командой ср, то загрузочного диска не получишь.

Пример 6. Ускорениe работы некоторых Live CD.

На "слабых" машинах современные Live CD работают медленно, иногда очень медленно. Если на жестком диске выделить раздел, скажем hda7 размером в 900Мб (для CD) и скопировать в этот раздел весь CD целиком, то во многих случаях, при загрузки с CD загрузчик примет наш раздел жесткого диска за сам CD и начнет загрузку с него. В этом случае скорость работы сильно повышается, ведь работа с жесткого диска намного быстрее, чем с любого CD привода.

# dd if=/dev/cdrom of=/dev/hda7 bs=2k

Этот фокус не всегда срабатывает, так как некоторые загрузчика не перебирают все файлы устройств по порядку. Например, Gentoo Live CD и Mandriva Spring Live CD, я только таким способом и смог запустить в графическом режиме на старом ноутбуке. А Mops Live CD на обман не поддается, и ищет чего-то другого.

Пример 7. Увеличить размер существующего файла до 1Гб без перезаписи:

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

Пример 8. Создание загрузочной дискеты Grub

Для создания загрузочной дискеты Grub, нужно записать файл stage1 в нулевой сектор дискеты, а файл stage2 в первый и последующие сектора. Файлы stage1 и stage2 обычно находятся в директории /boot/grub, если Grub у вас установлен, или в пакете, если Grub еще не установлен. Я не стану указывать путь к этим файлам, он у всех разный.

# dd if=stage1 of=/dev/fd0 bs=512 count=1

Файл stage1 (загрузочный) занял свое место в загрузочном (0) секторе дискеты.

# dd if=stage2 of=/dev/fd0 bs=512 seek=1
153+1 records in
153+1 records out

Команда dd пропустила один сектор (поскольку там уже записаны данные stage1, то нулями она его не заполнила) и записала весь файл stage2. Теперь с этой дискеты можно загружать Grub, и с его помощью запускать любую ОС на вашей машине.

Пример 9. Создание загрузочного образа

Сходную задачу выполняет Makefile ядра Линукс при создании загрузочного образа (boot image). В Alpha Makefile /usr/src/linux/arch/alpha/boot/Makefile программа srmboot на выходе выдает команду:

# dd if=bootimage of=$(BOOTDEV) bs=512 seek=1 skip=1

Эта команда означает: пропустить (seek=1) первые 512 байт во входном файле (bootimage); начать запись со второго сектора устройства $(BOOTDEV). Типичное использование команды dd в том, чтобы пропустить исполняемую программу в заголовке, и начать запись в середине устройства, пропуская данные о томе и разделе. Нужно сказать, что малейшая ошибка в такого рода записях, может стоить вашему диску потери системных данных, поэтому будьте осторожны и проверьте все трижды.

Пример 10. Вывести на экран уже знакомый нам MBR.

Поскольку это двоичный файл, придется воспользоваться следующим конвейером:

# dd if=/dev/hda bs=512 count=1 2>/dev/null | hexdump

0000000 48eb 1090 d08e 00bc b8b0 0000 d88e c08e 0000010 befb 7c00 00bf b906 0200 a4f3 21ea 0006 0000020 be00 07be 0438 0b75 c683 8110 fefe 7507 0000030 ebf3 b416 b002 bb01 7c00 80b2 748a 0203 0000040 00ff 2000 0001 0000 0200 90fa f690 80c2 0000050 0275 80b2 59ea 007c 3100 8ec0 8ed8 bcd0 0000060 2000 a0fb 7c40 ff3c 0274 c288 be52 7d81 0000070 36e8 f601 80c2 5674 41b4 aabb cd55 5a13 0000080 7252 814b 55fb 75aa a045 7c41 c084 3e78 0000090 0575 e183 7401 6637 4c8b be10 7c05 44c6 00000a0 01ff 8b66 441e c77c 1004 c700 0244 0001 00000b0 8966 085c 44c7 0006 6670 c031 4489 6604 00000c0 4489 b40c cd42 7213 bb05 7000 7deb 08b4 00000d0 13cd 0a73 c2f6 0f80 e884 e900 008d 05be 00000e0 c67c ff44 6600 c031 f088 6640 4489 3104 00000f0 88d2 c1ca 02e2 e888 f488 8940 0844 c031 0000100 d088 e8c0 6602 0489 a166 7c44 3166 66d2 0000110 34f7 5488 660a d231 f766 0474 5488 890b 0000120 0c44 443b 7d08 8a3c 0d54 e2c0 8a06 0a4c 0000130 c1fe d108 6c8a 5a0c 748a bb0b 7000 c38e 0000140 db31 01b8 cd02 7213 8c2a 8ec3 4806 607c 0000150 b91e 0100 db8e f631 ff31 f3fc 1fa5 ff61 0000160 4226 be7c 7d87 40e8 eb00 be0e 7d8c 38e8 0000170 eb00 be06 7d96 30e8 be00 7d9b 2ae8 eb00 0000180 47fe 5552 2042 4700 6f65 006d 6148 6472 0000190 4420 7369 006b 6552 6461 2000 7245 6f72 00001a0 0072 01bb b400 cd0e ac10 003c f475 00c3 00001b0 0000 0000 0000 0000 8e03 0004 0000 0180 00001c0 0001 fe0c ffff 003f 0000 0d7a 0138 fe00 00001d0 ffff fe0f ffff 0db9 0138 bdcd 0371 0000 00001e0 0000 0000 0000 0000 0000 0000 0000 0000 00001f0 0000 0000 0000 0000 0000 0000 0000 aa55 0000200

Обратите внимание на сигнатуру. Она представлена байтами aa55. А на рисунке 3 мы видели в Khexedit'е 55аа. Если внимательно сравнить полученную распечатку с рисунком 3, то становится ясно, что байты в каждой паре поменялись местами: eb48 стала 48eb, 9010 стала 1090 и так далее. Дело в том, что существуют минимум две системы записи двоичных файлов: little endian и big endian. Khexedit, с которого был снят рисунок 3, работает в little endian. А какое-то звено в примененном нами конвейере, похоже работает в big endian (Кстати, определить какую систему записи байтов использует ваша машина, можно с помощью небольшой программы. Смотрите приложение [1]). Чтобы получить распечатку в уже привычном нам виде (как на рис. 3) нам необходимо использовать новый операнд:

conv=значение Этот операнд совершает преобразования формата копируемых файлов. Он работает не с числами, а со значениями (или иначе, фильтрами), список которых весьма обширен. Мы рассмотрим этот список в следующей главе, а пока применим одно из них:

conv=swab Это преобразование переставляет байты в каждой входной паре.

# dd if=/dev/hda bs=512 count=1 conv=swab 2>/dev/null | hexdump

0000000 eb48 9010 8ed0 bc00 b0b8 0000 8ed8 8ec0 0000010 fbbe 007c bf00 06b9 0002 f3a4 ea21 0600 0000020 00be be07 3804 750b 83c6 1081 fefe 0775 0000030 f3eb 16b4 02b0 01bb 007c b280 8a74 0302 0000040 ff00 0020 0100 0000 0002 fa90 90f6 c280 0000050 7502 b280 ea59 7c00 0031 c08e d88e d0bc 0000060 0020 fba0 407c 3cff 7402 88c2 52be 817d 0000070 e836 01f6 c280 7456 b441 bbaa 55cd 135a 0000080 5272 4b81 fb55 aa75 45a0 417c 84c0 783e 0000090 7505 83e1 0174 3766 8b4c 10be 057c c644 00000a0 ff01 668b 1e44 7cc7 0410 00c7 4402 0100 00000b0 6689 5c08 c744 0600 7066 31c0 8944 0466 00000c0 8944 0cb4 42cd 1372 05bb 0070 eb7d b408 00000d0 cd13 730a f6c2 800f 84e8 00e9 8d00 be05 00000e0 7cc6 44ff 0066 31c0 88f0 4066 8944 0431 00000f0 d288 cac1 e202 88e8 88f4 4089 4408 31c0 0000100 88d0 c0e8 0266 8904 66a1 447c 6631 d266 0000110 f734 8854 0a66 31d2 66f7 7404 8854 0b89 0000120 440c 3b44 087d 3c8a 540d c0e2 068a 4c0a 0000130 fec1 08d1 8a6c 0c5a 8a74 0bbb 0070 8ec3 0000140 31db b801 02cd 1372 2a8c c38e 0648 7c60 0000150 1eb9 0001 8edb 31f6 31ff fcf3 a51f 61ff 0000160 2642 7cbe 877d e840 00eb 0ebe 8c7d e838 0000170 00eb 06be 967d e830 00be 9b7d e82a 00eb 0000180 fe47 5255 4220 0047 656f 6d00 4861 7264 0000190 2044 6973 6b00 5265 6164 0020 4572 726f 00001a0 7200 bb01 00b4 0ecd 10ac 3c00 75f4 c300 00001b0 0000 0000 0000 0000 038e 0400 0000 8001 00001c0 0100 0cfe ffff 3f00 0000 7a0d 3801 00fe 00001d0 ffff 0ffe ffff b90d 3801 cdbd 7103 0000 00001e0 0000 0000 0000 0000 0000 0000 0000 0000 00001f0 0000 0000 0000 0000 0000 0000 0000 55aa 0000200

Теперь MBR принял привычный для нас вид, и мы можем заняться рассмотрением других преобразований, осуществляемых командой dd.


Назад, страницы 1, 2. Вперед, страницы 3, 4.



Средняя оценка 5 при 1 голосовавших

Комментарии