Как указать systemctl автоматически отмонтировать диск, если он неактивен, и удалить каталог после отмонтирования?

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

У меня есть следующая запись в fstab:

LABEL=cache /disks/cache ext4 rw,user,x-mount.mkdir,relatime,noauto,errors=remount-ro,x-systemd.idle-timeout=120min  0 0

Что я ожидаю сделать:

  1. монтировать диск с меткой cache на /disks/cache всякий раз, когда я этого требую
  2. создать путь /disks/cache, если он не существует
  3. Предоставить разрешение +rwx моему пользователю или любому пользователю по умолчанию
  4. Автоматически размонтировать диск, если он простаивает 1 час

Почему шаг 4 не работает и как сделать так, чтобы папка удалялась после размонтирования, есть ли опция x-umount.rmdir?

Создайте файл автоматического монтирования для каждого устройства через systemd. Для этого создайте файл /etc/systemd/system/diskname.automount со следующим содержимым:

[Unit]
Description=Автоматическое монтирование пользовательских дисков
After=blockdev@dev-disk-by\x2dlabel-cch.target

[Automount]
Where= mountpoint
TimeoutIdleSec=10

[Install]
WantedBy=multi-user.target

Замените mountpoint на нужное место и убедитесь, что оно правильно присвоено устройству в /etc/fstab.

Это должно работать прямо.

Автомонтировщик systemd может сделать почти все это за вас. Единственная отсутствующая часть была уточнением, что он должен использоваться. Сделайте это, добавив x-systemd.automount в набор опций:

LABEL=cache /disks/cache ext4 rw,user,x-mount.mkdir,relatime,noauto,errors=remount-ro,x-systemd.idle-timeout=120min,x-systemd.automount  0 0

То, что вы описываете, нельзя сделать в fstab.

Вот типичные способы монтирования дисков:

  • Добавьте их в fstab, чтобы они автоматически монтировались при загрузке. (Опция defaults или auto в fstab делает это.)
  • Смонтируйте их вручную, либо как root с всеми параметрами, либо вручную как только точку монтирования или устройство с оставшимися параметрами из fstab, либо как пользователь для записей, перечисленных в fstab с опциями noauto,user в четвертой колонке.
  • Используйте udisks для автоматического монтирования горячих подключаемых дисков, таких как CD-ROM и USB-накопители, обычно в каталоге /media. Однако, это размонтируется только по запросу пользователя. Udisks обычно монтирует при вставке устройства, но его можно также запустить из командной строки.
  • Используйте autofs для монтирования по требованию, когда ссылаются на директорию, и размонтирования после тайм-аута, когда они больше не используются.

Autofs настраивается путем указания управляемых верхних директорий по одной на строку в /etc/auto.master с файлом конфигурации на каждую управляемую директорию, с каждым файлом конфигурации, перечисляющим поддиректории управляемых директорий.

Например, auto.master может перечислять /etc/auto.misc, который в свою очередь может перечислять ряд файловых систем или устройств с потенциальными файловыми системами. По умолчанию auto.misc, который поставляется с autofs, перечисляет floppy (закомментировано по умолчанию), который будет смонтирован на /misc/floppy, если к нему обратились и файловая система доступна на этом устройстве.

Пример строки из auto.master:

/misc  /etc/auto.misc
/home  /etc/auto.home
/disks  /etc/auto.disks   --timeout=3600

Пример строки из auto.misc:

floppy         -fstype=auto            :/dev/fd0

Пример строки из auto.home:

someuser         homeserver:/export/home/someuser

Autofs может сделать все, что вы запросили, кроме установки разрешений, которые обычно наследуются от разрешений корневого каталога на монтированной файловой системе, или опций монтирования, если файловая система это поддерживает. Приведенный выше (не протестированный) пример строки дисков будет требовать соответствующего файла /etc/auto.disks, описывающего файловые системы, которые вы хотите монтировать в /disks/

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

Для автоматического размонтирования диска при его бездействии и удаления каталога после размонтирования с использованием systemctl и systemd, необходимо учитывать несколько важных моментов. В данной ситуации вы уже создали конфигурацию в fstab, но столкнулись с некоторыми затруднениями, в частности с автозапуском и удалением каталога.

Как настроить автоматическое размонтирование с systemd

Вашей основной целью является автоматическое размонтирование диска при бездействии в течение часа и удаление каталога. systemd предоставляет функциональность для автоматизации процессов монтирования и размонтирования.

Конфигурация fstab

Для начала давайте подробнее рассмотрим, что уже описано в вашем fstab, и добавим необходимые опции:

LABEL=cache /disks/cache ext4 rw,user,x-mount.mkdir,relatime,noauto,errors=remount-ro,x-systemd.idle-timeout=60min,x-systemd.automount 0 0
  1. x-mount.mkdir: Эта опция создаёт каталог /disks/cache, если он не существует.
  2. x-systemd.idle-timeout=60min: Определяет время бездействия, после которого диск будет автоматически размонтирован.
  3. x-systemd.automount: Позволяет использовать systemd для автоматизации процесса монтирования и размонтирования.

Создание automount файла

Создать файл /etc/systemd/system/cache.automount:

[Unit]
Description=Automount для диска с меткой cache
After=local-fs.target

[Automount]
Where=/disks/cache
TimeoutIdleSec=60

[Install]
WantedBy=multi-user.target
  • TimeoutIdleSec=60: Определяет таймаут для снятия монтирования, который должен соответствовать указанному в fstab.

Удаление каталога после размонтирования

Удаление каталога после размонтирования не может быть выполнено непосредственно через fstab. Однако это можно автоматизировать через systemd с помощью дополнительных скриптов.

Служба для удаления каталога

Создайте скрипт, который будет удалять каталог, если он пуст:

#!/bin/bash
DIRECTORY="/disks/cache"
if [ -d "$DIRECTORY" ] && [ ! "$(ls -A $DIRECTORY)" ]; then
  rmdir "$DIRECTORY"
fi

Сохраните этот скрипт, например, как /usr/local/bin/remove_cache_directory.sh и сделайте его исполняемым:

chmod +x /usr/local/bin/remove_cache_directory.sh

Создание службы systemd для запуска скрипта

Создайте /etc/systemd/system/remove-cache-directory.service:

[Unit]
Description=Удаление каталога после размонтирования
Requires=cache.automount
Wants=cache.automount
After=cache.automount

[Service]
Type=oneshot
ExecStart=/usr/local/bin/remove_cache_directory.sh

[Install]
WantedBy=multi-user.target

Активируйте службу:

systemctl enable remove-cache-directory.service

Обеспечение прав доступа

Придание пользователям необходимых прав доступа к каталогу /disks/cache может быть выполнено прямо в настройках fstab благодаря опции user, но для специфических требований можно использовать команду chmod или добавлять более сложные правила прав доступа, например, через ACL.

Заключение

Эта процедура с использованием systemd позволит автоматически размонтировать диск после него бездействия и удалять каталог, если он пуст. Настройка прав доступа также играет важную роль в процессе автоматизации монтирования и размонтирования. Всё это вместе позволяет создать более управляемую и эффективную систему без значительных вмешательств вручную.

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

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