web-dev-qa-db-ja.com

USBドライブを読み取り専用でマウントするudevルールを作成するにはどうすればよいですか?

特定のUSBドライブを常に読み取り専用でマウントするように設定しようとしています。プラグインすると、単一のパーティションsdb1を持つsdbと表示されます。以下は関連するudevadm行です(もちろん出力全体ではありません)。

$ udevadm info -a -n /dev/sdb1
  looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.0/Host21/target21:0:0/21:0:0:0/block/sdb/sdb1':
    KERNEL=="sdb1"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{ro}=="0"
    ATTR{size}=="976768002"
    ATTR{stat}=="     473    30586    33938     3460        5        0       40     1624        0     2268     5084"
    ATTR{partition}=="1"

OK、それで私は次のudevルールを書き、それを/etc/udev/rules.d/10-usbdisk.rulesとして保存しました:

SUBSYSTEM=="block",
ATTR{size}=="976768002",
MODE="0555"

this によると、sizeを使用するだけで十分ですが、他の置換も試しました。いずれの場合でも、ルールは読み取られたように見えます(ここでも、選択された出力行で、出力全体を確認できます here

$ udevadm test $(udevadm info -q path -n /dev/sdb1) 2>&1
[...]
read rules file: /etc/udev/rules.d/10-usbdisk.rules
[...]
MODE 0555 /etc/udev/rules.d/10-usbdisk.rules:4

したがって、ルールが適用されるようにに見えるようになり、MODE="0555"に見えるは正しい構文です。しかし、実際にディスクを接続すると、その上でファイルを楽しく作成/削除できます。

OS:Debianテスト(LMDE)

それで、私は何が間違っているのですか?特定のUSBドライブを自動的に読み取り専用としてマウントする方法sing udev1

1私はfstabでこれを行う方法を知っていますが、fstab設定はgvfsによって無視されます。私の目的は、これをGUIで読み取り専用として自動的にマウントすることです。おそらくこれは何らかの方法でudevまたはgvfsを介して行う必要があります。

6
terdon

要約すると、NautilusはGVFSを使用しており、fstabエントリーを読み取るときにudevにGVFSも使用するように指示する必要があるということです。これは次のようにして行うことができます。

/dev/block-device /mount/point auto x-gvfs-show,ro 0 0

x-gvfs-showは、udevおよびGVFSヘルパーを使用してファイルシステムをマウントすることに関心のあるユーザーに通知するため、gvfsはすべての制御マウント、アンマウント、マウントポイントの移動などを行います。


ドライブがGUI(特にNautilus)を備えた最新のLinuxシステムにどのようにマウントされているかを理解しているかどうかを確認します。

Nautilusは [〜#〜] gvfs [〜#〜] をバックエンドとして使用して、FTP、SMB、ブロックデバイスなどをファイルシステムにマウントします。そのような提案のためにGNOMEが設計したツールはディスクと呼ばれ、GVFSの動作を変更するツールです。ここからがおもしろい。

Nautilusは、(fstabを使用するなど)GVFSを使用してマウントされなかったものをすべて無視し、udevを使用してこれに対する非常に基本的な制御を提供します(Nautilusは、GVFSを使用して、GVFSを使用して操作されなかったデバイスをアンマウントまたはマウントするように要求しません。 fstab、mount、その他のblobなど)。 fstab/udevに保存されている権限とオプションを使用すると、それに応じてこれらのファイルシステムを使用できますが、GVFSを使用して動作を変更することはできません。何かがSudo mount -o rw /dev/sda3を使用してマウントされた場合、nautilusはudevにマウントポイントを変更する権限がないことを通知するため、責任をudevに渡し、udevがpolkitに権限を要求します。 GVFSを使用していた場合は、nautilus自体が権限やダイアログなどなしでデバイスをアンマウントします。

8
Braiam

あなたはブロックデバイスを読み取り専用にすることができます

blockdev --setro /dev/sdb1

このコマンドをudevに実行させることができます(IIRC RUN=)。

3
Hauke Laging

問題はSUBSYSTEMだと思います。usbではなくblockに変更してください。私はこの行をルールに追加し、私にとってはうまくいきます:

SUBSYSTEMS="usb", ENV{ID_FS_USAGE}=="filesystem", ENV{UDISKS_MOUNT_OPTIONS}="ro"
2
cuonglm