Объединённое монтирование (оверлеи)

В версии 0.5.1 дистрибутива Tibbo на основе Ubuntu для LTPP3(G2) появилась поддержка объединённого монтирования (union mount).

Объединённое монтирование позволяет наложить разделы с чтением и записью поверх корневой файловой системы только для чтения, в которой находится базовая установка. Оверлеи служат временным хранилищем для ваших приложений: сами приложения находятся в основном разделе и изменены быть не могут, поэтому всегда остаются в рабочем состоянии.

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

Настройка разделов

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

Совет

Если вы ещё не использовали контейнер Docker от Tibbo для настройки образа, как начать, показано в нашем обучающем видео: https://youtu.be/e0b5b6HtLbg.

Перед запуском make для создания образа выполните скрипт tb_overlayfs.sh, чтобы задать размеры разделов.

./tb_overlayfs.sh
Снимок экрана со скриптом tb_overlayfs.sh.

Скрипт предложит ввести нужные размеры разделов rootfs и overlay. Чтобы принять рекомендуемое значение по умолчанию, просто нажмите enter.

Если после создания разделов rootfs и overlay в хранилище eMMC остаётся свободное место, можно создать дополнительные разделы. Скрипт предложит задать имя каждого раздела, а затем его размер. Чтобы не создавать дополнительные разделы, введите s.

Примечания:

  1. В именах разделов допускаются буквы, цифры и символ подчёркивания («_»).
  2. Если задать слишком маленький размер раздела, сборка завершится с ошибкой. Если общий размер всех разделов превышает ёмкость eMMC, процесс установки завершится с ошибкой.
Внимание

Обратите внимание: скрипт не включает объединённое монтирование. Иначе вы не смогли бы обновлять систему и установленные пакеты. Как включить оверлей, когда корневая файловая система будет окончательно готова, описано в следующем разделе.

Позже, когда вы запустите make для создания образа, в конце вывода будет показан список разделов, которые создаются в хранилище eMMC вашего устройства.

Снимок экрана с выводом make.

Включение оверлея

После создания раздела оверлея нужно настроить систему на использование объединённого монтирования и защитить корневую файловую систему от записи. Это делается двумя переменными, значения которых задаются в окружении U-Boot после установки образа.

Имя переменнойОписание
tb_overlayСообщает установщику расположение оверлея (например, /dev/mmcblk0p9). Это включает оверлей и объединённо монтирует его в корень («/»). Учтите, что сам оверлей монтируется в /overlay - будьте осторожны и не используйте этот каталог.
tb_rootfs_roЕсли установлено значение true, раздел оверлея очищается при каждой перезагрузке системы или повторном включении питания.

Пошаговая инструкция

Прежде чем включать оверлеи, убедитесь, что ваша установка настроена на использование объединённого монтирования. Имейте в виду, что обновления systemd, скорее всего, изменят конфигурацию.

Для этого понадобится доступ к последовательной консоли.

1. Загрузите LTPP3(G2) и войдите в систему.

2. Убедитесь, что скрипт init указывает на tb_init.sh:

sudo ln -sfn /sbin/tb_init.sh /sbin/initls sbin/init -l -a

3. Перезагрузите устройство и прервите запуск нажатием любой клавиши. Вы окажетесь в приглашении U-Boot.

4. Введите следующие команды:

=> printenv b_c b_c=console=tty1 console=ttyS0,115200 earlyprintk=> setenv b_c $b_c tb_overlay=/dev/mmcblk0p9 tb_rootfs_ro=true=> setenv emmc_root root=/dev/mmcblk0p8 r rootwait=> saveenv 

В результате должно появиться следующее сообщение:

Saving Environment to MMC... Writing to redundant MMC(0)... OK

5. Перезагрузите устройство или выключите и снова включите питание.

Исходный материал Tibbo обновлён 29 сентября 2022Оригинал на docs.tibbo.com · Сообщить об ошибке