Существует несколько программ с графическим интерфейсом, предназначенных для создания 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 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)


  1. abutorin
    01.10.2021 16:42
    +33

    <sarcasm>

    Зашёл посмотреть сколькими словами можно описать команду:

    dd if=file.iso of=/dev/sdc

    Понял что красноречию мне еще долго учится.)

    </sarcasm>


    1. savostin
      01.10.2021 18:00
      +3

      А какие картинки!


    1. Sly_tom_cat
      01.10.2021 22:35
      +1

      Я еще короче это пишу

      cp file.iso /dev/sdc

      Только обычно еще sync добавляю, что бы знать когда уже вынимать флешку можно.


  1. Sonzanie
    01.10.2021 16:49
    +6

    Это Хабр или Ответы mail.ru?

    Рассказываете очевиднейшие вещи, известные каждому, кто пользовался GNU/Linux хотя бы неделю.


    1. dlinyj
      01.10.2021 16:58
      +3

      С другой стороны, не все это помнят и знают, поэтому стоит напомнить. Например, дети, которые начинают осваивать линукс, не всегда понимают что и куда писать.


      1. abutorin
        01.10.2021 17:05
        +3

        Например, дети

        РКН тоже сначала говорил что это все забота о детях.

        Просто для статей для новичков есть другие сайты. На них таких вопросов и ответов достаточно.

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


      1. ZEN_LS
        01.10.2021 18:24

        Я вот, например, всю жизнь делал так:
        sudo watch -n 10 pkill -USR1 dd
        а тут вот как оно оказалось.


        1. DaemonGloom
          01.10.2021 19:45
          +1

          Параметр status есть не везде (и появился сравнительно не так давно), а ваш метод универсальный.


      1. ovalsky
        01.10.2021 19:34
        +1

        С другой стороны, не все это помнят и знают, поэтому стоит напомнить.

        т.е. если я сейчас загуглю, то больше нигде не смогу найти информации по dd?

        Например, дети

        Ну если ребёнок не в состоянии загуглить такое, то как он её здесь прочитает, где-то принудительно заставляют читать хабр?


  1. 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 


    1. r_noise
      02.10.2021 10:11

      Не претендую на истину, но разве bs не нужно подбирать под размер физического кластера чтобы он шел быстрее?


      1. DistortNeo
        15.10.2021 00:05

        Нет. Размер больше использовать можно и даже нужно из-за высоких накладных расходов как на системные вызовы, так и на передачу команд оборудованию.


    1. 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 тут будет правильным.


      1. 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


        1. Oxyd
          15.10.2021 03:57

          Да, признаю свою ошибку... Ниже уже объснили.


      1. DistortNeo
        15.10.2021 00:08
        +2

        Флешка только рапортует о том, что у неё сектор 512 байт, а вот реальный размер страниц флеш-памяти может быть и 4K. А сами страницы объединяются в блоки размера порядка 2М. Перезаписать страницу в блоке можно только стерев весь блок.
        Так что если будете писать по 512 байт с выставлением флагов, запрещающих кэширование, то получите дичайший write amplification и тормоза.


        1. Oxyd
          15.10.2021 03:56

          Интересно, а как-то можно определить реальный размер страниц ФП конкретной флешки?


          1. DistortNeo
            15.10.2021 11:28

            Программно — никак, особенно если это USB-флешка, где контроллер вносит свои коррективы. Просто писать блоками максимально возможного размера.


  1. icCE
    01.10.2021 19:25
    +4

    ```После завершения работы dd в вашем распоряжении окажется USB-диск, с которого можно загрузиться. ```

    Далеко не факт.

    1) бывает несколько размет USB

    2) бывают определенные проблемы с загрузчиком, так как есть разные способы загрузки с usb

    3) сам дист при старте ядра, дальше может не грузится, так как будет ожидать например LABEL или чего то еще, в итоге все выпадет в корку

    итд.


  1. yeputons
    01.10.2021 20:20
    +1

    1. Sly_tom_cat
      01.10.2021 22:37

      Эта магия уже (ИМХО) во все образы добавлена много лет как.


      1. JTG
        02.10.2021 01:58

        ... кроме Windows 10


        1. DistortNeo
          13.10.2021 01:11

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


  1. tima_tey
    01.10.2021 21:21
    +1

    Далеко не универсальный способ. Потому что не все БИОСы (или что вы там вместо них сейчас используете) понимают CDFS или UDF на USB накопителе.
    Ещё слышал, что её имя сасшифровывают как Disk Destroyer xD

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


    1. vadimk91
      02.10.2021 09:16

      Насчёт '.. как Disk Destroyer' : я был в отпуске, а коллеге срочно надо было записать загрузочную флэшку с какой то Linux системой. Под рукой только рабочий ноутбук с Windows, есть инструкция, как там пользоваться dd. Прочитав её по диагонали, лёгким движением руки коллега убивает системный раздел на ноуте. Но флэшка не записана, притаскивают другой ноутбук, тоже с виндой и.. результат тот же: [s]крики, вопли, слезы[/s] флэшка пустая, ноут не грузится. Мораль проста: пользуясь такими инструментами, надо понимать, как оно работает. Кстати, починить загрузку win10 оказалось проще, чем winxp на старом ноуте, благо образ был менее 8 Гб.


  1. alpik
    01.10.2021 21:28
    +5

    Лучше про Ventoy напишите, незаслуженно мало внимания.

    С dd далеко не всегда получается создать загрузочный диск.


    1. werter_l
      10.10.2021 17:41

      Ventoy — сила. Столько времени сэкономил.


      1. Oxyd
        13.10.2021 19:52
        +3

        Ну что, написать вам нормальную статью, про ventoy его плагины и это вот всё?


        1. werter_l
          14.10.2021 09:35
          +3

          Специально для меня одного - слишком жирно ) Для всех - в самый раз. Пишите.

          Зы. Кому надо iPXE - смотрите на fog project https://fogproject.org/download

          Развертываю им по сети ОСи, гружу live-cd etc.

          Умеет развертывать образ ОС большого размера на раздел диска меньшего размера.


          1. Oxyd
            14.10.2021 10:23

            Какая навороченная фигувина!