
この素晴らしいものを超えて行きたい解決@AB による、ルールを使用して特定のリムーバブル ext3 FS を自動マウントする機能ですudev
。具体的には、いくつかのマウントオプション: " 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、...)は未回答のままです。
1つマウントされたボリュームが Nautilus GUI に表示され、非ルート ユーザーがアンマウントできる必要がある場合、ルールx-gvfs-show
と組み合わせて使用されるGVFS オプションを扱います。少なくとも最後の側面をカバーするために、私は udev ルールでマウント オプションを指定しないようにしてエントリを追加しました。これは、同じ uuid ボリュームに対して並行して機能するルールを保持しているという事実を考えると、かなり醜いハックです。それでも、私は以下を追加しました:udev
Devices
/etc/fstab
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' にマウントされています。
誰か何か考えましたか?
バウンティこの OP と、ルールを介してマウント オプションを指定することに関心のある多くの人々に役立つ標準的な回答を提供してくださいudev
。不可能な場合は、その理由を説明し、実行可能な回避策を提供してください。よろしくお願いします。
答え1
スクリプト
#!/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
答え2
これを行うには、udev ルールを使用しないでください。まず、udisks と競合します。どちらもドライブを別の場所にマウントしようとしており、どちらが優先されるかは誰にもわかりません。また、ドライブの使用が終わったら、GUI でドライブを右クリックして取り出せるようにしたいのですが、udev ルールでマウントした場合はそれができません。
カスタム オプションまたはカスタムの場所でマウントしたい場合は、/etc/fstab にエントリを追加し、必ず「user」オプションを含める必要があります。これにより、非 root ユーザーは udisks を使用して自動的にマウントできるようになり、後でアンマウントできるようになります。
答え3
AB の回答を完了し、記録するために:
マウントオプション できる 特定の条件下では、udev ルール内で指定できます。テストを実行したところ、いくつかのオプションが次のようになっていることに気付きました。
- 承認および施行:
ro
、、、rw
nodev
noexec
- 受け入れられて無視されました:
comment=x-gvfs-show
、 - udevルールに違反しているため受け入れられません:
mode=0XYZ
、x-gvfs-show
後者の場合、ルールに違反すると、デフォルトのオプションでメディアが自動的にマウントされるudev
ことになります。udisk
タグudev
はMODE="0550"
、読み取り専用( ro
) マウント オプションは無視されます。 または を指定しても、期待どおりに Nautilus に表示されないことに注意してください。奇妙なことに、Nautilus によって表示される権限は変更されませんが、 が設定されている場合に書き込みを試みると、 ro
警告メッセージが表示され、書き込み権限が拒否されます。バグですか?rw
ro
最後になりましたが、重要なことです、しないでください特定のデバイスのマウント ルール/etc/fstab
を指定すると同時にエントリを準備します。これにより、デバイスをマウントするためのルールと競合するため、競合が発生し、エラー メッセージが表示されます。これは驚くことではありません。ただし、デバイスはマウントされたままです (私の場合はルールによってマウントされます。理由は聞かないでください...)。また、アクセスすることもできます。udev
udisk
udev
udev
ちょっとHTH。