取り外された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

関連情報