Системное монтирование не удается. Где = настройка не соответствует имени устройства

20

Если я использую эту команду:

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монтирования.

Александр
источник
Все еще не работает .. Та же ошибка
Александр
Этот вопрос должен быть вновь открыт - у меня была та же проблема, и решение, представленное в комментарии, помогло мне. На комментарий должен быть дан ответ, чтобы я мог его проголосовать.
Гусс

Ответы:

26

Сообщение об ошибке объясняет причину:

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

don_crissti
источник
3
Важно отметить, что система «выхода из пути» может быть немного сложной, даже имея дело с именами, отличными от AZ. Даже некоторые тире в пути должны быть преобразованы в \x2descape -стиль C , который при использовании для создания файла модуля может (в зависимости от вашей оболочки / редактора) снова экранировать символ косой черты - так что монтирование файла модуля /some-pathможет требуют бегаedit some\\x2dpath.mount
Guss
Я попал сюда, пытаясь понять, почему я не могу смонтировать share-name. Переименование это share_nameрешило проблему.
Брайан Z
Я бы отдал двойной голос, если бы мог!
Джон Ми