LINUX.ORG.RU

Загрузка root образа при помощи Overlayfs + ubifs

 , , ,


0

1

Добрый день! Есть железка с ядром 4.1.13 с включенной поддержкой ubifs и overlayfs. Образ фс хранится в nand . Используется systemd.

Bootloader использует следующие аргументы при загрузке: <bootargs=console=ttyO0,115200n8 root=ubi0:rootfs rw ubi.mtd=8,4096 rootfstype=ubifs rootwait=1 ip=none>
Система с нее грузится без ошибок.

df -h выдает :
Filesystem Size Used Available Use% Mounted on
ubi0:rootfs_ro 109.3M 50.6M 58.7M 46% /
devtmpfs 237.1M 0 237.1M 0% /dev
tmpfs 249.3M 0 249.3M 0% /dev/shm
tmpfs 249.3M 380.0K 248.9M 0% /run
tmpfs 249.3M 0 249.3M 0% /sys/fs/cgroup tmpfs 249.3M 0 249.3M 0% /tmp
tmpfs 49.9M 0 49.9M 0% /run/user/0

Если я правильно понимаю, то сейчас используется просто Ubifs для rootfs_ro.

Вопрос - а как сказать загрузчику/ядру что надо использовать overlayfs поверх ubifs с двумя слоями? Буду благодарен за пример конфигурации.

Вопрос - а как сказать загрузчику/ядру что надо использовать overlayfs поверх ubifs с двумя слоями? Буду благодарен за пример конфигурации.

Загрузчику никак. Набрасываешь свою конфигурацию в <my-path>.mount и включаешь их через systemd enable <my-path>.mount. Не забудь натравить systemd-escape на <my-path>

UVV ★★★★★ ()
Ответ на: комментарий от UVV

rootds_ro и rootfs_rw это два раздела ubi0 и ubi1 соответственно. c ubi0 начинается загрузка, а ubi1 смонтирован в /tmp/overlay/rootfs_rw.

далее выполняется скрипт по монтированию:
#создаем точку монтирования ubi0 для lower overlayfs
mkdir -p /tmp/overlay/rootfs_ro
mount –bind / /tmp/overlay/rootfs_ro
#создаем директории для upper overlayfs
[ -d /tmp/overlay/rootfs_rw/workdir ] || mkdir -p /tmp/overlay/rootfs_rw/workdir
[ -d /tmp/overlay/rootfs_rw/upper ] || mkdir -p /tmp/overlay/rootfs_rw/upper
#создание overlayfs
mount -t overlay -o lowerdir=/tmp/overlay/rootfs_ro,upperdir=/tmp/overlay/rootfs_rw/upper,workdir=/tmp/overlay/rootfs_rw/workdir overlayfs-root /overlay
#создаем директории для перемонтирования разделов ubi
[ -d /overlay/overlay/rootfs_rw ] || mkdir -p /overlay/overlay/rootfs_rw
[ -d /overlay/overlay/rootfs_ro ] || mkdir -p /overlay/overlay/rootfs_ro
#переносим точки монтирования разделов ubi
#Expose our overlay parts as mount points in new rootfs
mount –move /tmp/overlay/rootfs_rw /overlay/overlay/rootfs_rw &>/dev/kmsg
mount –move /tmp/overlay/rootfs_ro /overlay/overlay/rootfs_ro &>/dev/kmsg
mount –move /dev /overlay/dev

и на этом шаге выползает ошибка :

mount: /overlay/overlay/rootfs_rw: filesystem mounted, but mount(8) failed: No such file or directory

mount: /overlay/overlay/rootfs_ro: filesystem mounted, but mount(8) failed: No such file or directory

mount: /overlay/dev: filesystem mounted, but mount(8) failed: No such file or directory

При этом все директории на месте, монтирование осуществляется. Что делать с этими ошибкой?

noweapon ()
Ответ на: комментарий от noweapon

[ -d /overlay/overlay/rootfs_ro ] ||

Немного бесполезная проверка, не? Разве mkdir -p недостаточно?

При этом все директории на месте, монтирование осуществляется. Что делать с этими ошибкой?

Я mount --move никогда не делал. Попробуй команды по одиночке выполнять и посмотри на результаты.

UVV ★★★★★ ()
Ответ на: комментарий от UVV

первые два из трех монтирования заменил на :
umount /tmp/overlay/rootfs_rw &> /dev/kmsg
mount -t ubifs ubi1:rootfs_rw /overlay/overlay/rootfs_rw &> /dev/kmsg

umount /tmp/overlay/rootfs_ro &> /dev/kmsg
mount –bind / /overlay/overlay/rootfs_ro &> /dev/kmsg

Ошибок не возникло

вопрос - а как быть с /dev? как его монтировать?

noweapon ()
Ответ на: комментарий от noweapon

вопрос - а как быть с /dev? как его монтировать?

Если честно, хз. Я не в курсе, можно ли devtmpfs на overlay натянуть. Чем тебе не угодил подход сделать overlay только для нужных директорий? Зачем всю rootfs?

UVV ★★★★★ ()
Ответ на: комментарий от UVV

Такая архитектура была придумана не мной. т.е readonly образ ФС это один раздел, запись это второй раздел. и они объединяются.

noweapon ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.