Ich arbeite an einem eingebetteten Linux-System, das auf Busybox basiert. Manchmal wird ein USB-Gerät, das physisch vom Post entfernt wurde, immer noch in mount
oder df
angezeigt /proc/mounts
. Wenn ich das Gerät erneut anschließe, wird es beispielsweise erkannt, /dev/sdb1
während das /dev/sda1
Gerät noch gemountet ist.
Ich weiß, dass geöffnete Dateihandles auf entfernten Geräten dies verursachen können, aber gibt es noch andere Bedingungen, die dieses Verhalten auslösen können?
Antwort1
Sie könnten eine udev-Regel wie folgt schreiben:
ACTION=="remove", KERNEL=="sd[b-z][0-9]", SUBSYSTEM=="block", RUN+="umount-removed.sh"
Dadurch wird das Unplug-Ereignis ausgelöst und anschließend das Dateisystem über dieses Skript ausgehängt.
MNT_POINT=`df | grep "$DEVNAME" | awk '{print $6}'`
#If still mounted
if [ ! -z "$MNT_POINT" ];then
logger -i -t usbrm -p daemon.notice "The device $DEVNAME is still mounted"
#Umount fs
umount $DEVNAME
if [ $? -eq 0 ];then
logger -i -t usbrm -p daemon.notice "$DEVNAME successfully unmounted from $MNT_POINT"
else
logger -i -t usbrm -p daemon.err "Impossible to umount $DEVNAME from $MNT_POINT. Aborting..."
fi
fi
Sie können das Protokoll in /var/daemon.log sehen.
Bearbeiten :Ich habe vergessen, klarzustellen, dass Udev einen bestimmten Namensraum verwendet, Sie müssen es also so konfigurieren, dass der Einhängepunkt mit dem Benutzerraum geteilt wird.
Suchen Sie dazu die Datei systemd-udevd.service
auf Ihrem System, duplizieren Sie sie /etc/systemd/system/systemd-udevd.service
und ersetzen Sie den Inhalt durchMountFlags=shared