@ A.Bによるこの優れた solution を超えたいと思います。 udev
ルールを使用して、特定のリムーバブルext3 FSを自動マウントできます。具体的には、いくつかのmount optionsを指定したい: "nodev,noexec,x-gvfs-show
"、できればマウントに使用される特定のudev
ルール内。これは非常に特定の物理メディアを処理するためです。
オプションを指定しないと、ボリュームは次のようにマウントされます。
$ cat /proc/mounts | grep -e MYLABEL
/dev/mmcblk0p1 /mnt/MYLABEL ext3 rw,relatime,data=ordered 0 0
マウントオプションを指定するために、前のソリューションからudev
ルールを拡張しようとしました。
KERNEL=="mmc*", ENV{ID_FS_UUID}=="______", RUN+="/usr/local/sbin/mount_by.sh '%E{ID_FS_LABEL}' '%E{ID_FS_UUID}' 'nodev,noexec,x-gvfs-show'"
ここで、/usr/local/sbin/mount_by.sh
には以下が含まれます。
#!/bin/sh
/bin/mount "/dev/disk/by-uuid/$2" "/mnt/$1" -o "$3"
ルート定義のマウントオプションが拒否され、ボリューム(SDカード)が/ media/MYUSER/MYLABELにサイレントマウントされるため、上記は静かに壊れます。
何が問題なのですか?
私がやろうとしたこと:
udev
を使用するときにマウントオプションの指定の難しさを扱った多くの投稿(たとえば 1 、 2 、...)は未回答のままです。
One Nautilus GUIのudev
の下にマウントされたボリュームを表示する必要があり、root以外のユーザーがアンマウントできるようにする必要がある場合、Devices
ルールと共に使用されるGVFSオプションx-gvfs-show
を処理します。少なくとも最後の側面をカバーするために、udevルールにマウントオプションを指定しないことに戻しましたが、/etc/fstab
エントリを追加しました。同じuuidボリュームに対して機能するudev
ルールを並行して保持しているため、かなりいハックです。それでも、私は追加しました:
UUID=_________ /mnt/MYLABEL ext3 nodev,noexec,x-gvfs-show 0 2
FSはマウントされますが、Nautilusで意図したとおりに表示されますが、cat /proc/mounts | grep -e MYLABEL
は以前と同じ結果になります。つまり、オプションnodev,noexec
は無視されます。
それほど驚くことではないが、画面にエラーメッセージも表示されます。
MYLABELをマウントできません。デバイス/ dev/mmcblk0p1はすでに `/ mnt/MYLABEL 'にマウントされています。
誰もが考えた?
BOUNTYこのOPとudev
ルールを介してmount-optionsを指定することに関心のある多くの人々に役立つ標準的な答えを提供してください。不可能な場合は、その理由を説明し、実行可能な回避策を提供してください。乾杯。
スクリプト
#!/bin/sh
export mount_point="/mnt/$1"
existing_device=$(awk '$2 == ENVIRON["mount_point"] {print $1; exit}' < /proc/mounts)
if [ -n "$existing_device" ]; then
exit 1
fi
mkdir -p "$mount_point"
sleep 1 # Perhaps not necessary, but in the test with the OP it was necessary
mount "/dev/disk/by-uuid/$2" "$mount_point" -o "$3"
exit 0
このようなudevルールで完璧に動作するはずです(UUIDを交換する必要があります)
KERNEL=="mmc*", ENV{ID_FS_UUID}=="13ededb9-41e9-4674-b9dc-40ce178af91d", RUN+="/usr/local/bin/mount_by '%E{ID_PART_ENTRY_NAME}' '%E{ID_FS_UUID}' nodev,noexec"
Udev-rulesはroot
として実行されるため、-o
が使用されます。
私のシステムでは間違いなく、x-gvfs-show
は-o
のオプションリストでは機能しません
これを行うためにudevルールを使用するべきではありません。 1つは、udiskと競合していることです。どちらも異なる場所にドライブをマウントしようとしていますが、どちらが勝つかは推測です。また、ドライブでの作業が完了したら、GUIで右クリックしてイジェクトできるようにしたいが、udevルールによってマウントされている場合は実行できません。
カスタムオプションまたはカスタムの場所でマウントする場合は、そのエントリを/ etc/fstabに追加する必要があり、「user」オプションを含める必要があります。これにより、root以外のユーザーがudiskで自動マウントできます。 、そして、彼らは後でそれをアンマウントできます。
A.B.の回答を完了し、記録のために:
マウントオプションcan特定の条件下でudevルール内で指定可能...テストを実行したところ、いくつかのオプションがあることに気付きました。
ro
、rw
、nodev
、noexec
comment=x-gvfs-show
、mode=0XYZ
、x-gvfs-show
後者の場合、udev
ルールを破ると、udisk
はデフォルトのオプションでメディアを自動マウントします。
udev
タグMODE="0550"
は、read-only(ro
)マウントの呼び出しと同等と考えることができます。オプションは無視されます。 ro
またはrw
を指定しても、期待どおりにNautilusに表示されないことに注意してください。 Nautilusによって表示される奇妙なパーミッションは変更されませんが、ro
が設定されている場合に書き込みを試みると、警告メッセージが表示され、パーミッションが拒否されます。バグ?
最後になりましたが、しない指定されたデバイスにudev
マウントルールを指定すると同時に/etc/fstab
エントリを配置します。その結果、競合が発生し、udisk
がデバイスをマウントするudev
ルールと競合するため、エラーメッセージが表示されます。そのことに驚きはありません。ただし、デバイスは引き続きマウントされます(私の場合、udev
ルールによって-理由を聞かないでください...)、アクセスすることもできます。
HTH少し。