Как создать образ диска в 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-карту, ограничив размер используемого места, но для случая когда это необходимо для разворачивания системы это не имеет значения.

Читайте так же:

  • Super TeamViewer? Нет, дополненная реальность в техподдержкеSuper TeamViewer? Нет, дополненная реальность в техподдержке ABB применяет дополненную реальность для удаленной техподдержки своих клиентов. Концерн выпустил продукты Raise и Closer, использующие эффект присутствия, которые позволяют операторам и полевым инженерам работать с одними и теми же изображениями, накладывать на них инструкции и […]
  • Huawei P50 Pro не получил дюймовый датчик изображения, но это не помешало ему стать лучшим камерофоном в миреHuawei P50 Pro не получил дюймовый датчик изображения, но это не помешало ему стать лучшим камерофоном в мире Huawei не вдавалась в детальные характеристики всех модулей основной камеры смартфона P50 Pro во время анонса, но они стали известны сейчас. Напомним, слухи приписывали этой модели датчик изображения оптического формата около одного дюйма (примерно как у Xiaomi Mi 11 Ultra). Но на неделе […]
  • Яндекс упростил создание карточек для МаркетаЯндекс упростил создание карточек для Маркета Яндекс.Маркет ввел новые правила подготовки карточек товаров и фотографий для них. 1. Сервис позволил магазинам делать фотографии товаров на любом фоне, а не только на белом или прозрачном. 2. Для создания карточки достаточно, чтобы хотя бы основное изображение прошло проверку. Если в […]
  • Работающий Google Pixel 6 с крошечной камерой впервые показали в руках пользователяРаботающий Google Pixel 6 с крошечной камерой впервые показали в руках пользователя Китайские источники опубликовали первую реальную фотографию смартфона Google Pixel 6, который находится в руках пользователя во включённом состоянии. Судя по реальным фотографиям, Google Pixel 6 получит такой же дизайн. Как и на ранее опубликованных компьютерных рендерах. Также стоит […]