LINUX.ORG.RU
решено ФорумAdmin

overlay в fstab не получается

 ,


0

2

Здравствуйте, коллеги!

Не получается собрать overlay в fstab. При загрузке системы выдает ошибку монтирования.

# dmesg
...
[   11.171791] systemd[1]: Mounting /srv/overlay...
[   11.180677] systemd[1]: Mounting /tmp...
[   11.180883] overlayfs: failed to resolve '/srv/layer/upper': -2
...
# ls /srv -la
total 24
drwxr-xr-x  7 root root 4096 Jun  5 13:20 .
drwxr-xr-x 24 root root 4096 Jun  4 12:57 ..
drwxr-xr-x  6 root root 4096 Jun  4 17:36 layer
drwxr-xr-x 24 root root  364 Jun  4 12:57 lower
drwxr-xr-x  2 root root 4096 Jun  4 16:24 mnt
drwxr-xr-x  1 root root 4096 Apr 17 13:24 overlay
drwxr-xr-x  2 root root 4096 Jun  5 13:11 upper

# mount -t overlay overlay -o lowerdir=/srv/lower,upperdir=/srv/layer/upper,workdir=/srv/layer/workdir /srv/overlay/

# mount | grep overlay
overlay on /srv/overlay type overlay (rw,relatime,lowerdir=/srv/lower,upperdir=/srv/layer/upper,workdir=/srv/layer/workdir)

# cat /etc/fstab | grep overlay
overlay	/srv/overlay	overlay	nofail,lowerdir=/srv/lower,upperdir=/srv/layer/upper,workdir=/srv/layer/workdir	0	0

# lsmod | grep overlay
overlay               147456  0

Почему-то не монтируется через fstab, но при этом прекрасно монтируется через mount.

Где я накосячил?



Последнее исправление: HighMan (всего исправлений: 1)

Может быть /srv/lower или /srv/layer тоже являются маунтами, описанными в fstab? systemd пытается стартовать маунты параллельно, если не видит между ними зависимости. Можно добавить зависимости вручную:

overlay	/srv/overlay overlay nofail,lowerdir=/srv/lower,upperdir=/srv/layer/upper,workdir=/srv/layer/workdir,x-systemd.requires-mounts-for=/srv/lower,x-systemd.requires-mounts-for=/srv/layer/upper,x-systemd.requires-mounts-for=/srv/layer/workdir 0 0
iliyap ★★★★★
()
Ответ на: комментарий от iliyap

Можно добавить зависимости вручную:

Хм…

Дело в том, что я формирую /etc/fstab для initrd, а там нет systemd.

Может без systemd монтирование пойдет по порядку строк fstab?

А по сути вы совершенно правы.

В /srv/layer монтируется раздел (пусть будет /dev/sda4) на котором лежит squashfs и изменения, т.е. lowerdir и workdir. Понимаю, что это в корне не верно, но это не боевой вариант, а для теста в обычной системе.

В /srv/lower монтируется файл squashfs

/srv/layer/upper и /srv/layer/workdir, соответственно, расположены на том же разделе /dev/sda4

Вполне может оказаться, что в полноценной системе с systemd, overlay начинает монтироваться ДО того, как смонтирован /srv/layer, хоть он и записан последним в /etc/fstab.

UPD Хотя нет…

Если не смонтирован /dev/sda4 в /srv/layer, то, соответственно, squashfs не смонтируется в /srv/lower.

HighMan
() автор топика
Последнее исправление: HighMan (всего исправлений: 1)
Ответ на: комментарий от iliyap

systemd[1]: Mounting /srv/overlay… Тестируется все на полноценной системе. С systemd, но делается все для нового initrd.

Мысль следующая: для определенных устройсив, слабовастеньких компьютеров заточенных под конкретные задачи, будет RO система в squashfs образе с RW разделом для внесения изменений.

Вот мне и нужно так переделать initrd, что бы он все это умел делать.

По большому счету все уже сделано. Я подменил /init скрипт в initrd и сам собираю бутерброд overlay, но… В силу ряда причин, это не совсем красивый путь.

Дело в том, что минисистема в squashfs образе, сделана из Alt Linux server 10 SP. В Альте за сборку initrd отвечает набор скриптов make-initrd и там… Там все сложно, но сделано более грамотно. Потому я решил отложить свой /init и попытаться заставить make-initrd генерировать initrd так, как мне нужно без изменения набора оригинальных скриптов.

В наборе альтовских скриптов, попадающих в initrd, идет обработка монтирования на основе /etc/fstab и, по большому счету, мне нужно в базовой системе сделать нормальный конфиг для сборки initrd, включить необходимые модули ядра (overlay, squashfs), добавить свой скрипт, который в initrd будет заниматься заполнением, при загрузке, fstab и выполнять некоторые другие ействия.

Вот тут-то и происходит затык.

Разобраться в чужих bash скриптах, коих там наворочено в достатке, очень тяжело, особенно если учесть, что манера написания скриптов у меня и их автора отличается очень сильно.

Вот я и мучаюсь…

HighMan
() автор топика
Ответ на: комментарий от PRN

/srv/layer/upper точно валютный путь?

Точно.

Если вы внимательно посмотрите кодовую вставку в стартовом посте, то увидите, что монтирование с помощью mount происходит без каких либо проблем.

Другое дело, что, как подсказал iliyap, обработка монтирований из fstab, может вестись systemd параллельно и в момент сборки overlay, маунтинг в /srv/layer, еще не произошел.

Это лишь предположение. Но я просто не знаю чего еще придумать.

Когда не работает то, что работать обязано - это нормально. Рутина. Намного хуже когда начинает работать то, что работать не может!

HighMan
() автор топика
Последнее исправление: HighMan (всего исправлений: 1)
Ответ на: комментарий от Elyas

mount -a

О!

Голова моя дырявая! Ведь пару раз пользовался этой мандулой и успешно забыл.

# mount -a
# mount | grep overlay
overlay on /srv/overlay type overlay (rw,relatime,lowerdir=/srv/lower,upperdir=/srv/layer/upper,workdir=/srv/layer/workdir)

Но при загрузке системы этот злосраный overlay не смонтировался, а при mount -a все прошло без сучка, без задоренки.

Заррраза! Столько времени потерял.

HighMan
() автор топика
Последнее исправление: HighMan (всего исправлений: 1)
Ответ на: комментарий от HighMan

валютный путь

Имел в виду валидный, автозамена)), не удобно с планшета писать.

Если вы внимательно посмотрите кодовую вставку в стартовом посте

Угу это я пропустил.

Дело в том, что я формирую /etc/fstab для initrd

Если с mount все работает, то без systemd все должно работать. Похоже systemd не учитывает порядок и надо явно задавать зависимости через x-systemd.requires=, x-systemd.after= или x-systemd.requires-mounts-for=

https://www.freedesktop.org/software/systemd/man/latest/systemd.mount.html

PRN
()