web-dev-qa-db-ja.com

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

@ 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を使用するときにマウントオプションの指定の難しさを扱った多くの投稿(たとえば 12 、...)は未回答のままです。

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を指定することに関心のある多くの人々に役立つ標準的な答えを提供してください。不可能な場合は、その理由を説明し、実行可能な回避策を提供してください。乾杯。

6
Cbhihe

スクリプト

#!/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
A.B.

これを行うためにudevルールを使用するべきではありません。 1つは、udiskと競合していることです。どちらも異なる場所にドライブをマウントしようとしていますが、どちらが勝つかは推測です。また、ドライブでの作業が完了したら、GUIで右クリックしてイジェクトでき​​るようにしたいが、udevルールによってマウントされている場合は実行できません。

カスタムオプションまたはカスタムの場所でマウントする場合は、そのエントリを/ etc/fstabに追加する必要があり、「user」オプションを含める必要があります。これにより、root以外のユーザーがudiskで自動マウントできます。 、そして、彼らは後でそれをアンマウントできます。

2
psusi

A.B.の回答を完了し、記録のために:

マウントオプションcan特定の条件下でudevルール内で指定可能...テストを実行したところ、いくつかのオプションがあることに気付きました。

  • 承認および施行:rorwnodevnoexec
  • 受け入れられ無視されます:comment=x-gvfs-show
  • 受け入れられません。udevルールに違反するためです:mode=0XYZx-gvfs-show

後者の場合、udevルールを破ると、udiskはデフォルトのオプションでメディアを自動マウントします。

udevタグMODE="0550"は、read-onlyro)マウントの呼び出しと同等と考えることができます。オプションは無視されます。 roまたはrwを指定しても、期待どおりにNautilusに表示されないことに注意してください。 Nautilusによって表示される奇妙なパーミッションは変更されませんが、roが設定されている場合に書き込みを試みると、警告メッセージが表示され、パーミッションが拒否されます。バグ?

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

HTH少し。

1
Cbhihe