14.04.3 にマウントされた ext3 fs の udev-rule のマウント オプション

14.04.3 にマウントされた ext3 fs の udev-rule のマウント オプション

この素晴らしいものを超えて行きたい解決@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(例:12、...)は未回答のままです。

1つマウントされたボリュームが Nautilus GUI に表示され、非ルート ユーザーがアンマウントできる必要がある場合、ルールx-gvfs-showと組み合わせて使用​​されるGVFS オプションを扱います。少なくとも最後の側面をカバーするために、私は udev ルールでマウント オプションを指定しないようにしてエントリを追加しました。これは、同じ uuid ボリュームに対して並行して機能するルールを保持しているという事実を考えると、かなり醜いハックです。それでも、私は以下を追加しました:udevDevices/etc/fstabudev

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、、、rwnodevnoexec
  • 受け入れられて無視されました: comment=x-gvfs-show
  • udevルールに違反しているため受け入れられません: mode=0XYZx-gvfs-show

後者の場合、ルールに違反すると、デフォルトのオプションでメディアが自動的にマウントされるudevことになります。udisk

タグudevMODE="0550"読み取り専用( ro) マウント オプションは無視されます。 または を指定しても、期待どおりに Nautilus に表示されないことに注意してください。奇妙なことに、Nautilus によって表示される権限は変更されませんが、 が設定されている場合に書き込みを試みると、 ro警告メッセージが表示され、書き込み権限が拒否されます。バグですか?rwro

最後になりましたが、重要なことです、しないでください特定のデバイスのマウント ルール/etc/fstabを指定すると同時にエントリを準備します。これにより、デバイスをマウントするためのルールと競合するため、競合が発生し、エラー メッセージが表示されます。これは驚くことではありません。ただし、デバイスはマウントされたままです (私の場合はルールによってマウントされます。理由は聞かないでください...)。また、アクセスすることもできます。udevudiskudevudev

ちょっとHTH。

関連情報