ファイルシステムの異なる場所に複数のサブボリュームがマウントされているbtrfs設定があります。各サブボリュームにはスナッパー構成があります。
猫/etc/conf.d/snapper
[...]
SNAPPER_CONFIGS="root home [...]"
起動時にスナップショットを作成するサービスはファイルに定義されています。
Cat/usr/lib/systemd/system/snapper-boot.service
[...]
ExecStart=/usr/bin/snapper --config root --cleanup-algorithm number --description "boot"
ExecStart=/usr/bin/snapper --config home --cleanup-algorithm number --description "boot"
[...]
サブボリュームごとに1行を追加する代わりに、間違ってしまいやすいと思います。スナッパー設定リストを読み、繰り返します。。
可能ですか?
望ましいですか?
答え1
はい、可能です。
簡単な方法は、snapper
各構成に対して一度に繰り返し呼び出されるシェルスクリプトを使用することです。for
これを行うにはループだけで十分です。
システム単位ファイルでこれをインラインで実行することもできます。
ExecStart=/bin/sh -e -c '. /etc/conf.d/snapper; for conf in $$SNAPPER_CONFIGS; do /usr/bin/snapper --config "$$conf" --cleanup-algorithm number --description "boot"; done'
$
systemdがそれをsystemd変数として解釈するのではなく、シェルがそれを解釈できるようにsをエスケープする必要があります。 (私の考えでは、呼び出す外部シェルスクリプトを使用する方がきちんとしたExecStart=
アプローチなので、エスケープ処理を処理し、すべてを一行にする必要はありません。)
別のオプションは、snapper
問題を基本的に処理できるようにそれ自体を修正することです。たとえば、設定ファイルを読み、引数なしで呼び出されたときに設定を処理するようにします--config
。これがよりきれいなアプローチになります。
オススメなのかな……によって違うと思います。配布パッケージからこのデバイスを入手すると、snapper-boot.sevice
このファイルに関連するパッケージのアップグレードがあるたびに問題が発生する可能性があります。したがって、ある程度は特定の状況によって異なります。
このユニットファイルがLinuxディストリビューションパッケージに付属している場合は、バグレポートを開いてユニットファイルに設定名をハードコードしないようにすることをお勧めします。
ディストリビューションに属していない場合は、通常、Linuxディストリビューションで提供および管理するファイル用に予約されているため、そのディストリビュー/etc/systemd/system
ションに保存することをお勧めします。/usr/lib