私は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