Вопрос или проблема
Я пытаюсь смонтировать /var
с помощью overlayfs (с tmpfs) при загрузке, но не удаётся заставить это работать.
Вот что я сделал:
# создание tmpfs
mkdir /var.tmpfs
mount -t tmpfs -o rw,nosuid,nodev,noexec,noatime,size=512m,mode=0775 tmpfs /var.tmpfs
chmod -R u=rwX,g=rX,o=rX /var.tmpfs
# создание overlay
mkdir /var.tmpfs/{work,upper} /var.overlay
mount -t overlay -o rw,lowerdir=/var,upperdir=/var.tmpfs/upper,workdir=/var.tmpfs/work overlay /var.overlay
chmod -R u=rwX,g=rX,o=rX /var.overlay
# привязка к /var
mount --bind /var.overlay /var
# заполнение /etc/fstab
[...]
tmpfs /var.tmpfs tmpfs rw,nosuid,noatime,size=512m 0 0
overlayfs /var.overlay overlay rw,lowerdir=/var,upperdir=/var.tmpfs/upper,workdir=/var.tmpfs/work 0 0
/var.overlay /var none bind 0 0
Когда система загружается, я сталкиваюсь со следующей ошибкой:
overlayfs: не удалось разрешить '/var.tmpfs/upper' -2
Что нормально, поскольку tmpfs пуст, когда он смонтирован.
- Как создать
upper
иwork
директории при загрузке- после монтирования /var.tmpfs
- до монтирования /var.overlay
- Или есть какое-либо другое решение с уже существующими директориями при загрузке?
Спасибо заранее.
Папки /var.tmpfs/upper
и /var.tmpfs/work
находятся в tmpfs и больше не будут присутствовать после перезагрузки.
Один из вариантов – создать обе в fstab.
Чтобы overlayfs работал, мы должны убедиться, что и Upper, и рабочий каталог находятся в одной файловой системе. У меня есть вопрос:
Если у нас есть несколько точек монтирования overlayfs, скажем, /home/user/merged1 и /home/user/merged2 в одной файловой системе, могут ли они делить рабочий каталог? То есть просто /home/user/workdir…
Или это должны быть workdir1 и workdir2 соответственно?
Я делаю что-то подобное с https://github.com/StuartIanNaylor/zram-config, но использую zram вместо tmpfs.
Я привязываю целевую директорию где-то еще.
Создаю и монтирую zram и директории overlayfs.
Затем монтирую overlay
mount --verbose --types overlay -o lowerdir=$BIND_DIR,upperdir=/opt/zram$RAM_DEV/upper,workdir=/opt/zram$RAM_DEV/workdir overlay $ZRAM_DIR
$ZRAM_DIR это целевая папка, которая привязывается к другому месту, поэтому при остановке я могу синхронизировать изменения.
Вместо полного /var, возможно, вам придется просто добавить набор lowerdir, так как, возможно, tmpfs поверх tmpfs не работает и почему?
Ответ или решение
Чтобы смонтировать /var
с использованием OverlayFS при загрузке системы на Debian, необходимо обеспечить создание необходимых директорий (upper
и work
) перед монтированием OverlayFS. Так как вы столкнулись с ошибкой, указывающей на то, что директория upper
не может быть найдена, Lösungen, предлагаемые ранее, предполагают, что эти директории необходимо создать динамически во время загрузки.
Шаги для успешного монтирования /var
с OverlayFS:
-
Создание временной файловой системы (tmpfs):
Вам нужно создать временную файловую систему для
/var.tmpfs
, которая будет содержатьupper
иwork
. Это необходимо для того, чтобы OverlayFS смог работать корректно. -
Создание необходимых директорий:
Чтобы создать
upper
иwork
каталоги, можно написать простой скрипт, который будет выполняться при загрузке:-
Создайте скрипт, например,
/usr/local/bin/create_overlay_dirs.sh
:#!/bin/bash mkdir -p /var.tmpfs/{upper,work}
-
Сделайте его исполняемым:
chmod +x /usr/local/bin/create_overlay_dirs.sh
-
-
Добавление вызова скрипта в систему инициализации при загрузке:
В зависимости от используемой системы инициализации (SysVinit, Systemd и т.д.), необходимо будет добавить вызов этого скрипта.
Для Systemd, создайте сервисный файл
/etc/systemd/system/create-overlay-dirs.service
:[Unit] Description=Create OverlayFS Directories for /var Requires=tmp.mount After=tmp.mount [Service] Type=oneshot ExecStart=/usr/local/bin/create_overlay_dirs.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target
Активируйте этот сервис:
systemctl enable create-overlay-dirs.service
-
Настройка
/etc/fstab
:Убедитесь, что в файл
/etc/fstab
добавлены правильные записи для монтирования:tmpfs /var.tmpfs tmpfs rw,nosuid,noatime,size=512m 0 0 overlay /var.overlay overlay rw,lowerdir=/var,upperdir=/var.tmpfs/upper,workdir=/var.tmpfs/work 0 0 /var.overlay /var none bind 0 0
-
Проверка и тестирование:
После внесения всех изменений, перезагрузите систему и проверьте, что
/var
смонтирован успешно. Вы можете выполнить следующее:mount | grep overlay
Это должно показать, что драйвер overlay успешно смонтирован.
Дополнительные замечания:
-
Общие директории для разных OverlayFS: Да, в теории можно использовать одну и ту же
work
директорию для нескольких точек монтирования. Однако, для правильной работы рекомендуется отделять их, чтобы избежать конфликтов. Лучше создать уникальные директорииworkdir1
,workdir2
и т.д. для каждого OverlayFS монтирования, чтобы изменения одного не влияли на другое. -
Alternativen реализовать подход: Если использование OverlayFS вызывает сложности, можно рассмотреть возможность применения других подходов, таких как использование ZRAM или других методов кэширования и виртуализации файловой системы.
Таким образом, следуя указанным шагам, вы сможете создать OverlayFS для /var
, который будет корректно смонтирован при загрузке системы.