Создание Live USB-дисков в Linux с помощью команды dd
Существует несколько программ с графическим интерфейсом, предназначенных для создания Live USB-дисков. Вероятно, в Linux самой популярной из них является Etcher. В Ubuntu есть собственный инструмент для решения этой задачи — Startup Disk Creator.
Но продвинутые пользователи Linux, ради удобного и быстрого создания Live USB-дисков, постоянно обращаются к команде dd .
Это — CLI-инструмент, который даёт тому, кто его выбирает, мощные возможности по копированию и конвертированию файлов.
Обычно dd используют для того, чтобы записывать ISO-файлы на внешние носители информации, вроде USB-дисков. Потом такой носитель информации можно использовать, например, для установки записанного на него Linux-дистрибутива на обычный компьютер или на ноутбук.
Тут я расскажу о создании загрузочных USB-дисков с помощью dd . В частности, разберу команды, которые нужны для того, чтобы сначала найти в системе нужный диск, а потом записать на него ISO-файл.
Создание Live USB-дисков на основе ISO-файлов с помощью команды dd
Прежде чем я покажу вам пошаговый план работы с dd — хочу в двух словах рассказать об этой команде и продемонстрировать пример её использования.
Вот как выглядит вызов команды dd для записи ISO-файла на USB-диск:
Разберём эту команду.
Разбор команды 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-диску):
После выполнения этой команды нужно будет некоторое время подождать и dd создаст Live USB-диск.
Создание Live USB-диска
Итоги
После завершения работы dd в вашем распоряжении окажется USB-диск, с которого можно загрузиться. Но, пожалуй, важнее то, что теперь вы лучше узнали инструменты командной строки Linux, освоили кое-что новое, позволяющее ускорить и упростить решение некоторых задач.
Чем вы пользуетесь для создания Live USB-дисков в Linux?
Источник
почему именно dd?
часто встречаю, что для записи iso-образа на флешку советуют команду
столько инструментов, а эти обезъянки, вычитав где-то однажды, продолжают и ломать пальцы печатая команду dd полностью.
А почему бы и нет?
Во втором случае, если нужны права рута, то придется либо через tee, либо сначала sudo -s, неудобно. А почему бы и нет, в самом деле?
cat, bar и pv вполне сгодятся для этого
последний вариант тупо не прокатит.
ты точно понимаешь разницу между образом диска и простым файлом?
второй прокатит.
а dd потому что это утилитка для работы с образами дисков, коим, в том числе, является iso
а вот меня всегда интересовало, как таким методом можно записать на диск? в прогах еще выбор скорости, тип диска есть. а тут.
диск это диск, флешка это флешка. вещи разные. и на диск нужно только софтом прожигать, угу.
конечно megabaks товарищ умный, но сегодня я как раз при помощи cp тупо скопировал файлик в /dev/sdb, а после чего успешно загрузился с этого образа. не знаю, в каком месте оно не работает. попробуйте сами, м?
получишь копию файла содержащего образ на корне флешки, а не загрузочную флэшку.
последний вариант тупо не прокатит.
Лолшто? у меня всегда так работало
получишь копию файла содержащего образ на корне флешки, а не загрузочную флэшку.
И сравни что умеет тот и другой. Для простейших случаев разницы может и нет, но лучше не привыкать.
да, отсутствие слеша не заметил )
Извиняюсь, поинтересовался сейчас, ты прав, если без слэша просто /dev/sdb то всё работает. Но меня как научили использовать dd я так и делаю уже много лет.
dd можно задать размер порции перемещаемых данных. Экспериментально было установлено что порции 512K и 1M копируются наиболее быстро. Так же у dd есть ещё опции.
a cat is fine too ?
Не факт, при 1M замораживается периодически даже мышка на пару секунд. Не знаю, что там по умолчанию в dd, но тормоза не видны. Вообще, конечно, свинство ,в 21-м веке.
по умолчанию просто 512 то есть пол килобайта. Видимо у тебя 12309 проявляется. Попробуй поэкспериментировать со значениями:
Ну и сообщи какой у тебя чипсет и дистрибутив. Потому что я наблюдал выигрыш от 1M на intel чипсетах.
А почему бы не подкормить ?
Потому, что у dd больше возможностей.
получишь копию файла содержащего образ на корне флешки, а не загрузочную флэшку.
4.2. Debian официально советует создавать загрузочные флешки именно так, что я всегда успешно и делал.
потому что dd, она рулит и педалит, и да, посмотри историю Unix
столько инструментов, а эти обезъянки, вычитав где-то однажды, продолжают и ломать пальцы печатая команду dd полностью.
ну как ты для cp укажешь bs? А без него долго копировать.
Экспериментально было установлено что порции 512K и 1M копируются наиболее быстро.
зависит от устройства (точнее от обоих).
Но по сути — да, cp не умеет вообще никак это задавать.
Не знаю, что там по умолчанию в dd,
детка, тебя и в манах забанили? 512 байт дефолт dd.
никода в жизни не пользовался. а нет, один раз воспользовался, дааавным дааавно, так она хвост не захотела записывать и образ стал повреждённым.
с тех пор только cat image.iso > /dev/sdz
с тех пор только cat image.iso > /dev/sdz
А дыдой было бы быстрее значительно! Ставишь размер блока мегабайт 10 — и все в ажуре!
Если там есть буфферизация — то вообще пофиг.
А если там нет буфферизации — тогда тем более пофиг.
У меня есть даже подозрение, что dd будет медленнее. К тому же, остаются проблемы с хвостами, при каком количестве ключей они отваливаются 🙂
с тех пор только cat image.iso > /dev/sdz
проблема в том, что cat умеет только копировать. Dd умеет копировать что угодно и куда угодно. И как угодно. Ну не сможешь ты вырезать с 12345го сектора по 12783й, и скопировать начиная с 987го, блоками по 1024 байта с помощью кошки.
У меня есть даже подозрение, что dd будет медленнее.
а ты проверь, и удивись.
К тому же, остаются проблемы с хвостами, при каком количестве ключей они отваливаются 🙂
какие ещё проблемы придумают теоретики на диване?
Замечательно. Но мне это и не требуется. Когда мне требуется dd — я пользуюсь dd, его ключи я знаю. А запись на raw-устройство — только через cat, потому что эта команда ПОНЯТНЕЕ. А размер блока меня не интересует, чтобы его выбирать (скорее, наоборот, сбивает).
проверь и удивись. ждём результатов 🙂
ps. почти всегда у меня эти образы — сжаты. я их просто так не храню. и использую гораздо чаще даже не cat, а zcat или xzcat. жду убер-конструкции для dd 🙂
Когда мне требуется dd — я пользуюсь dd, его ключи я знаю. А запись на raw-устройство — только через cat
не понял. Так когда ты юзаешь dd?
потому что эта команда ПОНЯТНЕЕ. А размер блока меня не интересует, чтобы его выбирать (скорее, наоборот, сбивает).
твоё дело, я не против.
Да, эти обезьянки вычитав однажды про
продолжают ломать пальцы не используя dd
dd if=file.txt 2>/dev/null
я обычно tar юзаю.
cat, а zcat или xzcat. жду убер-конструкции для dd
xzcat source | dd of=target
Потому что это стрельба в ногу.
ну, например, самый простой случай
dd if=/dev/zero of=hdd.img bs=1M count=3822
а где размер блока? 🙂
ну, например, самый простой случай dd if=/dev/zero of=hdd.img bs=1M count=3822
а зачем тебе cat?
А дыдой было бы быстрее значительно! Ставишь размер блока мегабайт 10 — и все в ажуре!
dd несколько медленнее, в интернетах проверяли. Он делает «лишние» (по сравнению с cat) memcopy.
dd несколько медленнее, в интернетах проверяли. Он делает «лишние» (по сравнению с cat) memcopy.
Потому что каким способом ни пользуйся, все равно у тебя остается возможность задать два дурацких вопроса.
один раз воспользовался, дааавным дааавно, так она хвост не захотела записывать
Это в 70е, что ли? Последние 15 лет её пользуюсь, хвост всегда писала исправно.
Это в mandriva 200x какой-то. там они сами давали инструкцию с кучей ключей, но именно с этой кучей оно хвост тупо не записывало. Поскольку спорить с dd мне было скучно, я сделал cat, и с тех пор он всегда со мной. 🙂
ps. За всю мою жизнь у меня было ровно ДВЕ флешки. 🙂 Одна в начале двухтысячных, и одна сейчас. Пользуюсь я ими только по БОЛЬШИМ праздникам. 🙂
Источник