Но продвинутые пользователи Linux, ради удобного и быстрого создания Live USB-дисков, постоянно обращаются к команде
dd
.Это — CLI-инструмент, который даёт тому, кто его выбирает, мощные возможности по копированию и конвертированию файлов.
Обычно
dd
используют для того, чтобы записывать ISO-файлы на внешние носители информации, вроде USB-дисков. Потом такой носитель информации можно использовать, например, для установки записанного на него Linux-дистрибутива на обычный компьютер или на ноутбук.Тут я расскажу о создании загрузочных USB-дисков с помощью
dd
. В частности, разберу команды, которые нужны для того, чтобы сначала найти в системе нужный диск, а потом записать на него ISO-файл.Создание Live USB-дисков на основе ISO-файлов с помощью команды dd
Прежде чем я покажу вам пошаговый план работы с
dd
— хочу в двух словах рассказать об этой команде и продемонстрировать пример её использования.Вот как выглядит вызов команды dd для записи ISO-файла на USB-диск:
dd if="./filename.iso" of="/dev/sdb" status="progress" conv="fsync"
Разберём эту команду.
Разбор команды dd
Сначала в командной строке вводят
dd
. Это, как и должно быть, просто имя команды, которую мы собираемся запустить.Далее указывают следующее:
if=»./filename.iso»
. Имя опции if
расшифровывается как input file — входной файл. Тут мы сообщаем dd
о том, какой именно ISO-файл хотим записать на USB-диск.После этого вводят путь к USB-диску. В данном случае это выглядит как
of=»/dev/sdb»
. Здесь of
означает output file, то есть — выходной файл.При работе с
dd
стоит помнить о том, что то, что указывают в опции of
, необязательно должно представлять собой файл в системе, используемой для работы. Тут можно указывать нечто вроде пути к внешнему устройству (именно так и сделано в нашем примере). И хотя выглядит этот путь как путь к обычному файлу, он, на самом деле, символизирует устройство, подключённое к компьютеру.Опция
status
может принимать одно из трёх значений: none
, noxfer
и progress
.Если она установлена в значение
progress
— это приведёт к тому, что dd
будет периодически сообщать нам о том, сколько данных из ISO-файла уже перенесено на диск, и о том, сколько времени, приблизительно, осталось до завершения операции.Если использовать тут значение
none
, то dd
ничего не будет сообщать о ходе процедуры, но, если в процессе записи образа на диск возникнут ошибки, программа об этом сообщит.Вариант
noxfer
позволяет скрыть некоторые сведения, выводимые после того, как перенос данных на USB-диск завершён. Например — сведения о том, сколько времени заняла процедура копирования ISO-файла.И, наконец, мы воспользовались вариантом
fsync
опции conv
. Это приводит к тому, что dd
не сообщит об успешном завершении операции до тех пор, пока весь ISO-файл не будет записан на USB-диск.Если эту опцию не указывать,
dd
, всё равно, правильно запишет данные (и при этом может показаться, что команда работает быстрее, чем с этой опцией), но может оказаться так, что системе понадобится некоторое время на то, чтобы, при попытке безопасно извлечь USB-диск, сообщить о том, что это возможно. Дело в том, что без этой опции завершение записи образа проводится в фоновом режиме, что позволяет пользователю в это время заняться какими-то другими делами.Теперь, когда мы разобрали команду
dd
, рассмотрим весь процесс записи ISO-файлов на USB-диски.Но, прежде чем мы продолжим, хочу вас кое о чём предупредить. Командная строка — это палка о двух концах. Будьте очень осторожны, выполняя команды наподобие
dd
. А именно — тщательно проконтролируйте то, что в этой команде используется правильный выходной файл. Ошибка при указании опции of
может привести к форматированию главного системного диска и к уничтожению файлов операционной системы, установленной на компьютере.Шаг 0. Загрузка ISO-файла
Само собой разумеется то, что для того, чтобы записать на USB-диск ISO-файл, этот файл сначала надо где-то раздобыть.
Я, испытывая команду
dd
, буду записывать на диск образ Ubuntu 20.04, который можно скачать отсюда.Шаг 1. Выяснение метки USB-диска
Сначала подключим USB-диск к компьютеру.
В вышеприведённом примере я, настраивая опцию
of
, ввёл /dev/sdb
. Обычно USB-диски, подключённые к системе, доступны именно по этому пути, но это — не некое железное правило, которое справедливо абсолютно всегда.В вашей системе это может быть какой-то другой путь. Выяснить это можно с помощью команды
lsblk
. Выполнив эту команду нужно поискать диск, размер которого соответствует USB-диску, на который планируется записать образ.Поиск USB-диска с помощью средств командной строки
Если вы предпочитаете для решения подобных задач использовать программы с графическим интерфейсом — можете найти путь к нужному диску с помощью чего-то наподобие GNOME Disks.
Поиск USB-диска с помощью инструмента с графическим интерфейсом
Теперь, когда нам известен путь к нужному носителю информации, можно создать Live USB-диск.
Шаг 2. Запись ISO-файла на USB-диск
Откроем терминал в директории, в которой находится загруженный ISO-файл, и запустим следующую команду (запуская эту команду у себя — замените, если нужно,
/dev/sdb
на путь к вашему USB-диску):sudo dd if="./ubuntu-20.04.2.0-desktop-amd64.iso" of="/dev/sdb" status="progress" conv="fsync"
После выполнения этой команды нужно будет некоторое время подождать и
dd
создаст Live USB-диск.Создание Live USB-диска
Итоги
После завершения работы
dd
в вашем распоряжении окажется USB-диск, с которого можно загрузиться. Но, пожалуй, важнее то, что теперь вы лучше узнали инструменты командной строки Linux, освоили кое-что новое, позволяющее ускорить и упростить решение некоторых задач.Чем вы пользуетесь для создания Live USB-дисков в Linux?
Комментарии (30)
Sonzanie
01.10.2021 16:49+6Это Хабр или Ответы mail.ru?
Рассказываете очевиднейшие вещи, известные каждому, кто пользовался GNU/Linux хотя бы неделю.
dlinyj
01.10.2021 16:58+3С другой стороны, не все это помнят и знают, поэтому стоит напомнить. Например, дети, которые начинают осваивать линукс, не всегда понимают что и куда писать.
abutorin
01.10.2021 17:05+3Например, дети
РКН тоже сначала говорил что это все забота о детях.
Просто для статей для новичков есть другие сайты. На них таких вопросов и ответов достаточно.
Любому новичку, который решился бы написать такую статью на хабре опустили бы карму далеко в минус. А так, вы просто пользуетесь своим корпоративным аккаунтом и пишете то, что большинству аудитории не интересно.
ZEN_LS
01.10.2021 18:24Я вот, например, всю жизнь делал так:
sudo watch -n 10 pkill -USR1 dd
а тут вот как оно оказалось.DaemonGloom
01.10.2021 19:45+1Параметр status есть не везде (и появился сравнительно не так давно), а ваш метод универсальный.
ovalsky
01.10.2021 19:34+1С другой стороны, не все это помнят и знают, поэтому стоит напомнить.
т.е. если я сейчас загуглю, то больше нигде не смогу найти информации по dd?
Например, дети
Ну если ребёнок не в состоянии загуглить такое, то как он её здесь прочитает, где-то принудительно заставляют читать хабр?
rogoz
01.10.2021 18:28+7Вроде без bs всё печально медленно идёт.
sudo dd if="./ubuntu-20.04.2.0-desktop-amd64.iso" of="/dev/sdb" bs=1M oflag=dsync status=progress
r_noise
02.10.2021 10:11Не претендую на истину, но разве bs не нужно подбирать под размер физического кластера чтобы он шел быстрее?
DistortNeo
15.10.2021 00:05Нет. Размер больше использовать можно и даже нужно из-за высоких накладных расходов как на системные вызовы, так и на передачу команд оборудованию.
Oxyd
13.10.2021 19:46На флешках размер сектора обычно 512байт.
$ sudo fdisk -l /dev/sdc|awk -F/ '/I\/O/{print $3}'|awk -F: '{print $2}' 512 bytes
Так что и
bs=512
тут будет правильным.rogoz
14.10.2021 23:51+4и r_noise
Так что и bs=512 тут будет правильным.
Как скажете.sudo dd if=/dev/urandom of="/dev/sdb" bs=1M oflag=dsync status=progress
16,1 MB/s
sudo dd if=/dev/urandom of="/dev/sdb" bs=512 oflag=dsync status=progress
314 kB/s
sudo dd if=/dev/urandom of="/dev/sdb" oflag=dsync status=progress
294 kB/s
DistortNeo
15.10.2021 00:08+2Флешка только рапортует о том, что у неё сектор 512 байт, а вот реальный размер страниц флеш-памяти может быть и 4K. А сами страницы объединяются в блоки размера порядка 2М. Перезаписать страницу в блоке можно только стерев весь блок.
Так что если будете писать по 512 байт с выставлением флагов, запрещающих кэширование, то получите дичайший write amplification и тормоза.Oxyd
15.10.2021 03:56Интересно, а как-то можно определить реальный размер страниц ФП конкретной флешки?
DistortNeo
15.10.2021 11:28Программно — никак, особенно если это USB-флешка, где контроллер вносит свои коррективы. Просто писать блоками максимально возможного размера.
icCE
01.10.2021 19:25+4```После завершения работы
dd
в вашем распоряжении окажется USB-диск, с которого можно загрузиться. ```Далеко не факт.
1) бывает несколько размет USB
2) бывают определенные проблемы с загрузчиком, так как есть разные способы загрузки с usb
3) сам дист при старте ядра, дальше может не грузится, так как будет ожидать например LABEL или чего то еще, в итоге все выпадет в корку
итд.
yeputons
01.10.2021 20:20+1На близкую тему: на самом деле ISO вообще не предназначен для USB и там нужна особая магия от создателей образов.
Sly_tom_cat
01.10.2021 22:37Эта магия уже (ИМХО) во все образы добавлена много лет как.
JTG
02.10.2021 01:58... кроме Windows 10
DistortNeo
13.10.2021 01:11С последней, кстати, проблем вообще нет. Достаточно форматнуть флешку, скопировать файлы и выполнить заклинание по созданию загрузочного сектора.
tima_tey
01.10.2021 21:21+1Далеко не универсальный способ. Потому что не все БИОСы (или что вы там вместо них сейчас используете) понимают CDFS или UDF на USB накопителе.
Ещё слышал, что её имя сасшифровывают как Disk Destroyer xDДавно уже закрузочные флешки выпекаю при помощи Multisystem - она и визуальная, и прогресс есть, и несколько разных образов сразу можно закинуть, и плюс-минус корректно распознаётся разными платами.
vadimk91
02.10.2021 09:16Насчёт '.. как Disk Destroyer' : я был в отпуске, а коллеге срочно надо было записать загрузочную флэшку с какой то Linux системой. Под рукой только рабочий ноутбук с Windows, есть инструкция, как там пользоваться dd. Прочитав её по диагонали, лёгким движением руки коллега убивает системный раздел на ноуте. Но флэшка не записана, притаскивают другой ноутбук, тоже с виндой и.. результат тот же: [s]крики, вопли, слезы[/s] флэшка пустая, ноут не грузится. Мораль проста: пользуясь такими инструментами, надо понимать, как оно работает. Кстати, починить загрузку win10 оказалось проще, чем winxp на старом ноуте, благо образ был менее 8 Гб.
alpik
01.10.2021 21:28+5Лучше про Ventoy напишите, незаслуженно мало внимания.
С dd далеко не всегда получается создать загрузочный диск.
werter_l
10.10.2021 17:41Ventoy — сила. Столько времени сэкономил.
Oxyd
13.10.2021 19:52+3Ну что, написать вам нормальную статью, про ventoy его плагины и это вот всё?
werter_l
14.10.2021 09:35+3Специально для меня одного - слишком жирно ) Для всех - в самый раз. Пишите.
Зы. Кому надо iPXE - смотрите на fog project https://fogproject.org/download
Развертываю им по сети ОСи, гружу live-cd etc.
Умеет развертывать образ ОС большого размера на раздел диска меньшего размера.
abutorin
<sarcasm>
Зашёл посмотреть сколькими словами можно описать команду:
Понял что красноречию мне еще долго учится.)
</sarcasm>
savostin
А какие картинки!
Sly_tom_cat
Я еще короче это пишу
Только обычно еще sync добавляю, что бы знать когда уже вынимать флешку можно.