web-dev-qa-db-ja.com

Systemdマウントが失敗します。 Where =設定がユニット名と一致しません

このコマンドを使用した場合:

mount -t xfs -o noatime,nodiratime,logbufs=8 -L d1 /srv/node/d1

すべて正しく動作します。しかし、systemdマウントを介してマウントしようとすると失敗します。

ファイルを作成しました/etc/systemd/system/mnt-d1.mount以下のコンテンツを含む:

[Unit]
Description = Disk 1

[Mount]
What = LABEL=d1
Where = /srv/node/d1
Type = xfs
Options = noatime,nodiratime,logbufs=8

[Install]
WantedBy = multi-user.target

その後、次のコマンドを実行します。

systemctl daemon-reload
systemctl start mnt-d1.mount

最後のものは私に示しました:

Failed to start mnt-d1.mount: Unit mnt-d1.mount failed to load: Invalid argument.  
See system logs and 'systemctl status mnt-d1.mount' for details.

systemctl status mnt-d1.mount見せてくれました:

May 16 18:13:52 object1 systemd[1]: Cannot add dependency job for unit mnt-d1.mount, ignoring: Unit mnt-d1.mount failed to ...ectory.
May 16 18:24:05 object1 systemd[1]: mnt-d1.mount's Where= setting doesn't match unit name. Refusing.

systemdマウントユニットを介してディスクをマウントするのを手伝ってください。

20
Oleksandr

エラーメッセージは原因を説明します:

_Where= setting doesn't match unit name. Refusing.
_

ただし、そのメッセージを理解するには、いくつかのmanページを読む必要があります。
Per _systemd.mount_ man page (強調する鉱山):

_Where=_

マウントポイントのディレクトリの絶対パスを取得します。マウント時にマウントポイントが存在しない場合は作成されます。 この文字列は、ユニットのファイル名に反映されている必要があります。 (上記を参照。) このオプションは必須です。

「上記を参照」の部分は次のとおりです。

マウントユニットは、それらが制御するマウントポイントディレクトリにちなんで名前を付ける必要があります。例:マウントポイント_/home/lennart_は、ユニットファイル_home-lennart.mount_で構成する必要があります。ファイルシステムパスをユニット名に変換するために使用されるエスケープロジックの詳細については、systemd.unit(5)を参照してください。

OK、 _systemd.unit_ man page は次のように述べています:

systemd-escape(1)コマンドを使用して、適切にエスケープされたパスを生成できます。

_systemd-escape_のマニュアルページ を指します。

パスのマウントユニットを生成するには:

_$ systemd-escape -p --suffix=mount "/tmp//waldi/foobar/"_
_tmp-waldi-foobar.mount_

したがって、あなたの場合、_/srv/node/d1_は_srv-node-d1.mount_に変換されます

26
don_crissti