
Ich habe gerade eine ganze Menge Debian-Pakete aktualisiert und installiert und jetzt bekomme ich Fehler aufgrund meiner speziellen fstab-Dateikonfiguration. Ich habe 2 Laufwerke, die ich nie gleichzeitig mounte und die beide denselben Mount-Punkt haben ( /etc/fstab
Ausschnitt):
UUID=xxxx-xxxx /media/strontium vfat user,rw,exec,nofail 0 2
UUID=yyyy-yyyy /media/strontium vfat user,rw,exec,nofail 0 2
Nach der Installation beschwert sich systemd jedoch darüber:
[518052.191024] systemd-fstab-generator[28811]: Failed to create mount unit file /run/systemd/generator/media-strontium.mount, as it already exists. Duplicate entry in /etc/fstab?
Eigentlich möchte ich systemd gar nicht zum Mounten von Laufwerken verwenden. Ich habe es vorher verwendet sudo mount -a
und das hier hat einfach meine Datei durchsucht /etc/fstab
und alles gemountet, was angeschlossen war.
Ist es möglich, die Systemd-Mounting-Funktion auszuschalten, sodass ich meine eigenen Laufwerke wie zuvor manuell mounten kann?
Antwort1
Ich weiß nicht, wie ich diese systemd-Einschränkung umgehen kann, da der Verzeichnisname des Einhängepunkts in einen systemd-Dateinamen umgewandelt wird. Die einfachste Lösung besteht wahrscheinlich darin, die Einträge aus der fstab zu entfernen und ein kleines Skript zu schreiben, um die Einhänge bei Bedarf durchzuführen:
#!/bin/bash
( mount -U xxxx-xxxx /media/strontium -t vfat -o rw,exec ||
mount -U yyyy-yyyy /media/strontium -t vfat -o rw,exec
) && echo ok
Vergessen Sie nicht, nach der Änderung ein auszuführen /etc/fstab
, um sudo systemctl daemon-reload
sicherzustellen, dass systemd Ihre Änderungen bemerkt.
Wenn Sie die Einträge behalten möchten, /etc/fstab
können Sie den zweiten Einhängepunkt als symbolischen Link zum ersten verwenden, z. B. ln -s /media/strontium /media/strontium2
. Wenn das Einhängen abgeschlossen ist, wird dem Link gefolgt, sodass er wie üblich im Verzeichnis landet. In diesem Fall müssen Sie beiden Zeilen die Option hinzufügen noauto
, da systemd sonst verwirrt wird und sofort den vermeintlich ersten Eintrag aushängt.
Anstelle eines symbolischen Links können Sie stattdessen ein reales Verzeichnis verwenden und dann eine manuelleBind-Mountum das Verzeichnis am gewünschten Ort einzubinden:
mount --bind /media/strontium2 /media/strontium
Sie müssen daran denken, diese Bind-Halterung sowie die erste Halterung auszuhängen.
In der Vergangenheit hätten Sie eine Udev-Regel hinzufügen können, um mount explizit aufzurufen, wenn die UUID angezeigt wird, z. B. in /etc/udev/rules.d/92-my.rules
:
ACTION=="add", ENV{ID_FS_UUID}=="xxxx-xxxx", RUN+="/usr/bin/mount /dev/%k /media/strontium"
aber das funktioniert nicht mit neueren systemds, da es in einem separaten Mount-Namespace läuft , sodass es zwar das Mounten durchführt, Sie es also nicht sehen können. Ich kenne den Grund für diesen Namespace noch nicht, aber Sie können diese Funktion im Prinzip überschreiben, indem Sie eine Datei mit den beiden Zeilen udevd
erstellen
/etc/systemd/system/systemd-udevd.service
.include /usr/lib/systemd/system/systemd-udevd.service
MountFlags=shared
Wenn Sie etwas wollen, das immer noch automatisch abläuft, können Sie alternativ die Ereignisse der udevd
betreffenden Blockgeräte überwachen und eine explizite Einbindung durchführen. Führen Sie beispielsweise dauerhaft Folgendes aus:
#!/bin/bash
# udevadm monitor outputs a stanza ending with a blank line
# UDEV [5291328.3] add /devices/pci0000:00/.../usb3/..../block/sdd (block)
# ACTION=add
# DEVNAME=/dev/sdd
stdbuf -o L udevadm monitor -u -p -s 'block/disk' |
awk -F= '
$0~/^ACTION=/{ action = $2 }
$0~/^DEVNAME=/{ name = $2 }
$0~/^ID_FS_UUID=/{ uuid = $2 }
$0~/^$/{ if(action=="add" && (uuid=="xxxx-xxxx"||uuid=="yyyy-yyyy")
system("sudo mount mount " name " /media/strontium -t vfat -o rw,exec")
uuid=""
}'