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

UnixForum






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

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

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

Команда dd для Windows

Оригинал: "dd for windows"
Автор: John Newbigin
Свободный перевод: Алексей Дмитриев
Дата перевода: 22 ноября 2008


В Юниксподобных ОС, команда dd копирует файлы на низком уровне; параллельно может конвертировать некоторые форматы данных.

Данная версия dd ничего не конвертирует, а только копирует данные в среде win32. Пока еще под Win9x не поддерживаются блочные устройства, но это не за горами.

Читайте Wikipedia на эту тему.

Использование

Команда dd считывает данные из входного файла (if=FILENAME) и записывает их в выходной файл (of=FILENAME) блоками по N байт.

dd [bs=размер_блока[СУФФИКС]] [count=количество_блоков[СУФФИКС]] if=FILENAME of=FILENAME [seek=количество_блоков[СУФФИКС]] [skip=количество_блоков[СУФФИКС]] [--size] (размер) [--list] (список) [--progress] (состояние дел)

bs означает размер блока (block size). Размер блока может быть указан в байтах или при помощи следующих суффиксов:

НазваниеСуффиксРазмер
Символыc1
Словаw2
Двойные словаd4
Учетверенные словаq8
Килобайтыk1 024
МегабайтыM1 048 576
ГигабайтыG1 073 741 824

По умолчанию размер блока установлен в 512 байт, что подходит для большинства файлов и устройств, но если увеличить размер блока, то копирование пойдет быстрее. Например копировать флоппи диск с bs=1k count=1440 занимает почти вдвое больше времени, чем с bs=1440k count=1. С другой стороны, увлекаться увеличением размера блока не стоит, так как у Windows может не хватить памяти. Большинство CD/DVD имеют сектора размером 2Кб и, возможно, не будут работать с размерами блока некратными этой величине.

skip Это та часть входного файла, которую программа dd пропустит, прежде чем начать считывать данные. Эта величина указывается в блоках, так что выражение bs=512 skip=10 означает "пропустить 10*512=5120 байт от начала входного файла". Здесь также можно употреблять суффиксы и выражение skip=1k означает приказ пропустить 1024 блока.

seek Это та часть выходного файла, которую программа dd пропустит, прежде чем начать записывать данные. Эта величина указывается в блоках, так что выражение bs=512 skip=10 означает "не записывать 10*512=5120 байт от начала выходного файла". Здесь также можно употреблять суффиксы и выражение skip=1k означает приказ пропустить 1024 блока.

count Это число блоков, которые нужно скопировать. Если не задать этот параметр, то программа dd будет продолжать копирование до конца файла или носителя. Со многими usb носителями это не вполне надежно, так что необходимо использовать опцию --size, чтобы определить размер устройства (см. далее). При задании значения count также можно пользоваться суффиксами, например count=1k скопирует 1024 блока.

Применение опции --size

Обычно, если вы хотите скопировать все устройство целиком при помощи команды dd, то вы не указываете количество блоков, и программа будет считывать данные пока не доберется до конца устройства. Если вы попытаетесь считывать после достижения конца устройства, dd выдаст данные вплоть до конца устройства, а если вы будете продолжать считывать, то получите предупреждение об ошибке. Однако Windows не всегда делает это, поэтому следует применять опцию --size, которая заставит dd выявить конец устройства и не пытаться считывать после его достижения. Это важно для всяких USB накопителей, которые портятся, если пытаться считывать данные после конца их данных. Эта опция не включена по умолчанию, так как определить правильный размер таких устройств бывает невозможно. Кроме того, некоторые устройства, после достижения конца реальных данных, вместо того чтобы выдать сообщение об ошибке, начинают выдавать фиктивные данные.

Применение опции --list

Windows поддерживает несколько способов именовать устройства. Опция --list выдаст правильные названия. Под NT4 работает только метод \\?\Device\Harddisk<n>\Partition<n>. Partition0 - это весь диск целиком.

Под Windows XP, некоторые разделы могут не иметь Тома устройства (Volume device). В этом случае приходится пользоваться именами типа Harddisk<n>\Partition n>.

Windows 2000 и новее имеют Тома устройств (Volume devices), снабженные уникальными идентификаторами - GUID, которые служат названиями дисков или разделов - то, что Микрософт называет Томами. В выводе команды dd --list все они перечислены вместе с возможными точками монтирования. Чаще всего они обозначаются буквой (скажем С:), но могут попадаться и пути к другим файловым системам. Если вы хотите прочитать с помощью dd тот или иной раздел, то не пишите в конце замыкающий обратный слэш (\). Если том не примонтирован, то простого способа идентифицировать его не существует, так что будьте на чеку. Под XP SP2, многие разделы не удается прочитать напрямую, даже если они в данный момент не используются. Работу по прочтению таких разделов я называю "Чтение разделов через черный ход".

