Команда dd и все, что с ней связано
В UNIX системах есть одна очень древняя команда, которая называется dd. Она предназначена для того, чтобы что-то куда-то копировать побайтово. На первый взгляд — ничего выдающегося, но если рассмотреть все возможности этого универсального инструмента, то можно выполнять довольно сложные операции без привлечения дополнительного ПО, например: выполнять резервную копию MBR, создавать дампы данных с различных накопителей, зеркалировать носители информации, восстанавливать из резервной копии данные на носители и многое другое, а, при совмещении возможностей dd и поддержке криптографических алгоритмов ядра Linux, можно даже создавать зашифрованные файлы, содержащие в себе целую файловую систему.
Опять же, в заметке я опишу самые часто используемые примеры использования команды, которые очень облегчают работу в UNIX системах.
Начну с небольшого примера, наглядно иллюстрирующего основные параметры команды:
# dd if=/dev/urandom of=/dev/null bs=100M count=5
Создание образа диска:
# dd if=/dev/cdrom of=image.iso
Команда будет считывать из устройства данные и записывать в файл до тех пор, пока не достигнет окончания устройства. Если диск битый, можно попробовать его прочитать, игнорируя ошибки чтения:
# dd if=/dev/cdrom of=image.iso conv=noerror
Параметр «conv» позволяет подключать несколько фильтров, применимых к потоку данных. Фильтр «noerror» как раз отключает остановку работы программы, когда наткнется на ошибку чтения. Таким образом, некоторые данные с диска все же можно будет прочитать. Точно таким образом я спас данные со своей флешки Corsair, которую погнули: подобрал подходящее положение, когда контакт есть, и сделал дамп файловой системы.
Подключить, кстати, такие образы можно при помощи команды mount с ключем «-o loop»:
Если что-то не получается, процесс разбивается на 2 уровня:
Если и так не работает, значит файловая система образа полетела.
Работа с носителями информации
Очень простое, хоть и не оптимальное решение клонирования жесткого диска:
# dd if=/dev/sda of=/dev/sdb bs=4096
Все то же побайтовой копирование с размером буфера 4 Кб. Минус способа в том, что при любой заполненности разделов копироваться будут все биты, что не выгодно при копировании разделов с маленькой заполненностью. Чтобы уменьшить время копирования при манипуляции с большими объемами данных, можно просто перенести MBR на новый носитель (я ниже опишу как), перечитать таблицу разделов ядра (при помощи того же fdisk), создать файловые системы и просто скопировать файлы (не забыв сохранить права доступа к файлам).
Как вариант, можно даже по расписанию делать бекап раздела по сети. Разрулив ключи ssh будет работать такая схема:
# dd if=/dev/DEVICE | ssh user@host «dd of=/home/user/DEVICE.img».
Когда-то читал исследование, согласно которому очень большая доля жестких дисков на барахолке подвергается восстановлению данных без привлечения чего-то специализированного, и содержит конфиденциальную информацию. Чтобы на носителе ничего нельзя было восстановить — можно забить его нулями:
# dd if=/dev/zero of=/dev/DEVICE
Думаю, понятно на что нужно заменить DEVICE. После проведения лекций по Linux, я очень тщательно стал следить за тем, что пишу.
Проверить можно тем же dd, но преобразовав данные в hex:
Должны посыпаться нули.
MBR расположена в первых 512 байтах жесткого диска, и состоит из таблицы разделов, загрузчика и пары доп. байт. Иногда, ее приходится бекапить, восстанавливать и т.д. Бекап выполняется так:
# dd if=/dev/sda of=mbr.img bs=512 count=1
Восстановить можно проще:
# dd if=mbr.img of=/dev/sda
Причины этих махинаций с MBR могут быть разные, однако хочу рассказать одну особенность, взятую из опыта: после восстановления давней копии MBR, где один из разделов был ext3, а позже стал FAT и использовался Windows, раздел перестал видиться виндой. Причина — ID раздела, который хранится в MBR. Если UNIX монтирует файловые системы согласно суперблоку, то винды ориентируются на ID разделов из MBR. Поэтому всегда нужно проверять ID разделов при помощи fdisk, особенно если на компьютере есть винды.
При помощи dd можно генерировать файлы, а затем использовать их как контейнеры других файловых систем даже в зашифрованном виде. Технология следующая:
При помощи dd создается файл, забитый нулями (случайными числами забивать не рационально: долго и бессмысленно):
# dd if=/dev/zero of=image.crypted bs=1M count=1000
Создался файл размером почти в гигабайт. Теперь нужно сделать этот файл блочным устройством и, при этом, пропустить его через механизм шифрования ядра linux. Я выберу алгоритм blowfish. Подгрузка модулей:
# modprobe cryptoloop
# modprobe blowfish
Ассоциация образа с блочным устройством со включенным шифрованием:
Команда запросит ввести пароль, который и будет ключем к образу. Если ключ введен не правильно, система не смонтируется. Можно будет заново создать данные в образе, используя новый ключ, но к старым данным доступа не будет.
Создаем файловую систему и монтируем:
# mkfs.ext2 /dev/loop0
# mount /dev/loop0 /mnt/image
Образ готов к записи данных. После завершения работы с ним, нужно не забыть его отмонтировать и отключить от блочного loop устройства:
Теперь шифрованный образ готов.
Основные идеи я расписал, однако множество задач, которые можно решить при помощи маленькой программки, имя которой состоит из двух букв, намного шире. Программа «dd» — яркий пример того, что IT’шники называют «UNIX way»: одна программа — часть механизма, выполняет исключительно свою задачу, и выполняет ее хорошо. В руках человека, который знает свое дело, которому свойственен не стандартный подход к решению задачи, такие маленькие программки помогут быстро и эффективно решать комплексные задачи, которые, на первый взгляд, должны решать крупные специализированные пакеты.
Команда dd Linux
Довольно часто системным администраторам приходится копировать различные двоичные данные. Например, иногда может понадобиться сделать резервную копию жесткого диска, создать пустой файл, заполненный нулями для организации пространства подкачки или другой виртуальной файловой системы.
Для решения всех этих задач используется утилита dd linux, которая просто выполняет копирование данных из одного места в другое на двоичном уровне. Она может скопировать CD/DVD диск, раздел на диске или даже целый жесткий диск. В этой статье мы рассмотрим что из себя представляет команда dd linux, основные ее опции и параметры, а также как ею пользоваться.
Как работает команда dd?
Сначала нужно понять как работает команда dd и что она делает. Фактически, это аналог утилиты копирования файлов cp только для блочных данных. Утилита просто переносит по одному блоку данных указанного размера с одного места в другое. Поскольку в Linux все, в том числе, устройства, считается файлами, вы можете переносить устройства в файлы и наоборот.
С помощью различных опций утилиты можно повлиять на размер блока, а это, в свою очередь, уже влияет на скорость работы программы. Дальше мы рассмотрим основные опции утилиты и ее возможности.
Команда dd
Синтаксис утилиты достаточно необычен, но в то же время очень прост, после того как вы его запомните и привыкнете:
$ dd if= источник_копирования of= место_назначения параметры
Теперь давайте рассмотрим дополнительные параметры:
Это были все основные опции, которые вам могут понадобиться. Теперь перейдем ближе к практике и рассмотрим несколько примеров как пользоваться утилитой dd linux.
Как пользоваться dd?
Обычные пользователи используют команду dd чаще всего для создания образов дисков DVD или CD. Например, чтобы сохранить образ диска в файл можно использовать такую команду:
sudo dd if=/dev/sr0 of=
/CD.iso bs=2048 conv=noerror
Фильтр noerror позволяет отключить реагирование на ошибки. Дальше, вы можете создать образ жесткого диска или раздела на нем и сохранить этот образ на диск. Только смотрите не сохраните на тот же жесткий диск или раздел, чтобы не вызвать рекурсию:
В вашей домашней папке будет создан файл с именем disk1.img, который в будущем можно будет развернуть и восстановить испорченную систему. Чтобы записать образ на жесткий диск или раздел достаточно поменять местами адреса устройств:
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
Для восстановления используйте обычную команду развертывания образа на диск.
Если образ диска слишком большой, можно перенаправить весь вывод нестандартный поток вывода утилиты gzip:
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, для чего можно применять эту утилиту и насколько она может быть полезной. Это почти незаменимый инструмент системного администратора, поскольку с помощью нее можно делать резервные копии целой системы. И теперь вы знаете как. Если у вас остались вопросы, спрашивайте в комментариях!
Создание Live USB-дисков в Linux с помощью команды dd
Существует несколько программ с графическим интерфейсом, предназначенных для создания Live USB-дисков. Вероятно, в Linux самой популярной из них является Etcher. В Ubuntu есть собственный инструмент для решения этой задачи — Startup Disk Creator.
Это — CLI-инструмент, который даёт тому, кто его выбирает, мощные возможности по копированию и конвертированию файлов.
Обычно dd используют для того, чтобы записывать ISO-файлы на внешние носители информации, вроде USB-дисков. Потом такой носитель информации можно использовать, например, для установки записанного на него Linux-дистрибутива на обычный компьютер или на ноутбук.
Создание Live USB-дисков на основе ISO-файлов с помощью команды dd
Прежде чем я покажу вам пошаговый план работы с dd — хочу в двух словах рассказать об этой команде и продемонстрировать пример её использования.
Вот как выглядит вызов команды dd для записи ISO-файла на USB-диск:
Разберём эту команду.
Если она установлена в значение progress — это приведёт к тому, что dd будет периодически сообщать нам о том, сколько данных из ISO-файла уже перенесено на диск, и о том, сколько времени, приблизительно, осталось до завершения операции.
Вариант noxfer позволяет скрыть некоторые сведения, выводимые после того, как перенос данных на USB-диск завершён. Например — сведения о том, сколько времени заняла процедура копирования ISO-файла.
Шаг 0. Загрузка ISO-файла
Само собой разумеется то, что для того, чтобы записать на USB-диск ISO-файл, этот файл сначала надо где-то раздобыть.
Шаг 1. Выяснение метки USB-диска
Сначала подключим USB-диск к компьютеру.
Поиск USB-диска с помощью средств командной строки
Если вы предпочитаете для решения подобных задач использовать программы с графическим интерфейсом — можете найти путь к нужному диску с помощью чего-то наподобие GNOME Disks.
Поиск USB-диска с помощью инструмента с графическим интерфейсом
Теперь, когда нам известен путь к нужному носителю информации, можно создать Live USB-диск.
Шаг 2. Запись ISO-файла на USB-диск
Откроем терминал в директории, в которой находится загруженный ISO-файл, и запустим следующую команду (запуская эту команду у себя — замените, если нужно, /dev/sdb на путь к вашему USB-диску):
После выполнения этой команды нужно будет некоторое время подождать и dd создаст Live USB-диск.
Создание Live USB-диска
Итоги
После завершения работы dd в вашем распоряжении окажется USB-диск, с которого можно загрузиться. Но, пожалуй, важнее то, что теперь вы лучше узнали инструменты командной строки Linux, освоили кое-что новое, позволяющее ускорить и упростить решение некоторых задач.
Чем вы пользуетесь для создания Live USB-дисков в Linux?
Запись образа Linux на флешку
В этой статье мы рассмотрим как выполняется запись образа Linux на флешку с помощью различных программ, а также вручную, используя только системные утилиты.
Запись образа Linux на флешку
Если вам нужно записать Windows на флешку, то достаточно отформатировать ее в NTFS и распаковать содержимое диска в корень флешки, такой вариант актуальный для современных систем, которые работают через UEFI. В Linux же все не так просто и придется использовать специальные программы.
Сразу нужно сказать, что существует два типа образов Linux:
Сначала рассмотрим специализированные программы для записи образов на флешку. Они всегда записывают образы на разделы флешки, в некоторых случаях, нужно даже чтобы флешка была примонтирована.
1. Запись образа в Unetbootin
Первым делом нужно установить утилиту. Она есть в репозиториях всех основных дистрибутивов, для установки в Ubuntu наберите:
sudo apt install unetbootin
sudo yum install unetbootin
sudo zypper install unetbootin
Запустить программу можно из главного меню, и для своей работы она попросит пароль.
В главном окне вы можете выбрать два способа записи диска, либо скачать образ из интернета:

