我正在開發一個基於busybox的嵌入式Linux系統。有時,從貼文中實際移除的 USB 裝置仍會顯示在mount
、df
或 中/proc/mounts
。如果我重新連接設備,則會在設備仍然安裝/dev/sdb1
時檢測到它。/dev/sda1
我知道在已刪除的裝置上開啟檔案句柄可能會導致這種情況,但是是否還有其他條件可以觸發此行為?
答案1
你可以寫一個 udev 規則,例如
ACTION=="remove", KERNEL=="sd[b-z][0-9]", SUBSYSTEM=="block", RUN+="umount-removed.sh"
這將觸發拔出事件,然後從該腳本卸載檔案系統
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
您可以在/var/daemon.log 中看到日誌。
編輯 :忘記準確地說 udev 使用特定的名稱空間,因此您必須將其配置為與使用者空間共用掛載點。
為此,請systemd-udevd.service
在系統上找到該檔案並將其複製到/etc/systemd/system/systemd-udevd.service
並將內容替換為MountFlags=shared