systemd-Fehler, wenn zwei Geräte denselben Einhängepunkt gemeinsam nutzen

systemd-Fehler, wenn zwei Geräte denselben Einhängepunkt gemeinsam nutzen

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/fstabAusschnitt):

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 -aund das hier hat einfach meine Datei durchsucht /etc/fstabund 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-reloadsicherzustellen, dass systemd Ihre Änderungen bemerkt.


Wenn Sie die Einträge behalten möchten, /etc/fstabkö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 udevderstellen /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 udevdbetreffenden 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=""
       }'

verwandte Informationen