インストールデバイスの代わりにサービスデバイスを使用する

インストールデバイスの代わりにサービスデバイスを使用する

Systemdインストールデバイスと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 に渡してアクティブになるため、同じマウントポイントに複数のセルをインストールすることはできません。テンプレートは取り付け装置には適していません。

それでは、どのように機能しますか?可能ですか?

ベストアンサー1

インストールデバイスの代わりにサービスデバイスを使用する

mountコマンドを使用する簡単な使い捨てサービスデバイスは、私の再マウントユースケースに適しています(あなたのユースケースにも効果があると思います)。

通常、マウントがすでに定義されており、/etc/fstabfstabエントリがsystemdによって自動的に生成されることを考慮すると、<mountpoint>.mount2つのアプローチがあります。

  1. インストールユニットの代わりに標準サービスユニットに戻り、インストールコマンドを直接制御するだけです。
  2. systemdオーバーライドを試してみますか? (テストされておらず、実行可能とは見なされません)
    • デバイスをマウントするには厳しい要件があります。つまり、マウントポイントに基づいてデバイス名を指定します。したがって、同じマウントポイントに対して2つの別々のマウントデバイスを実行することは不可能かもしれません(質問で言及されています)。
    • したがって、fstabで生成された元のマウントデバイス定義を上書きして2回実行しないと仮定すると、再マウントすると機能しない可能性があります。
    • 試してみると、まだインストールされていないアイテムに再インストールオプションが適用されるため、元のインストールが失敗する可能性があります。

はい

同様のものが必要で、systemdを使用してユニットタイプをインストールしようとしたときに、次の問題に遭遇しました(マウントポイントに基づいてユニットファイル名を定義していないため):

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

より多くのスペースを持つデータディレクトリにバインドマウントを実行したが、親マウントポイントにnosuidとnodevが設定されている場合は、/ var / lib / lxcにlxcのsuidおよびdev権限を追加する必要があります。

サービス単位ファイル/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

これを効果的に実行するコマンド:

$ 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

おすすめ記事