Instalacja systemowa kończy się niepowodzeniem. Gdzie = ustawienie nie pasuje do nazwy jednostki

20

Jeśli użyję tego polecenia:

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

wszystko działa poprawnie. Ale jeśli spróbuję zamontować przez systemdmount, to zawiedzie.

Utworzyłem plik /etc/systemd/system/mnt-d1.mounto następującej treści:

[Unit]
Description = Disk 1

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

[Install]
WantedBy = multi-user.target

Następnie uruchamiam następujące polecenia:

systemctl daemon-reload
systemctl start mnt-d1.mount

Ostatni pokazał mi:

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 pokazał mi:

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.

Pomóż mi zamontować dysk za pomocą systemdmodułu montowania.

Alexandr
źródło
Nadal nie działa .. Ten sam błąd
Alexandr
To pytanie powinno zostać ponownie otwarte - miałem ten sam problem, a rozwiązanie przedstawione w komentarzu pomogło mi. Komentarz powinien być odpowiedzią, aby móc go głosować.
Guss

Odpowiedzi:

26

Komunikat o błędzie wyjaśnia przyczynę:

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

chociaż zrozumienie tej wiadomości wymaga przeczytania kilku stron podręcznika.
Strona na systemd.mountosobę (podkreśl moją):

Where=

Pobiera bezwzględną ścieżkę do katalogu punktu montowania. Jeśli punkt montowania nie istnieje w momencie montowania, jest tworzony. Ten ciąg musi zostać odzwierciedlony w nazwie pliku jednostki. (Patrz wyżej.) Ta opcja jest obowiązkowa.

Część „patrz wyżej” to:

Jednostki montowania należy nazwać po katalogach punktów montowania, które kontrolują. Przykład: punkt podłączenia /home/lennartmusi być skonfigurowany w pliku jednostkowym home-lennart.mount. Aby uzyskać szczegółowe informacje na temat logiki zmiany znaczenia używanej do konwersji ścieżki systemu plików na nazwę jednostki, patrz systemd.unit(5).

OK, systemd.unitstrona podręcznika stwierdza, że:

Za pomocą systemd-escape(1) polecenia można wygenerować prawidłowo ucieczkowe ścieżki .

wskazując systemd-escapestronę man, która wyjaśnia, jak to zrobić:

Aby wygenerować moduł montowania dla ścieżki:

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

Więc w twoim przypadku /srv/node/d1przekłada się nasrv-node-d1.mount

don_crissti
źródło
3
Należy zauważyć, że system „ucieczki ścieżki” może być nieco skomplikowany nawet w przypadku nazw innych niż AZ. Nawet niektóre myślniki na ścieżce będą musiały zostać przekonwertowane na kod \x2ducieczki w stylu C , który, gdy zostanie użyty do utworzenia pliku jednostkowego, może (w zależności od powłoki / edytora) ponownie uciec znak ukośnika - więc montaż pasujący do pliku jednostkowego /some-pathmoże wymagają uruchomieniaedit some\\x2dpath.mount
Guss
Skończyłem tutaj, próbując dowiedzieć się, dlaczego nie mogłem dosiąść share-name. Zmiana nazwy share_namerozwiązała problem.
Brian Z
Dałbym podwójne głosowanie, gdybym mógł!
John Mee,