Как создать образ диска в Linux с несколькими разделами, не имея физического образца

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Здравствуй дорогой читатель данного руководства. Меня зовут Андрей, и нет, я не алкоголик, а разработчик встраиваемых систем на базе Linux.

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

Для чего это нужно? Все процессорные платы, разрабатываемые нашим предприятием, обладают слотом для sdcard и установленной на плате mmc. Загрузка системы производится либо с sd, либо c mmc. sd-карта является, как правило, временным решением, подкупает простотой установки. А mmc является постоянным решением, куда устанавливается уже финальное программное обеспечение. Переключение между способами загрузки осуществляется перемычками (джамперами на плате).

В случае, когда мы говорим о заказчике на этапе разработки, ему необходима самостоятельная возможность работать с устройством. Для этого ему предоставляется само устройство и ссылка для скачивания образа, с инструкцией, как установить образ на sdcard и загрузить с неё систему. Далее заказчик иницирует либо установку с sd-карты, либо запускает диагностическое программное обеспечение, но это уже конкретные детали работы с заказчиком.

В случае, когда мы говорим о производстве, и выпуске устройства, то мы знаем, что люди которые будут устанавливать на mmc конечный продукт, как правило, не умеют подключаться через терминал и работать с командной строкой u-boot или Linux, да и просто может не быть на это времени. В их задачи должны входить осуществление простого производственного цикла, например:

  1. получить устройство;

  2. подключить к стенду;

  3. установить джамперы и sd-карту;

  4. подать питание;

  5. дождаться сообщений об окончании установки ПО;

  6. выключить устройство;

  7. снять джамперы и извлечь sd-карту;

  8. подать питание;

  9. дождаться диагностических сообщений;

  10. выключить устройство и передать дальше...

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

Для того, чтобы не мучаться с каждой sd-картой для каждого варианта, можно заранее подготовить несколько образов. И тут возникает вопрос - каким образом? Сборку можно даже автоматизировать, но это уже совсем другая история.

Что потребуется для понимания и осуществления происходящего:

  • ОС GNU/Linux Debian;

  • умение пользоваться командной строкой на уровне ввода команд;

  • понимать что такое переменная окружения и как ее значение использовать в командной строке.

Создаем образ:

  1. Создаём файл образа диска заданного размера:

    sudo dd if=/dev/zero of=${FILENAME} bs=${BYTES} count=${NUMBER_OF_BYTES}
  2. Подключаем диск к системе, разбиваем и форматируем:

    sudo losetup /dev/loop0 ${FILENAME}
    sudo fdisk   /dev/loop0 # как делить диск и на какое количество разделов, личное дело каждого
    # может потребоваться повторное подключение образа, чтобы ос считала разделы:
    sudo losetup -d /dev/loop0
    sudo losetup /dev/loop0 ${FILENAME}
    # подключаем разделы:
    sudo kpartx -v -a /dev/loop0
    # форматируем разделы, если образ диска включает два раздела, то:
    sudo mkfs.${FSTYPE} /dev/mapper/loop0p1
    sudo mkfs.${FSTYPE} /dev/mapper/loop0p2
  3. Монтируем разделы и записываем информацию:

    sudo mount /dev/mapper/loop0p${N} ${MOUNTPOINT}${N}
    sudo cp -aR /rootfs/* ${MOUNTPOINT}${N}/ # что записываем и куда, каждый решает сам
    # если вам также как и мне требуется на диске u-boot, то не забываем установить:
    sudo dd if=u-boot.img of=/dev/loop0 bs=1k seek=1 conv=fsync
  4. Отключаем диски в обратном порядке:

    sudo umount ${MOUNTPOINT}${N}
    sudo kpartx -v -d /dev/loop0
    sudo losetup -d /dev/loop0
  5. Записываем полученный образ на соотвествующее устройство, если есть необходимость, например, для проверки и тестирования:

    sudo dd if=${FILENAME} of=${BLKDEV}

    Передаём полученный ${FILENAME} заказчику или производству, с инструкцией, как пользоваться.

У вас может быть не установлена программа kpartx, ее можно установить командой:

 sudo apt-get install kpartx

Заключение

Подготовить образ диска можно двумя способами:

  • сделав образ с реального физического носителя при помощи программы dd;

  • создав изначально целиком виртуальный образ, который может быть установлен на любой внешний носитель при помощи той же dd.

Почему первый способ не всегда подходит? Если вы разрабатываете одну систему, пользуетесь одной sd-картой, то этот способ кажется вполне приемлемым. Но, как только, вы попробуете установить образ с этой единственной sd-карты на другую, похожую, например другого размера, вас ждет разочарование в таком подходе. У меня в работе, как правило несколько встраиваемых систем, и держать по несколько разных sd-карт для каждой - просто незволительная роскошь. Виртуальный же образ всегда легко модифицируем и распространяем. Но есть недостаток - это его фиксированный размер, он в таком же виде попадет на sd-карту, ограничив размер используемого места, но для случая когда это необходимо для разворачивания системы это не имеет значения.

Источник: https://habr.com/ru/post/653153/


Интересные статьи

Интересные статьи

В четверг 10 июня исследователь из GitHub Security Lab Кевин Бэкхауз опубликовал детали уязвимости в сервисе polkit, по умолчанию включенному в большинство дистрибутивов на базе Linux. Уя...
Маркетплейс – это сервис от 1С-Битрикс, который позволяет разработчикам делиться своими решениями с широкой аудиторией, состоящей из клиентов и других разработчиков.
Привет, читатель! Меня зовут Ирина, я веду телеграм-канал об астрофизике и квантовой механике «Quant». На этот раз подготовила для вас перевод статьи о процессе конфигурации Солнечной системы в т...
Введение Протокол Kerberos 5 сейчас активно используется для аутентификации. Особенностью данного протокола является то, что он осуществляет аутентификацию, базируясь на четырех китах: Симм...
В этой статье я расскажу об одной необычной формуле, которая позволяет взглянуть под новым углом на аффинные преобразования, а особенно на обратные задачи, которые возникают в связи с этими преоб...