已移除的 USB 儲存裝置仍安裝

已移除的 USB 儲存裝置仍安裝

我正在開發一個基於busybox的嵌入式Linux系統。有時,從貼文中實際移除的 USB 裝置仍會顯示在mountdf或 中/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

相關內容