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