わかりました、それは長い時間でした、しかし私は今のところ私が見つけた最もよい選択と私の質問にまだ答えます。
最善の方法は、 udev
いくつかのスクリプト(ディレクトリを作成/削除し、リムーバブルデバイスをマウント/アンマウントする)に関連付けられ、 partition
udev
デバイスイベントタイプ。
1 - 追加/削除スクリプトの作成
このスクリプトを追加 storage-automount.sh
に /lib/udev/
実行可能に設定します( sudo chmod +x /lib/udev/storage-automount.sh
):
#!/bin/sh
# set the mountpoint name according to partition or device name
mount_point=$ID_FS_LABEL
if [ -z $mount_point ]; then
mount_point=${DEVNAME##*/}
fi
# if a plugdev group exist, retrieve its gid set & it as owner of mountpoint
plugdev_gid="$(grep plugdev /etc/group|cut -f3 -d:)"
if [ -z $plugdev_gid ]; then
gid=''
else
chown root:plugdev $mount_point
gid=",gid=$plugdev_gid"
fi
# create the mountpoint directory in /media/ (if not empty)
if [ -n $mount_point ]; then
mkdir -p /media/$mount_point
# other options (breaks POSIX): noatime,nodiratime,nosuid,nodev
mount -t $ID_FS_TYPE \
-o rw,flush,user,uid=0$gid,umask=002,dmask=002,fmask=002 \
$DEVNAME /media/$mount_point
fi
このスクリプトを追加 storage-autounmount.sh
に /lib/udev/
実行可能に設定します( sudo chmod +x /lib/udev/storage-autounmount.sh
):
#!/bin/sh
# set the mountpoint name according to partition or device name
mount_point=$ID_FS_LABEL
if [ -z $mount_point ]; then
mount_point=${DEVNAME##*/}
fi
# remove the mountpoint directory from /media/ (if not empty)
if [ -n $mount_point ]; then
umount -l /media/$mount_point
rm -R /media/$mount_point
fi
2 - を作成する udev
これらのスクリプトをイベントに添付する規則
そして最後に、 udev
支配する /etc/udev/rules.d
、 例えば 85-storage-automount.rules
:
ENV{DEVTYPE}=="partition", RUN+="/lib/udev/storage-automount.sh", ENV{REMOVE_CMD}="/lib/udev/storage-autounmount.sh"
以上です。
今、あなたがストレージデバイスを接続すると、ディレクトリが /media/
パーティション名に従って(私は覚えていませんが、NTFSパーティションでも動作していると思います)、パーティションはそこにマウントされます。あなたが持っていればそれはユーザーのためのR / Wです。 plugdev
システム上でグループ化します。また、デバイスは、ホットプラグを抜いた場合のデータ損失のリスクを抑えるために同期モードでマウントされています。
デバイスが削除されると、それはマウント解除され、ディレクトリは /media
。
また、監視するためのツール udev
イベントは udevadm monitor
のようなオプションで --env
または --property
:
$ udevadm monitor --env
これはDebianとArchの両方でテストされ、うまく機能していますが、おそらく依存しているすべてのディストリビューションでうまくいくでしょう。 udev
。