systemd: autofs, содержащий autofs, не выполняет размонтирование.

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

Я пытаюсь настроить две директории, каждая из которых автоматически монтируется:

  • /mnt/dir
  • /mnt/dir/subdir

В моем случае это:

  • /mnt/btrfs-vol/rootfs (только для чтения)
  • /mnt/btrfs-vol/rootfs/btrbk-snap (RW для создания снимков с помощью btrbk)

Мой /etc/fstab содержит:

LABEL=rootfs    /mnt/btrfs-vol/rootfs               btrfs   ro,subvol=/,lazytime,compress=lzo,ssd,discard,noauto,x-systemd.automount,x-systemd.idle-timeout=2
LABEL=rootfs    /mnt/btrfs-vol/rootfs/btrbk-snap    btrfs   rw,subvol=/btrbk-snap,lazytime,compress=lzo,ssd,discard,noauto,x-systemd.automount,x-systemd.idle-timeout=2,x-systemd.requires-mounts-for=/mnt/btrfs-vol/rootfs

Делаю:

svelte ~# systemctl daemon-reload && systemctl restart local-fs.target
svelte ~# mount | grep btrfs-vol/rootfs
systemd-1 on /mnt/btrfs-vol/rootfs type autofs (rw,relatime,fd=32,pgrp=1,timeout=2,minproto=5,maxproto=5,direct)

Странно, /mnt/btrfs-vol/rootfs уже смонтирован.

Если я размонтирую /mnt/btrfs-vol/rootfs, он сразу же монтируется снова:

svelte ~# umount /mnt/btrfs-vol/rootfs
svelte ~# mount | grep btrfs-vol/rootfs
systemd-1 on /mnt/btrfs-vol/rootfs type autofs (rw,relatime,fd=32,pgrp=1,timeout=2,minproto=5,maxproto=5,direct)

Теперь, если я пингую подпапку, она автомонтируется:

svelte ~# (cd /mnt/btrfs-vol/rootfs/btrbk-snap/ && mount | grep btrfs-vol/rootfs)
systemd-1 on /mnt/btrfs-vol/rootfs type autofs (rw,relatime,fd=32,pgrp=1,timeout=2,minproto=5,maxproto=5,direct)
/dev/mapper/vg_svelte-rootfs on /mnt/btrfs-vol/rootfs type btrfs (ro,relatime,lazytime,compress=lzo,ssd,discard,space_cache,subvolid=5,subvol=/)

Обратите внимание, что fstype для /dev/mapper/vg_svelte-rootfs изменился с autofs на btrfs.

Через несколько секунд (у меня timeout=2 для тестирования):

svelte ~# mount | grep btrfs-vol/rootfssystemd-1 on /mnt/btrfs-vol/rootfs type autofs (rw,relatime,fd=32,pgrp=1,timeout=2,minproto=5,maxproto=5,direct)

Поддиректория размонтируется, и fstype для /dev/mapper/vg_svelte-rootfs возвращается к autofs, но остается смонтированной.

Как сделать так, чтобы это размонтировалось автоматически?


Возможно, полезная информация:

Выход journal:

Feb 21 17:16:07 svelte systemd[1]: Reloading.
Feb 21 17:16:23 svelte systemd[1]: Mounting /mnt/btrfs-vol/rootfs...
Feb 21 17:16:23 svelte systemd[1]: Set up automount mnt-btrfs\x2dvol-home-btrbk\x2dsnap.automount.
Feb 21 17:16:23 svelte systemd[1]: Mounted /mnt/btrfs-vol/rootfs.
Feb 21 17:16:23 svelte systemd[1]: mnt-btrfs\x2dvol-rootfs-btrbk\x2dsnap.automount: Directory /mnt/btrfs-vol/rootfs/btrbk-snap to mount over is not empty, mounting anyway.
Feb 21 17:16:23 svelte systemd[1]: Set up automount mnt-btrfs\x2dvol-rootfs-btrbk\x2dsnap.automount.
Feb 21 17:16:23 svelte systemd[1]: Reached target Local File Systems.
Feb 21 17:16:25 svelte systemd[1]: Stopped target Local File Systems.
Feb 21 17:16:25 svelte systemd[1]: Unset automount mnt-btrfs\x2dvol-rootfs-btrbk\x2dsnap.automount.
Feb 21 17:16:25 svelte systemd[1]: Unmounting /mnt/btrfs-vol/rootfs...
Feb 21 17:16:25 svelte systemd[1]: Unmounted /mnt/btrfs-vol/rootfs.
Feb 21 17:17:44 svelte systemd[1]: Unset automount mnt-btrfs\x2dvol-home-btrbk\x2dsnap.automount.

Проверка, что ничего не открыло директорию:

svelte ~# lsof /mnt/btrfs-vol/rootfs
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
svelte ~[2]# ls -l /run/user/1000 | grep gvfs
ls: cannot access '/run/user/1000/gvfs': Permission denied
d????????? ? ?    ?      ?            ? gvfs

Я никогда не видел ? там, где ожидал rwx до этого.

Посмотрите на fstab systemd option x-systemd.requires-mounts-for=:

Настраивает зависимость RequiresMountsFor= между созданной монтируемой единицей и другими монтируемыми единицами. Аргумент должен быть абсолютным путем. Этот параметр может быть указан несколько раз. Подробности см. в RequiresMountsFor= в systemd.unit(5).

Ответ или решение

Вопрос, с которым вы столкнулись, заключается в автоматическом размонтировании директорий, настроенных с помощью systemd и autofs, в частности для Btrfs. Вы хотите, чтобы каталоги /mnt/btrfs-vol/rootfs и /mnt/btrfs-vol/rootfs/btrbk-snap автоматически размонтировались по истечении определенного времени бездействия. Давайте подробно рассмотрим возможные причины и решения этой проблемы.

Проблема с автоматическим размонтированием

  1. Понимание механизма autofs: autofs управляет автоматическим монтированием и размонтированием файловых систем в Linux. Одна из его функций — размонтирование файловой системы после истечения периода бездействия, заданного параметром timeout.

  2. Конфигурация ваших директорий: из вашего вывода видно, что в fstab у вас настроены автосборы с использованием параметров x-systemd.automount и x-systemd.idle-timeout. Ваша конфигурация выглядит правильно для автоматического монтирования.

Анализ проблемы

  • Журнал systemd: ваш журнал указывает, что монтирование /mnt/btrfs-vol/rootfs происходит без проблем, но после размонтирования и даже несмотря на наличие параметра idle-timeout, оно сразу автоматически монтируется обратно.

  • Параметр x-systemd.requires-mounts-for: использование этого параметра может создавать зависимость между монтированиями, что может удерживать /mnt/btrfs-vol/rootfs в смонтированном состоянии, даже когда конкретно эта точка монтирования больше не используется.

Возможные причины

  1. Открытые файлы или процессы: вывод команды lsof показывает, что каталоги могут быть заняты какими-то процессами, например, через GVFS (GNOME Virtual File System). Это может препятствовать размонтированию.

  2. Сложные зависимости монтирований: наличие трудно отслеживаемых зависимостей может сохранять монтирование активным.

Рекомендации по устранению

  1. Проверка зависимостей: Пересмотрите зависимости ваших монтирований. Возможно, необходимо изменить или удалить параметр x-systemd.requires-mounts-for, чтобы убедиться, что он не создает нежелательных удержаний.

  2. Диагностика открытых файлов:

    • Используйте lsof и другие утилиты для проверки открытых файлов или процессов, удерживающих монтирование.
    • Если возможно, временно отключите GVFS или любые другие службы, которые могут использовать каталоги.
  3. Изменение конфигурации: Попробуйте вручную настроить таймауты и зависимости монтирований напрямую через конфигурацию systemd, создавая отдельные unit файлы для каждого монтирования. Это позволит более гибко управлять условиями размонтирования.

Заключение

Расширенная диагностика с акцентом на уточнение зависимостей и проверку открытых ресурсов на системе может привести к решению вашей проблемы. Поддерживайте конфигурацию с соблюдением всех потребностей вашей системы для стабильной работы монтированных файловых систем. Оптимизация этих настроек требует внимания к деталям в сочетании с тестированием в рабочей среде.

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

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