debian : монтировать /var как overlayfs при загрузке

Вопрос или проблема

Я пытаюсь смонтировать /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:

  1. Создание временной файловой системы (tmpfs):

    Вам нужно создать временную файловую систему для /var.tmpfs, которая будет содержать upper и work. Это необходимо для того, чтобы OverlayFS смог работать корректно.

  2. Создание необходимых директорий:

    Чтобы создать 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
  3. Добавление вызова скрипта в систему инициализации при загрузке:

    В зависимости от используемой системы инициализации (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
  4. Настройка /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
  5. Проверка и тестирование:

    После внесения всех изменений, перезагрузите систему и проверьте, что /var смонтирован успешно. Вы можете выполнить следующее:

    mount | grep overlay

    Это должно показать, что драйвер overlay успешно смонтирован.

Дополнительные замечания:

  • Общие директории для разных OverlayFS: Да, в теории можно использовать одну и ту же work директорию для нескольких точек монтирования. Однако, для правильной работы рекомендуется отделять их, чтобы избежать конфликтов. Лучше создать уникальные директории workdir1, workdir2 и т.д. для каждого OverlayFS монтирования, чтобы изменения одного не влияли на другое.

  • Alternativen реализовать подход: Если использование OverlayFS вызывает сложности, можно рассмотреть возможность применения других подходов, таких как использование ZRAM или других методов кэширования и виртуализации файловой системы.

Таким образом, следуя указанным шагам, вы сможете создать OverlayFS для /var, который будет корректно смонтирован при загрузке системы.

Оцените материал
Добавить комментарий

Капча загружается...