Mount

Systemd 掛載失敗。Where= 設置與單位名稱不匹配

  • July 7, 2021

如果我使用這個命令:

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安裝單元安裝磁碟。

錯誤消息解釋了原因:

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

雖然理解該消息需要閱讀幾個手冊頁。

每個systemd.mount手冊頁(強調我的):

Where=

採用掛載點目錄的絕對路徑。如果掛載點在掛載時不存在,則創建它。 **該字元串必須反映在單元文件名中。(見上文。)**此選項是強制性的。

“見上文”部分是:

掛載單元必須以它們控制的掛載點目錄命名。範例:/home/lennart必須在單元文件中配置掛載點home-lennart.mount。有關將文件系統路徑轉換為單元名稱的轉義邏輯的詳細資訊,請參閱 systemd.unit(5)

好的,systemd.unit手冊頁指出:

可以使用該systemd-escape(1) 命令生成正確轉義的路徑。

指向解釋如何做到這一點的systemd-escape手冊頁:

要為路徑生成安裝單元:

$ systemd-escape -p --suffix=mount "/tmp//waldi/foobar/"

tmp-waldi-foobar.mount

所以,在你的情況下,/srv/node/d1轉化為srv-node-d1.mount

引用自:https://unix.stackexchange.com/questions/283442