LINUX.ORG.RU
ФорумAdmin

Как установить overlay над всей файловой системой (root/)?

 ,


0

2

Привет. У меня следующий вопрос: хочу подкинуть свои конфиги на работающую систему, затем их убрать (и записать изменения файловой системы, если будут, в отдельный каталог). Со вторым более-менее понятно, но затык сейчас в процессе установки оверлея над корнем (root/) файловой системы. Следующая команда:

mount -t overlay overlay -o lowerdir=/,upperdir=/tmp/utils,workdir=/tmp/work /

ошибок не выводит, но и файлов нет в дереве. Я не пойму почему. В upperdir лежат мои конфиги утилит (там каталог c подкаталогами /etc, /opt и пр.), и я ожидал их увидеть в корне (+ изменения), а их нет.

Что пробовал: создавать overlay mounts для каждого подкаталога из /tmp/utils, то есть из верхнего слоя - работает, но некоторые я потом не могу отмонтировать, например /usr. lsof при этом ничего не показывает, что держит директории от размонтирования - не пойму. Пробовал разные комбинации монтирования –make-rslave, –rbind и прочее - не помогает. Хотя по документации должно.

Подскажите, пожалуйста, как правильно временно «перекрыть» своими каталогами и файлами root (/) чтобы потом можно было размонтировать? Где я ошиибся?


Тебе это надо делать из initramfs или передавать в параметре root, но там придётся решить проблему монтрования файловой системы нижнего и верхнего уровня перед монтирование корня в overlayfs.

Видимо, тебе придётся править сценарий (сценарии init) в initramfs или писать свои hook`и.

Не уверен, что простой записью в /etc/fstab всё корректно отработает.

В /etc/fstab тоже должна быть корректная запись для корня в overlayfs и файловых систем верхнего и нижнего уровня.

anonymous
()

при этом ничего не показывает, что держит директории от размонтирования - не пойму

До переноса /sbin и /bin, /lib в /usr/(bin,sbin,lib) сам /usr мог быть отдельной файловой системой, а теперь

  • /bin -> /usr/bin;
  • /sbin -> /usr/sbin;
  • /lib -> /usr/lib.

это ссылки.

Технически и сейчас, если модифицировать initramfs, то тоже можно вынести /usr на отдельную файловую систему, только смысл.

Так что /usr у тебя держат все запущенные в системе процессы.

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

Есть ключ ‘-L’ - жёстко сможешь, но часть открытых файловых дескрипторов будет неверной.

Чтобы правильно его закрыть - нужно завершить все процессы, т.е. перезагрузка.

Возможно, то как ты себе нарисовал схему - неверный подход.

Ты можешь делать снапшоты, например на thin lvm есть такое - снапшот делается быстро и легко.

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

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

А ещё вопрос: я правильно понимаю из документации на overlay, что нижнюю базовую файловую систему (lowerdir) менять уже нельзя после монтирования? Это может вызвать сбой? То есть смонтировать оверлей на то же /var нельзя, если там будут изменения и нужно чтобы эти изменения ушли в реальную файловую систему? А как тогда можно обойти это ограничение на overlay - есть какие-то способы, не подскажите?

netvis
() автор топика

Глянь UIRD, если поймешь конечно, вещица непростая.

UIRD - это разновидность initrd, его задача собрать из слоёв aufs/overlayfs корневую файловую систему и передать загрузку /sbin/init (systemd) с этой корневой файловой системой.

krasnh ★★★
()