Ich führe Jessie/Sid mit Systemd 208 aus und versuche, die folgende Platzhalter-Autofs-Konfiguration entweder in eine /etc/fstab
oder eine .mount
/ .automount
-Definition zu konvertieren.
$ cat /etc/auto.master
/home/* -fstype=nfs homeserver:/exp/home/&
(Auf dem Homeserver wird Solaris ausgeführt, wobei jedes Unterverzeichnis /exp/home/
eine separate Freigabe ist.)
Gibt es eine Möglichkeit, Wildcard-Maps mit systemd zu emulieren?
Antwort1
Ich denke nicht. Der Name der .mount/.automount-Einheit muss dem Mount-Pfad entsprechen, der mit maskiert ist systemd-escape --path
. Und die einzige Möglichkeit in systemd, Einheiten zu instanziieren, ist die „Vorlagensyntax“ der Form [email protected]
. Daher ist es zumindest nicht möglich, eine dynamisch instanziierte Mount-Einheit zu haben.
Verwenden Sie einfach Autofs. Systemd ist kein Ersatz für alles.
Antwort2
Sie könnten systemd's verwendenGeneratorschnittstelle. Grundsätzlich werden Servicedateien beim Start oder Neuladen im laufenden Betrieb erstellt.
Wir haben eine Reihe von Maschinen (genannt "dema" plus eine Nummer) in unserem Cluster, die alle dasselbe Verzeichnis exportieren (ihre physische Festplatte). Ich habe die Generatorschnittstelle verwendet, um eine zu erstellen.montierenund ein.automountDatei für jede Maschine:
#!/bin/sh
svc_dir=/run/systemd/generator
for i in $(seq 1 99); do
# this must match the mount path, / is converted to -
unit_bn=cluster-dema$i
cat << EOF > "${svc_dir}/${unit_bn}.automount"
[Unit]
Description=dema${i}s localdisks automount point
Documentation=file:///usr/lib/systemd/system-generators/dema-automount-generator
Before=remote-fs.target
[Automount]
Where=/cluster/dema$i
EOF
cat << EOF > "${svc_dir}/${unit_bn}.mount"
[Unit]
Description=dema${i}s localdisks
Documentation=file:///usr/lib/systemd/system-generators/dema-automount-generator
[Mount]
What=dema$i:/localdisks
Where=/cluster/dema$i
Type=nfs
Options=rw,nosuid,nodev,hard,intr,rsize=8192,wsize=8192,noauto,x-systemd.automount
EOF
ln -s "../${unit_bn}.automount" "${svc_dir}/remote-fs.target.requires"
done
Das Skript muss in/usr/lib/systemd/system-generatorenund ausführbar. Nachdem Sie es dort abgelegt haben, rufen SieSystemd-Daemon neu ladenund Sie sollten die Einheiten in/run/systemd/generator. Sie werden beim nächsten Neustart aktiviert und können natürlich manuell gestartet werden, indem Siesystemd startet oneofthenames.automount.