Systemd-Mount schlägt fehl. Dabei stimmt die Einstellung = nicht mit dem Gerätenamen überein

20

Wenn ich diesen Befehl verwende:

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

alles funktioniert einwandfrei. Aber wenn ich versuche, durch das systemdEinhängen zu mounten, schlägt es fehl.

Ich habe eine Datei /etc/systemd/system/mnt-d1.mountmit folgendem Inhalt erstellt:

[Unit]
Description = Disk 1

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

[Install]
WantedBy = multi-user.target

Danach führe ich diese Befehle aus:

systemctl daemon-reload
systemctl start mnt-d1.mount

Der letzte zeigte mir:

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 zeigte mir:

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.

Bitte helfen Sie mir, eine Festplatte über eine systemdMount-Einheit zu mounten.

Alexandr
quelle
Funktioniert immer noch nicht .. Der gleiche Fehler
Alexandr
Diese Frage sollte erneut geöffnet werden - ich hatte das gleiche Problem und die im Kommentar vorgestellte Lösung hat mir geholfen. Dem Kommentar sollte eine Antwort gegeben werden, damit ich ihn positiv bewerten kann.
Guss

Antworten:

26

Die Fehlermeldung erklärt die Ursache:

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

Zum Verständnis dieser Meldung müssen jedoch mehrere Manpages gelesen werden.
Pro systemd.mountManpage (betone meine):

Where=

Nimmt einen absoluten Pfad eines Verzeichnisses des Mount-Punkts. Wenn der Bereitstellungspunkt zum Zeitpunkt der Bereitstellung nicht vorhanden ist, wird er erstellt. Diese Zeichenfolge muss sich im Einheitendateinamen widerspiegeln. (Siehe oben.) Diese Option ist obligatorisch.

Der "siehe oben" Teil ist:

Mount-Units müssen nach den von ihnen kontrollierten Mount-Point-Verzeichnissen benannt werden. Beispiel: Der Einhängepunkt /home/lennartmuss in einer Unit-Datei konfiguriert werden home-lennart.mount. Weitere Informationen zur Escape-Logik, die zum Konvertieren eines Dateisystempfads in einen Einheitennamen verwendet wird, finden Sie unter systemd.unit(5).

OK, systemd.unitManpage besagt, dass:

Mit dem systemd-escape(1) Befehl können ordnungsgemäß maskierte Pfade generiert werden .

Verweis auf die systemd-escapeManpage, die erklärt, wie es geht:

So generieren Sie die Mount-Einheit für einen Pfad:

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

Also, in Ihrem Fall /srv/node/d1übersetzt zusrv-node-d1.mount

don_crissti
quelle
3
Es ist wichtig zu beachten, dass das "Pfadfluchtsystem" auch bei Nicht-AZ-Namen etwas komplexer werden kann. Auch müssen einige Striche auf dem Weg zum C-Stil umgewandelt werden \x2descape, die , wenn sie verwendet , um die Unit - Datei (abhängig von der Shell / Editor) möglicherweise zu erstellen , um wieder den Schrägstrich entkommen - so das Gerät fit Datei Montage /some-pathkann erfordern Laufenedit some\\x2dpath.mount
Guss
Ich bin hier gelandet, um herauszufinden, warum ich nicht besteigen konnte share-name. Das Umbenennen share_namelöste das Problem.
Brian Z
Ich würde ein doppeltes Plus geben, wenn ich könnte!
John Mee