Затем выберите флешку, на которую нужно выполнить запись и нажмите «Старт».
Запись выполняется довольно быстро, поэтому скоро вы получите готовую флешку с Linux, которую можно использовать.
2. Запись образа Etcher
В последнее время набирает популярности утилита для записи образов Etcher. У нее есть версия для Linux и Windows, как и у unetbootin, только здесь нет загрузки образов из сети, а интерфейс выглядит намного приятнее. Кроме того, недавно была добавлена поддержка создания мульти USB флешек и выделения раздела для хранения данных между перезагрузками в Ubuntu.
Программы нет в официальных репозиториях дистрибутивов, поэтому вам придется использовать AppImage образ или же можете установить ее из стороннего репозитория Ubuntu/Debain:
sudo tee «deb https://dl.bintray.com/resin-io/debian stable etcher» /etc/apt/sources.list
Добавляем ключ репозитория:
Обновляем список пакетов и устанавливаем Etcher:
sudo apt update && sudo apt install etcher-electron
Теперь вы можете запустить программу из главного меню системы.
После запуска вам будет необходимо выбрать образ, который вы собираетесь записать:
Затем выбрать устройство для записи:
И последний шаг, нажать кнопку «Finish», чтобы началась запись образа Linux на флешку. После завершения вы получите готовую к использованию флешку. Это самый просто способ записать linux iso на флешку.
Если вас интересует создание мультизагрузочных флешек, смотрите отдельную статью.
3. Запись образа утилитой dd
Записать linux на флешку вручную будет немного сложнее, чем с помощью графических программ, но это дает вам больше контроля над процессом записи. Нам понадобится только утилита dd, которая поставляется во всех дистрибутивах Linux по умолчанию.
Сначала нам нужно узнать как будет называться ваша флешка в системе. Для этого отключите ее, выполните команду:
Затем подключите и снова выполните:
Вы увидите, что появилось новое устройство, наша флешка, например, /dev/sdb. Дальше мы переходим к команде dd, но сначала размонтируйте флешку:
sudo umount /dev/sdb
Дальше нам нужно определиться куда писать, на раздел флешки или на саму флешку. Если это iso образ, то однозначно пишем на раздел. Если же вы имеете дело с img, попробуйте его примонтировать, если все хорошо и открывается файловая система, тоже пишем на раздел, в противном случае нужно писать на самую флешку. В большинстве случаев при записи на раздел будет достаточно выполнить такую команду:
Если же нужно записать linux на флешку, а не на раздел, просто не указывайте единицу после ее имени:
После этого обязательно нужно выполнить команду sync, поскольку dd завершает работу до того, как данные будут записаны на флешку и если вы ее извлечете, то потеряете часть данных:
Дальше можно использовать флешку в качестве загрузочной. Если вы записывали образ диска, для которого уже был установлен флаг загрузочный, то больше делать ничего не нужно.
4. Запись Linux на флешку в Windows
Новые пользователи могут захотеть записать образ Linux на флешку в Windows. Это сделать тоже очень просто, кроме того, что вы можете использовать перечисленные выше утилиты, для Windows есть отличная утилита Rufus. Вы можете скачать ее на официальном сайте. Программа не требует установки.
Запустите ее, сначала выберите устройство, на которое будет выполнятся запись:
Осталось нажать «Старт» и дождаться завершения записи образа. После этого флешка готова к использованию.
Выводы
В этой статье мы рассмотрели как выполняется запись linux на флешку. Как видите, это очень просто, независимо от операционной системы, которую вы используете. Вы можете использовать консольные и графические программы. Возможно, уже существуют другие приложения, которые лучше справляются с задачей, вы знаете такие? Обязательно напишите в комментариях!
BootDev
Создание загрузочных дисков и прочие полезные мелочи
Страницы
2017-12-16
Создание загрузочной флешки из ISO образа с помощью программы dd
Казалось бы, что нет ничего проще, указал загрузочный 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
dd if=image.iso of=/dev/sda bs=2048
или тоже самое, но уже с отображением прогресса
pv image.iso | dd of=/dev/sda bs=2048
Тестирование
Проверим достоверность всего вышесказанного, записав по одному из типов ISO на флешку, и после загрузившись с данной флешки в виртуальной машине VirtualBox.
