Вот пример вывода команды:

dd --list
rawwrite dd for windows version 0.4beta1.
Written by John Newbigin <jn@it.swin.edu.au>
This program is covered by the GPL.  See copying.txt for details
Win32 Available Volume Information
\\.\Volume{5cd94d2c-3251-11d9-9444-806d6172696f}\
  link to \\?\Device\HarddiskVolume1
  fixed media
  Mounted on \\.\c:

\\.\Volume{129b1243-3252-11d9-b167-806d6172696f}\ link to \\?\Device\CdRom0 CD-ROM Mounted on \\.\r:

\\.\Volume{129b1242-3252-11d9-b167-806d6172696f}\ link to \\?\Device\Floppy0 removable media Mounted on \\.\a:

\\.\Volume{e3429891-0eb9-11da-b18f-000d60dc98cd}\ link to \\?\Device\Harddisk1\DP(1)0-0+3 removable media Mounted on \\.\d:

NT Block Device Objects \\?\Device\CdRom0 \\?\Device\Floppy0 \\?\Device\Harddisk0\Partition0 link to \\?\Device\Harddisk0\DR0 Fixed hard disk media. Block size = 512 \\?\Device\Harddisk0\Partition1 link to \\?\Device\HarddiskVolume1 \\?\Device\Harddisk1\Partition0 link to \\?\Device\Harddisk1\DR2 Removable media other than floppy. Block size = 512 \\?\Device\Harddisk1\Partition1 link to \\?\Device\Harddisk1\DP(1)0-0+3 Removable media other than floppy. Block size = 512

Virtual devices /dev/zero /dev/random

Применение опции --progress

Эта опция является нестандартным расширением команды dd, которая показывает продвижение работы по мере копирования каждого блока.

Виртуальные устройства

Появились, начиная с версии 0.4beta1.

Так как у Windows нет устройств /dev/zero и /dev/random как в Юниксе, то они были добавлены в программу dd. Их используют как входные файлы (if), когда нужно заполнить файл или раздел нулями, либо псевдослучайными значениями.

Стандартный ввод/вывод

Теперь по умолчанию команда dd использует стандартный ввод (stdin) и стандартный вывод (экран монитора) (stdout), если вы не указали значения if или of. Вы также можете явно задать использование стандартного ввода/вывода, введя значения if=- или of=-. Продвижение работы и сообщения об ошибках теперь выводятся в стандартном сообщении (stderr).

Страховочный фильтр --filter=

Чтобы случайно не переписать не тот диск, созданы страховочные фильтры:

fixed Пишет только на стационарный диск
removable Пишет только на сменный диск
disk Пишет на любой диск
partition Пишет только в раздел

Подключить фильтр можно переименовав dd.exe на dd-<filter>.exe. Например, dd-removable.exe может писать только на сменный диск, типа USB и CF; так что можно не опасаться испортить стационарный жесткий диск.

Примеры

Создать образ флоппи диска:

dd if=\\.\a: of=c:\temp\disk1.img bs=1440k

Создать образ CD:

dd if=\\?\Device\CdRom0 of=c:\temp\disc1.iso bs=1M

Скопировать раздел с USB носителя:

dd if=\\.\Volume{c18588c0-02e9-11d8-853f-00902758442b} of=c:\temp\usb1.img bs=1M

Копировать весь USB носитель целиком:

dd if=\\?\Device\Harddisk1\Partition0 of=c:\temp\usb2.img bs=1M --size --progress

Вы можете писать на любые файлы и блочные устройства, на которые вам позволит Windows. Можно использовать стандартную нотацию \\.\ для экспорта устройств win32, либо специальную dd нотацию \\?\ для доступа к "родным" устройствам Windows.

Примечание: Вы не можете записывать CD при помощи этой программы.

Примечание: Флоппи диски чрезвычайно ненадежны. Если вышла ошибка, замените дискету или отформатируйте ее.

Где скачать dd

Программа Версия Содержание Формат Платформа Скачать
dd 0.6beta1 Source .zip Delphi dd-0.6beta1.src.zip
dd 0.5 Binary .zip Windows dd-0.5.zip
dd 0.4beta4 Binary .zip Windows dd-0.4beta4.zip
dd 0.4beta4 Source .zip Delphi dd-0.4beta4.src.zip
Инструкци по инсталляции



Комментарии