Команда dd linux запись образа на флешку

Обновлено: 02.07.2024

Утилита dd — это программа Unix, утилита командной строки, которую в Linux используют для низкоуровневого копирования и конвертации файлов. Первый прототип программы создан еще в 1974 году, а на Unix она работает с 1984 года. Функции утилиты на самом деле значительно шире и об этом мы более детально расскажем в статье ниже.

На самом деле, команда dd — не единственный инструмент, ведь большинство задач на Linux можно решить в несколько способов. Мы же попытаемся рассказать, почему утилита dd до сих пор популярна среди разработчиков, хоть ее и называют иногда data destroyer .

Назначение команды dd

Мы упоминали, что основная задача dd — обработка файлов. Но в Linux все устройства, порты, оперативная память и память с кодом процессов отображаются как файлы, а это значит, что над ними можно проводить операции в dd . Еще утилита позволяет осуществлять выборочное копирование файлов с диска. Например, переместить фрагмент файла определенного размера или пропустить несколько гигабайт. Эта функция также помогает считать файлы с поврежденного носителя, изменить расположение байтов в файле, создавать файлы фиксированного размера. Кроме этого в dd можно создать дополнительную копию загрузочного сектора жесткого диска или прочитать блоки из системных файлов.

Дисклеймер: работайте осторожно

Разработчики задумывали, что название dd должно отсылать к аббревиатуре языка Job Control Language (JCL), который использовала IBM. В этом языке оператор dd расшифровывался как «Доступ к данным» (Data Access).

Работая с утилитой, помните, что при передаче некорректных аргументов, часть или все данные диска могут быть потеряны. Поэтому крайне важно корректно указывать адреса и имена целевых файлов. В связи с этим dd имеет несколько ироничных расшифровок-прозвищ, таких как data destroyer , « добей диск » и delete data . Но инструмент продолжают применять из-за его мощности, надежности и простоты в использовании.

При работе с dd рекомендуется использовать Live-режим Linux, то есть запускать систему без установки на компьютер, например с USB-носителя. Live-режим работает медленнее из-за копирования каждого байта, даже с неиспользуемого пространства.

Обратите внимание, что dd не отличает занятое и свободное дисковое пространство и копирует все. Поэтому жесткий диск, на который переносятся данные должен быть не меньшим, чем клонируемый.

Стандартный синтаксис команды dd

Обычно синтаксис кода состоит из трех команд:

Обозначает путь к файлу откуда будут взяты данные. Может быть как обычным файлом, так и файлом устройства.

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

Параметры для работы с командой dd

В dd довольно большой набор дополнительных параметров для конфигурации настроек. Мы рассмотрим основные из них:

  • bs — Установить размер блока ( block size ), который система будет считывать. Оптимально использовать 4–8 MB;
  • cbs — Установить, сколько байт нужно записывать за один раз;
  • count — Выбрать определенное число блоков для копирования. А чтобы обозначить их размер, подключают bs -опцию.
  • ibs — обозначить сколько байт нужно считать за раз. По умолчанию — 512 байт.
  • obs — Обозначить сколько байт нужно записать за раз. По умолчанию — 512 байт.
  • seek — Пропустить определенное количество байт в начале вывода;
  • skip — Пропустить определенное количество байт в начале ввода;
  • conv — Параметр, чтобы преобразовать файл. Параметр conv имеет собственные параметры. С их помощью, например, можно конвертировать систему кодов ASCII в EBCDIC и наоборот. В таблице указаны основные способы конвертации файлов.

Параметры для iflag, oflag:

Также отдельно стоит рассмотреть параметры iflag и oflag . Они позволяют задать дополнительные флаги: iflag — для устройств ввода, а oflag — для вывода.

Наиболее популярные флаги:

  • append — режим дописывания данных в файл. Append применяют только для вывода. Когда вы объедините этот флаг с конструкцией “ of=файл ”, нужно еще указать параметр “ conv=notrunc ”, чтобы выходной файл не был обрезан из-за добавления новых данных.
  • direct — режим обработки данных в обход кэша. Этот флаг повышает скорость.
  • dsync — запись данных с синхронизацией. Этот флаг повышает надежность.
  • sync — так же как и dsync , но и с метаданными.
  • directory — выдавать ошибку, при использовании каталога.
  • fullblock — чтение только полных блоков. Применяется только для iflag .
  • noatime — не обновляет время доступа к элементам файловой системы. Флаг повышает скорость.
  • nofollow — запрет на переход по символическим ссылкам.

Примеры использования dd

Передача образа Linux на флешку

sudo mount /dev/sdc1 /mnt/usb

Дальше нужно определить куда записывать данные: на раздел флешки или на саму флешку. В случае ISO-образа нужно писать на раздел. Если образ диска типа img , то непосредственно на флешку.

Обычно это выглядит так:

В случае записи Linux на флешку, а не на раздел, единицу после имени указывать не нужно. Также после этого этапа обязательно нужно выполнить команду sync , чтобы не потерять часть данных, так как dd завершает работу раньше чем данные записаны на флешку.

Клонирование диска

Скопировать данные можно как и с всего устройства, так и с отдельного диска. Примерный код перемещения жесткого диска ( sda ) на внешнее устройство sdb1 будет выглядеть так:

sudo dd if=/dev/sda of=/dev/sdb1 bs=64K conv=noerror,sync

То есть здесь мы вначале установили размер блока, командой noeror дали инструкцию продолжать запись и при этом не замечать ошибки при чтении, а sync указывает на заполнения блоков нулями при ошибках чтения.

Обычно dd не отображает изменений в ходе исполнения. Но можно передать инструменту опцию status=progress . Тогда система будет отображать информацию о количестве скопированных данных в режиме реального времени.

Передача файла образа диска на другой компьютер

Назовем другой компьютер именем newcomputer . Тогда команда для передачи файла будет выглядеть так:

Архивация образа диска

Часто полезно записать сжатый образ диска, например, чтобы сделать бэкап данных. Архивацию можно реализовать несколькими способами. Наиболее популярные — утилитами bzip2 и gzip .

Вот пример кода с bzip2 сжатием:

Или применять gzip :

$ sudo dd if=/dev/disk3 | gzip -c > /Users/captain/raspberrypi.img.gz

Разные алгоритмы сжатия отличаются по производительности и дают разный размер архива. Также можно добавить дополнительные опции, например, размер блоков ( bs ), наблюдение за статусом ( status=progress ) и запись данных выходного файла ( conv=fsync ).

Извлечение данных из резервной копии

Когда утилита dd завершает работу с клонирования диска, вы получаете образ диска с названием backup_image.img.gz . Чтобы его открыть, сначала нужно получить права суперпользователя.

Например, Ubuntu это выполняется командой sudo su + пароль компьютера. В других дистрибутивах алгоритм действий аналогичный, но применяете команду su . Такую же команду нужно повторить если восстановления из образа данных жесткого диска:

Синтаксис команды:

gunzip/+ Путь кореневой директории диска/ /backup_image.img.gz | dd of=/dev/sda

Создать образ оптического диска формата ISO

Для решения этой задачи фактически нужно прочитать «по блокам» информацию с диска и сохранить их в файле. Код для решения задачи будет выглядеть вот так:

Восстановить файл с поврежденного устройства или создать образ этого носителя

В ситуации, когда вы потеряли доступ к документам или фотографиям из-за поврежденного диска, можно попробовать перенести информацию утилитой dd . Производим перезапись файлов, указав команду пропускать поврежденные блоки.

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

Другой вариант — создать файл образа поврежденного диска и попробовать вытащить данные из него.

Анализ содержания жесткого диска

Часто нужно отыскать информацию в определенной части диска. Для этого система может пропустить считывание ненужной части блоков. Например, вы хотите узнать содержимое диска начиная с 2000-го блока (в примере произвольное число). Чтобы это сделать, достаточно выполнить такую команду:

Тестирование скорости чтения и записи дисков

В утилите dd можно проверить насколько быстро жесткие диски и съемные устройства, например флешки, считывают и записывают информацию. Для этого мы создаем файл с блоками фиксированного размера. А потом считываем файл, используя тот же размер блока.

Так будет выглядеть синтаксис команд:

При записи мы можем считывать диск /dev/zero , он будет источником бесконечных байтов, а отправляем его по адресу dev/null . Этот раздел нигде физически не существует. Во время передачи dd просто отслеживает скорость передачи файлов и отображает сведения об операции.

Чтобы определить скорость чтения кэшированных файлов, можно задать программе такие команды:

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

Чтобы узнать, насколько быстро проходит запись, выполните следующую команду:

Чтобы узнать производительность внешних жестких дисков, флешек или других устройств, нужно сначала их монтировать, а затем повторить вышеуказанные команды. Альтернативный вариант — заменить tempfile на путь к точке монтирования:

sudo dd if=/dev/zero of=/media/user1/Flashcard/tempfile bs=1M count=1024

Максимальная скорость съемных устройств, которые имеют подключение USB 2.0, — 480 Мбит или 60 МВ в секунду. Но из-за различных ограничений максимальная пропускная способность ограничена на уровне примерно в 35 МВ/с.

Копирование файлов

Также утилиту dd можно применять и для простого копирования файлов. Для этого, на самом деле, лучше использовать специальную утилиту cp . Но иногда нет необходимости переключаться. Сделать копию данных можно с помощью такого кода:

$ dd if=/home/user1/article.txt /home/user1/article_copy.txt

В заключение

Утилита dd предназначена для форматирования, обработки и конвертации файлов. Она работает на «низком» уровне, то есть позволяет взаимодействовать с секторами дисков. Поэтому во время работы важно помнить о соответствии размеров дисков и использовать флаг sync для синхронизации данных. В остальном это быстрый и удобный инструмент для модерации данных на устройствах и его применение ограничивается лишь фантазией пользователя.

Highload нужны авторы технических текстов. Вы наш человек, если разбираетесь в разработке, знаете языки программирования и умеете просто писать о сложном!
Откликнуться на вакансию можно здесь .


Для Linux разработано достаточно графических программ по созданию загрузочного USB носителя (флешки) с iso-образом дистрибутива, таких как: Unetbootin, Создание загрузочного диска (usb-creator-gtk) - в Ubuntu по умолчанию, MultiSystem LiveUSB Multiboot и некоторые другие.
Но мне хотелось бы поделиться с вами в этой статье о том, как создать загрузочную флешку с iso-образом дистрибутива из терминала.
Как известно, терминал установлен в любом дистрибутиве Linux по умолчанию, поэтому устанавливать дополнительных программ не потребуется. Единственно, что нужно для создания загрузочного USB-носителя, это загруженный из сети ISO-файл с образом дистрибутива, который вы хотите записать на флешку и отформатированная флешка.
Как правильно отформатировать флешку я писал ЗДЕСЬ.

Итак, предположим у вас загружен ISO-файл с образом дистрибутива и подготовлена флешка.

Терминальная команда для записи iso-образа дистрибутива выглядит следующим образом:

sudo dd if= путь к.iso of=/dev/sdb

Где вместо путь к.iso нужно указать путь к iso-файлу из вашей папки Загрузки.
sdb в конце команды, это флешка на которую будет записан образ. Чтобы определить вашу флешку, выполните в терминале:


И если у вас флешка определилась по-другому, измените в команде.

Чтобы правильно ввести в команду путь к файлу, откройте папку с файлом, откройте рядом терминал и перетащите в него файл:


В терминале отобразится путь к файлу и сам файл .iso. Скопируйте его без кавычек и вставьте в команду, а в терминале нажмите сочетание клавиш Ctrl+C для сброса и отображения новой строки приглашения.

Проще всего создавать команду в текстовом редакторе.
У меня получилась следующая команда:


Теперь вставьте флешку в порт компьютера, скопируйте полученную команду из текстового редактора, введите в терминал и выполните (нажмите Enter):


Курсор терминала будет моргать и кажется что ни чего не происходит, но на самом деле идёт запись. Дождитесь окончания записи образа и по окончании вы должны увидеть в терминале примерно следующее:


Вот и всё. Ваша флешка стала загрузочной и вы можете теперь производить установку дистрибутива на любом компьютере.

Довольно часто системным администраторам приходится копировать различные двоичные данные. Например, иногда может понадобиться сделать резервную копию жесткого диска, создать пустой файл, заполненный нулями для организации пространства подкачки или другой виртуальной файловой системы.

Для решения всех этих задач используется утилита dd linux, которая просто выполняет копирование данных из одного места в другое на двоичном уровне. Она может скопировать CD/DVD диск, раздел на диске или даже целый жесткий диск. В этой статье мы рассмотрим что из себя представляет команда dd linux, основные ее опции и параметры, а также как ею пользоваться.

Как работает команда dd?

Сначала нужно понять как работает команда dd и что она делает. Фактически, это аналог утилиты копирования файлов cp только для блочных данных. Утилита просто переносит по одному блоку данных указанного размера с одного места в другое. Поскольку в Linux все, в том числе, устройства, считается файлами, вы можете переносить устройства в файлы и наоборот.

С помощью различных опций утилиты можно повлиять на размер блока, а это, в свою очередь, уже влияет на скорость работы программы. Дальше мы рассмотрим основные опции утилиты и ее возможности.

Команда dd

Синтаксис утилиты достаточно необычен, но в то же время очень прост, после того как вы его запомните и привыкнете:

$ dd if= источник_копирования of= место_назначения параметры

С помощью параметра if вам нужно указать источник, откуда будут копироваться блоки, это может быть устройство, например, /dev/sda или файл - disk.img. Дальше, с помощью параметра of необходимо задать устройство или файл назначения. Другие параметры имеют такой же синтаксис, как if и of.

Теперь давайте рассмотрим дополнительные параметры:

  • bs - указывает сколько байт читать и записывать за один раз;
  • cbs - сколько байт нужно записывать за один раз;
  • count - скопировать указанное количество блоков, размер одного блока указывается в параметре bs;
  • conv - применить фильтры к потоку данных;
  • ibs - читать указанное количество байт за раз;
  • obs - записывать указанное количество байт за раз;
  • seek - пропустить указанное количество байт в начале устройства для чтения;
  • skip - пропустить указанное количество байт в начале устройства вывода;
  • status - указывает насколько подробным нужно сделать вывод;
  • iflag, oflag - позволяет задать дополнительные флаги работы для устройства ввода и вывода, основные из них: nocache, nofollow.

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

Как пользоваться dd?

Обычные пользователи используют команду dd чаще всего для создания образов дисков DVD или CD. Например, чтобы сохранить образ диска в файл можно использовать такую команду:

sudo dd if=/dev/sr0 of=

/CD.iso bs=2048 conv=noerror

Фильтр noerror позволяет отключить реагирование на ошибки. Дальше, вы можете создать образ жесткого диска или раздела на нем и сохранить этот образ на диск. Только смотрите не сохраните на тот же жесткий диск или раздел, чтобы не вызвать рекурсию:

В вашей домашней папке будет создан файл с именем disk1.img, который в будущем можно будет развернуть и восстановить испорченную систему. Чтобы записать образ на жесткий диск или раздел достаточно поменять местами адреса устройств:

Очень важная и полезная опция - это bs. Она позволяет очень сильно влиять на скорость работы утилиты. Этот параметр позволяет установить размер одного блока при передаче данных. Здесь нужно задать цифровое значение с одним из таких модификаторов формата:

Команда dd linux использует именно такую систему, она сложная, но от этого никуда не деться. Ее придется понять и запомнить. Например, 2b - это 1 килобайт, и 1k, это тоже 1 килобайт, 1М - 1 мегабайт. По умолчанию утилита использует размер блока - 512 байт. Например, чтобы ускорить копирование диска можно брать блоки размером по 5 мегабайт. Для этого применяется такая команда:


Следующий параметр - это count. С помощью него можно указать сколько блоков необходимо скопировать. Например, мы можем создать файл размером 512 мегабайт, заполнив его нулями из /dev/zero или случайными цифрами из /dev/random:

sudo dd if=/dev/zero of=file.img bs=1M count=512


Обратите внимание, что этот параметр указывает не размер в мегабайтах, а всего лишь количество блоков. Поэтому, если вы укажите размер блока 1b, то для создания файла размером 1Кб нужно взять только два блока. С помощью этого параметра также можно сделать резервную копию таблицы разделов MBR. Для этого скопируем в файл первые 512 байт жесткого диска:

sudo dd if=/dev/sda of=mbr.img bs=1b count=1

Для восстановления используйте обычную команду развертывания образа на диск.

dd if =/dev/sda2 | bzip2 disk.img.bz2

Также можно использовать утилиту dd linux для копирования файлов, хотя это и не является ее прямым предназначением:

dd if=/home/sergiy/test.txt of=/home/sergiy/test1.txt

Как вы знаете, команда dd linux пишет данные на диск непосредственно в двоичном виде, это значит, что записываются нули и единицы. Они переопределяют то, что было раньше размещено на устройстве для записи. Поэтому чтобы стереть диск вы можете просто забить его нулями из /dev/zero.

sudo dd if=/dev/zero of=/dev/sdb

Такое использование dd приводит к тому что весь диск будет полностью стерт.

Выводы

В этой статье мы рассмотрели как пользоваться dd linux, для чего можно применять эту утилиту и насколько она может быть полезной. Это почти незаменимый инструмент системного администратора, поскольку с помощью нее можно делать резервные копии целой системы. И теперь вы знаете как. Если у вас остались вопросы, спрашивайте в комментариях!

Казалось бы, что нет ничего проще, указал загрузочный iso образ, указал устройство для записи данного образа, и вот тебе готовая загрузочная флешка. Все почти именно так. Но есть одно но. Заключается оно в том, что не всегда можно загрузиться с такой флешки после данных манипуляций. Разберем почему это происходит. Для этого, как всегда немного теории для внесения ясности.


Структура ISO 9660

ISO файл является полной посекторной копией файловой системы компакт диска. На данный момент, существуют два типа файловых систем для компакт дисков, это ISO 9660 и UDF. Первой была ISO 9660. После, с течением времени, когда появилась необходимость переносить фалы большого объема, а так же поддерживать возможность использовать длинные имена хранимых файлов, начали появляться дополнительные модификации для данной файловой системы (Joliet, UDF).


А уже позже, с учетом всех данных требований, была создана файловая система UDF. Которая ныне используется на DVD и BD дисках. Структуры обоих файловых систем схожи.


Размер сектора равен 2048 байт. В самом начале файловой системы присутствует неиспользуемая область размером 32 КБ (32768 байт), расположена в секторах 0-15.


Сектор 16, содержит информацию о первичном, т.е. основном, разделе диска.


Сектор 17, в случае загрузочного диска, содержит запись системы El Torito с адресом загрузочной области Boot Catalog. Данный адрес представлен двухбайтовым числом, что соответствует первым 80 секторам диска (от 0 до FFFF, что равно 65535).



Сектор 18 и последующие, отводятся для хранения файловой таблицы и самих файлов.


Гибридный ISO

Чуть выше, при рассмотрении файловой системы ISO 9660, было сказано о неиспользуемом пространстве в лице первых 16 секторов (первые 32768 байт) данной файловой системы. И это означает, что в этом пространстве может располагаться какая угодно информация. И эта информация никак не повлияет на работу файловой системы компакт диска. Поэтому, в данном пространстве можно разместить, к примеру, загрузочную запись MBR, или EFI раздел с загрузочным исполняемым файлом, либо и то и другое.

Данную возможность как раз и используют на практике для создания так называемых гибридных ISO образов, которые можно использовать как для записи на компакт диск, так и на любой другой накопитель (флешка в том числе) с которого поддерживается загрузка в BIOS/UEFI BIOS системы.

К примеру, вот так выглядит обычный загрузочный ISO в HEX редакторе, а именно его первые сектора.


А вот так, выглядит начало гибридного ISO.


Из вышесказанного следует, что для прямой записи на флешку подходят только гибридные ISO файлы. Для их определения, достаточно проверить HEX редактором первые сектора данных образов. В ОС Windows, для этих целей подойдет бесплатны HEX редактор HxD. А в ОС Linux можно воспользоваться консольной программой hexdump.

Запись ISO образа с помощью консольной программы dd


Команды записи ISO образа с помощью программы dd выглядят так:

dd if=image.iso of=\\?\Device\Harddisk2\Partition0 bs=2048 --progress

dd if=image.iso of=/dev/sda bs=2048

или тоже самое, но уже с отображением прогресса

pv image.iso | dd of=/dev/sda bs=2048

Замечу, что для параметра of указывается физическое устройство к которому относится наша флешка. Получить данную информацию для Windows версии dd, можно выполнив команду dd --list , в Linux это делается командой fdisk -l .

Тестирование

Для демонстрации, я выбрал 9 различных загрузочных ISO образов. Гибридные будут отмечены зеленым цветом, красным обычные. debian-live-8.6.0-amd64-gnome-desktop.iso
drweb-livedisk-900-cd.iso
FD12CD.iso
kali-linux-2016.2-amd64.iso
kav_rescue_10.iso
rescatux-0.51b3.iso
systemrescuecd-x86-5.1.2.iso
ubcd537.iso
ubuntu-16.10-desktop-amd64.iso


Проверим достоверность всего вышесказанного, записав по одному из типов ISO на флешку, и после загрузившись с данной флешки в виртуальной машине VirtualBox.

Читайте также: