Программа dd для windows команды
В Юниксподобных ОС, команда dd копирует файлы на низком уровне; параллельно может конвертировать некоторые форматы данных.
Данная версия dd ничего не конвертирует, а только копирует данные в среде win32. Пока еще под Win9x не поддерживаются блочные устройства, но это не за горами.
Использование
Команда dd считывает данные из входного файла (if=FILENAME) и записывает их в выходной файл (of=FILENAME) блоками по N байт.
dd [bs=размер_блока[СУФФИКС]] [count=количество_блоков[СУФФИКС]] if=FILENAME of=FILENAME [seek=количество_блоков[СУФФИКС]] [skip=количество_блоков[СУФФИКС]] [--size] (размер) [--list] (список) [--progress] (состояние дел)
bs означает размер блока (block size). Размер блока может быть указан в байтах или при помощи следующих суффиксов:
Название | Суффикс | Размер |
---|---|---|
Символы | c | 1 |
Слова | w | 2 |
Двойные слова | d | 4 |
Учетверенные слова | q | 8 |
Килобайты | k | 1 024 |
Мегабайты | M | 1 048 576 |
Гигабайты | G | 1 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
Применение опции --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, многие разделы не удается прочитать напрямую, даже если они в данный момент не используются. Работу по прочтению таких разделов я называю "Чтение разделов через черный ход" .
Применение опции --progress
Эта опция является нестандартным расширением команды dd, которая показывает продвижение работы по мере копирования каждого блока.
Виртуальные устройства
Так как у Windows нет устройств /dev/zero и /dev/random как в Юниксе, то они были добавлены в программу dd. Их используют как входные файлы (if), когда нужно заполнить файл или раздел нулями, либо псевдослучайными значениями.
Стандартный ввод/вывод
Немного пояснений. Для блочного устройства \\?\Device\Harddisk2, у нас присутствует два раздела. Нулевой \\?\Device\Harddisk2\Partition0, отвечает за весь диск целиком, и \\?\Device\Harddisk2\Partition1 за первый (и единственный в данном случае) раздел на нашей флешке. Первый раздел, как было показано ранее, начинался с 2048 сектора, а значит любые манипуляции при его использовании будут проходить только в диапазоне данного раздела, от 2048 сектора и до сектора конца данного раздела. Поэтому в качестве ссылки выбирается именно \\?\Device\Harddisk2\Partition0.
Теперь вводим команду dd if=/dev/zero of=\\?\Device\Harddisk2\Partition0 bs=1M --progress . Данная команда выполнит запись нулей в каждый байт диска, тем самым выполнит его полную очистку. В процессе работы программы вы будете наблюдать как увеличивается счетчик записанных данных (это из-за ключа --progress).По завершении, программа выдаст полный результат выполненных действий.
Теперь проверим в HxD, как выглядит диск после проделанной записи нулями. Пройдемся по просмотренным ранее секторам флешки.
Сектора 2402 и 2403.
По всему пространству флешки нет ничего, одни нули. На этом низкоуровневое форматирование в ОС Windwos можно считать законченным.
После данной процедуры, в системе флешка будет определятся так.
Для того чтобы вернуть возможность хранить на ней файлы, нужно ее просто отформатировать.
Насчет форматирования есть один нюанс. Если в будущем нужно будет использовать данную флешку в качестве загрузочной, то форматирование нужно производить через diskpart.
dd в Linux
С операционной системой Linux все намного проще. Программа dd присутствует, по умолчанию, в любом дистрибутиве. Приступим. Запускаем терминал с правами root.
Определим под каким устройством в системе скрывается наша флешка. Выполняем для этого команду fdisk -l .
Исходя из полученного вывода, по размеру, можно легко определить нашу флешку. В моем случае это /dev/sda. Теперь выполним низкоуровневое форматирование. Набираем команду dd if=/dev/zero of=/dev/sda bs=1M .
С виду будет казаться, что выполнение команды зависло. Но, это не так. Просто программа dd не выводит информацию во время работы. По завершении, на экран выведется информация о проделанной работе.
Аналогично Windows версии dd, мы получили ошибку о попытке записать данные за пределы объема флешки. Как говорилось ранее, такая ошибка не критична.
На этом низкоуровневое форматирование в ОС Linux можно считать завершенным.
The en dd
У программы dd очень простой функционал, указываем устройство, или файл, исходящих данных, и устройство/файл принимающий эти данные. С помощью этих, казалось бы, простых действий, можно осуществлять сложные, на первый взгляд, операции с дисками, флешками, файлами и прочими блочными устройствами.
В Linux, единственным недостатком является отсутствие отображения информации о прогрессе выполняемых действий. Но решения данной проблемы есть, и весьма простое - использовать совместно программу pv.
А на сегодня, тему низкоуровневого форматирования можно считать завершенной.
Мы расскажем, как посредствам специальной утилиты DD создавать резервные копии данных на виртуальном сервере под ОС Виндовс Сервер.
Несколько слов о резервном копировании файлов
Бэкапы (от английского «Backup») – это метод создания запасной копии важной информации на компьютере либо сервере. Его можно проводить ручным способом или автоматическим в соответствии с регулярным расписанием.
Утилитой DD можно воспользоваться для ОС семейства Линукс, ее команды помогают с копированием файлов через определенные операнды. Это одна из наиболее давних утилит, ее бэкапы можно открыть разнообразным софтом. Версия под операционную систему Виндовс отличается меньшим функционалом, чем версия для Линукс. К примеру, в ней отсутствует поддержка конвертации файлоы и использования блочных устройств.
Как загрузить утилиту
Скачиваем утилиту DD со специального сайта, ведь это стороннее программное обеспечение, широко доступное для пользователей.
В загруженном архиве будет несколько файлов, запустить утилиту позволит приложение dd.exe.
Как использовать
Применение DD в Виндовс системах очень похоже на ее использование в командной строке Линукса.
Для открытия страницы с помощью следует зайти в каталог с нужным объектом, а после открытия консоли PowerShell ввести:
Если нужна запасная копия HDD вместе со всей хранящейся на нем информацией, пригодится такая строчка:
./dd.exe if=<исходный_диск> of=<полное_имя_копии> bs=1440k
Демонстрация того, как создать образ диска F и перенести его на диск Е:
./dd.exe if=.f: of=e:tempdisk1.img bs=8M
В результате получается:
rawwrite dd for windows version 0.5.
Written by John Newbigin <[email protected]>
This program is covered by the GPL. See copying.txt for details
7279+1 records in
7279+1 records out
- Строчка if=/dev/sda отвечает за копирование всего жесткого диска sda.
- Задать конкретный объем кэша на жестком диске, который позволит ускорить процесс копирования данных, поможет выражение bs=8M. В противном случае информация начнет переноситься мелкими размерами, примерно по 512 б каждый.
- Место, куда будет копироваться файл, указывается командой of=/mnt/backup/sda.img. Первые два выражения означают точку монтирования HDD для хранения образа, то есть папке mnt с подпапкой backup.
Обратите внимание: перед создание бэкапов надо убедиться, что на желаемом диске хватает незанятого пространства.
Восстановить HDD из бэкапа поможет команда:
./dd.exe if=<полное_имя_копии> of=<целевой_диск> bs=8M
./dd.exe if=e:tempdisk1.img of=.f: bs=8M
В итоге получится:
rawwrite dd for windows version 0.5.
Written by John Newbigin <[email protected]>
This program is covered by the GPL. See copying.txt for details
1279+1 records in
1279+1 records out
Лучше всего делать резервные копии данных по установленному графику, тогда не придется переживать о том, что администратор забыл или не успел скопировать файлы. Работа полностью автоматизируется.
Обратите внимание: здесь создание бэкапов происходит один раз за 24 часа, все данные переносятся на диск, который удален территориально от самого сервера. Пользователю нет нужды самому настраивать резервное копирование, а хранение бэкапов происходит даже при сбоях на сервере.
В UNIX системах есть одна очень древняя команда, которая называется dd. Она предназначена для того, чтобы что-то куда-то копировать побайтово. На первый взгляд — ничего выдающегося, но если рассмотреть все возможности этого универсального инструмента, то можно выполнять довольно сложные операции без привлечения дополнительного ПО, например: выполнять резервную копию MBR, создавать дампы данных с различных накопителей, зеркалировать носители информации, восстанавливать из резервной копии данные на носители и многое другое, а, при совмещении возможностей dd и поддержке криптографических алгоритмов ядра Linux, можно даже создавать зашифрованные файлы, содержащие в себе целую файловую систему.
Опять же, в заметке я опишу самые часто используемые примеры использования команды, которые очень облегчают работу в UNIX системах.
Начну с небольшого примера, наглядно иллюстрирующего основные параметры команды:
- if: указывает на источник, т.е. на то, откуда копируем. Указывается файл, который может быть как обычным файлом, так и файлом устройства.
- of: указывает на файл назначения. То же самое, писать можем как в обычный файл, так и напрямую в устройство.
- bs: количество байт, которые будут записаны за раз. Можно представлять этот аргумент как размер куска данные, которые будут записаны или прочитаны, а количество кусков регулируется уже следующим параметром.
- count: как раз то число, которое указывает: сколько кусочков будет скопировано.
Создание образа диска:
Команда будет считывать из устройства данные и записывать в файл до тех пор, пока не достигнет окончания устройства. Если диск битый, можно попробовать его прочитать, игнорируя ошибки чтения:
Параметр «conv» позволяет подключать несколько фильтров, применимых к потоку данных. Фильтр «noerror» как раз отключает остановку работы программы, когда наткнется на ошибку чтения. Таким образом, некоторые данные с диска все же можно будет прочитать. Точно таким образом я спас данные со своей флешки Corsair, которую погнули: подобрал подходящее положение, когда контакт есть, и сделал дамп файловой системы.
Подключить, кстати, такие образы можно при помощи команды mount с ключем "-o loop":
Если что-то не получается, процесс разбивается на 2 уровня:
Если и так не работает, значит файловая система образа полетела.
Работа с носителями информации
Очень простое, хоть и не оптимальное решение клонирования жесткого диска:
Все то же побайтовой копирование с размером буфера 4 Кб. Минус способа в том, что при любой заполненности разделов копироваться будут все биты, что не выгодно при копировании разделов с маленькой заполненностью. Чтобы уменьшить время копирования при манипуляции с большими объемами данных, можно просто перенести MBR на новый носитель (я ниже опишу как), перечитать таблицу разделов ядра (при помощи того же fdisk), создать файловые системы и просто скопировать файлы (не забыв сохранить права доступа к файлам).
Как вариант, можно даже по расписанию делать бекап раздела по сети. Разрулив ключи ssh будет работать такая схема:
Когда-то читал исследование, согласно которому очень большая доля жестких дисков на барахолке подвергается восстановлению данных без привлечения чего-то специализированного, и содержит конфиденциальную информацию. Чтобы на носителе ничего нельзя было восстановить — можно забить его нулями:
Думаю, понятно на что нужно заменить DEVICE. После проведения лекций по Linux, я очень тщательно стал следить за тем, что пишу.
Проверить можно тем же dd, но преобразовав данные в hex:
Должны посыпаться нули.
Операции с MBR
MBR расположена в первых 512 байтах жесткого диска, и состоит из таблицы разделов, загрузчика и пары доп. байт. Иногда, ее приходится бекапить, восстанавливать и т.д. Бекап выполняется так:
Восстановить можно проще:
Причины этих махинаций с MBR могут быть разные, однако хочу рассказать одну особенность, взятую из опыта: после восстановления давней копии MBR, где один из разделов был ext3, а позже стал FAT и использовался Windows, раздел перестал видиться виндой. Причина — ID раздела, который хранится в MBR. Если UNIX монтирует файловые системы согласно суперблоку, то винды ориентируются на ID разделов из MBR. Поэтому всегда нужно проверять ID разделов при помощи fdisk, особенно если на компьютере есть винды.
Генерация файлов
При помощи dd можно генерировать файлы, а затем использовать их как контейнеры других файловых систем даже в зашифрованном виде. Технология следующая:
При помощи dd создается файл, забитый нулями (случайными числами забивать не рационально: долго и бессмысленно):
Создался файл размером почти в гигабайт. Теперь нужно сделать этот файл блочным устройством и, при этом, пропустить его через механизм шифрования ядра linux. Я выберу алгоритм blowfish. Подгрузка модулей:
Ассоциация образа с блочным устройством со включенным шифрованием:
Команда запросит ввести пароль, который и будет ключем к образу. Если ключ введен не правильно, система не смонтируется. Можно будет заново создать данные в образе, используя новый ключ, но к старым данным доступа не будет.
Создаем файловую систему и монтируем:
Образ готов к записи данных. После завершения работы с ним, нужно не забыть его отмонтировать и отключить от блочного loop устройства:
Теперь шифрованный образ готов.
Основные идеи я расписал, однако множество задач, которые можно решить при помощи маленькой программки, имя которой состоит из двух букв, намного шире. Программа «dd» — яркий пример того, что IT'шники называют «UNIX way»: одна программа — часть механизма, выполняет исключительно свою задачу, и выполняет ее хорошо. В руках человека, который знает свое дело, которому свойственен не стандартный подход к решению задачи, такие маленькие программки помогут быстро и эффективно решать комплексные задачи, которые, на первый взгляд, должны решать крупные специализированные пакеты.
Читайте также: