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

Я хочу выразить следующую последовательность команд в терминах модулей монтирования Systemd и invictations systemctl:

# mount /some/path /some/mountpoint -o ro # mount /some/mountpoint -o remount,rw # touch /some/mountpoint/foo # placeholder for write action # mount /some/mountpoint -o remount,ro 

Концептуальная проблема заключается в том, что systemd.mount (5) работает с точками монтирования. Поскольку блоки активируются путем передачи полного пути в systemctl, нельзя иметь несколько единиц монтирования для одной и той же точки монтирования. Шаблоны также не работают для модулей монтирования.

Итак, как это работает? Это вообще возможно?

  • Расширение параметра systemd мешает синтаксису командной строки моей службы
  • Инициирование приложения после загрузки ОС, а затем перезапуск этого приложения каждый час после этого
  • Centos7 на NUC приостанавливается при нажатии кнопки питания
  • Systemd продолжает пытаться установить не существующий fstab-определенный диск даже без automount
  • Как добавить зависимость к systemd.mount, которая активирована / bin / mount?
  • Как запустить gunicorn в качестве демона systemd
  • Как исправить атрибут устройства последних строк журнала systemd перед выходом?
  • bind mounts systemd не магически работают с systemd-tmpfiles?
  • One Solution collect form web for “Как перемонтировать модуль монтирования Systemd с различными параметрами?”

    Используйте блок обслуживания вместо узла монтирования

    Простой блок обслуживания onehot с командой mount работал для моего варианта использования для повторного использования (и я предполагаю, что он будет работать для вас).

    Учитывая, что mounts часто уже определены в /etc/fstab а systemd автоматически генерирует <mountpoint>.mount для записей fstab, существует два подхода:

    1. Просто откидывайтесь на стандартный сервисный блок вместо узла монтирования и напрямую управляйте командой mount.
    2. Попробуйте использовать переопределение systemd? (Не проверено, не думайте, что это жизнеспособно)
      • У единиц монтирования есть строгое требование, чтобы устройство было названо в соответствии с точкой монтирования, поэтому, вероятно, невозможно запустить два отдельных узла монтирования для одной и той же точки монтирования (уже отмечено в вопросе).
      • Следовательно, это, вероятно, не будет работать для повторных подключений, предполагая, что оно только отменяет исходное определение единицы монтирования, сгенерированное из fstab, и не будет выполняться дважды.
      • Если попытаться, скорее всего, первоначальное монтирование, вероятно, не будет выполнено, если опция remount применяется к тому, что еще не смонтировано.

    пример

    Мне было нужно что-то подобное и наткнулся на следующую проблему, пытаясь использовать тип unit mount mount (потому что я не определял свое имя файла устройства в соответствии с точкой монтирования):

     Where= setting doesn't match unit name. Refusing. 

    Учитывая привязку привязки к dir данных с большим пространством, но с родительской точкой монтирования, имеющей набор nosuid и nodev, мне нужно было добавить suid и dev привилегии для lxc в / var / lib / lxc.

    Файл служебной единицы /etc/systemd/system/lxc-remount.service :

     [Unit] Description=Remount the /var/lib/lxc folder with suid and dev privileges Requires=var-lib-lxc.mount After=var-lib-lxc.mount Before=lxc.service [Service] Type=oneshot ExecStart=/bin/mount -o remount,rw,suid,dev,relatime,discard,data=ordered /var/lib/lxc [Install] WantedBy=lxc.service того, как [Unit] Description=Remount the /var/lib/lxc folder with suid and dev privileges Requires=var-lib-lxc.mount After=var-lib-lxc.mount Before=lxc.service [Service] Type=oneshot ExecStart=/bin/mount -o remount,rw,suid,dev,relatime,discard,data=ordered /var/lib/lxc [Install] WantedBy=lxc.service 

    Команды для его реализации:

     $ sudo systemctl daemon-reload $ sudo systemctl enable lxc-remount.service Created symlink from /etc/systemd/system/lxc.service.wants/lxc-remount.service to /etc/systemd/system/lxc-remount.service. $ sudo systemctl start lxc-remount.service 
    Linux и Unix - лучшая ОС в мире.