Как перемонтировать модуль монтирования 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, нельзя иметь несколько единиц монтирования для одной и той же точки монтирования. Шаблоны также не работают для модулей монтирования.

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

  • Debian 8 Jessie с клиентом OpenVPN
  • Как открыть каталог в контейнере?
  • Где я могу поместить свой файл systemd в Arch Linux?
  • Что такое systemd equvalent для sysvinit «X-Start-Before»?
  • Почему моя служба Before = sleep.target запускается * после возобновления *?
  • kong нужно начинать после cassandra, но cassandra медленно принимает соединения, поэтому kong не запускается
  • В чем разница между pam_unix и pam_systemd?
  • Почему мой блок Systemd загружен, но неактивен (мертв)?
  • 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 - лучшая ОС в мире.