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

  • ntfs-3g: Ошибка ввода / вывода
  • SSH 7.4 длительная пауза в «залоге: сеть»
  • systemd: Почему эта служба неактивна (мертва)?
  • Могу ли я установить общий ресурс и включить опцию mount_ user_xattr?
  • Отложите запуск некоторых демонов до тех пор, пока не загрузится диск при загрузке
  • Ошибка формата systemd Exec
  • Итак, как это работает? Это вообще возможно?

  • Как переименовать / dev / sdax (разделы) в Linux
  • Просмотр / управление пространствами имен mount в Linux
  • После перехода на Devuan, как удалить systemd?
  • Как зашифровать живой корень fs удаленно и разблокировать его через ssh
  • Запускать скрипт один раз в день с помощью systemd
  • Как определить службу системы Ubuntu Linux16.04 для fastcgi-mono-server4 или xsp4?
  • 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 - лучшая ОС в мире.