在 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"

由於 root 定義的安裝選項似乎被拒絕,而磁碟區(SD 卡)默默地安裝在 /media/MYUSER/MYLABEL 上,因此上述內容悄悄中斷。

怎麼了 ?


我嘗試做的事情:

我見過的許多帖子都涉及使用時處理安裝選項規範的困難udev(例如1,2,...)仍然沒有得到答案。

x-gvfs-show處理與規則結合使用的GVFS 選項udev,此時掛載的磁碟區必須出現在DevicesNautilus GUI 上,非 root 使用者必須能夠卸載它。為了至少涵蓋最後一個方面,我恢復為不在我的 udev 規則中指定掛載選項,但添加了一個/etc/fstab條目,考慮到我udev並行地為同一uuid 卷保留了一個功能規則,這是一個相當醜陋的黑客行為。儘管如此,我補充道:

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 規則來執行此操作。其一,它與 udisk 相衝突:它們都試圖將驅動器安裝在不同的位置,誰勝誰負誰也說不準。另外,當您使用完驅動器後,您希望能夠在 GUI 中右鍵單擊它並將其彈出,但如果 udev 規則安裝了它,則無法執行此操作。

如果您希望使用自訂選項或自訂位置安裝它,您只需在 /etc/fstab 中新增一個條目,並確保包含「user」選項,該選項允許非 root 使用者使用 udisks 自動安裝它,然後他們可以稍後卸載它。

答案3

完成AB的回答並記錄在案:

安裝選項 在 udev 規則內指定...在某些條件下。當我進行測試時,我注意到一些選項是:

  • 接受並執行:ro, rw, nodev,noexec
  • 接受與忽略:comment=x-gvfs-show,
  • 不被接受,因為它們違反了 udev 規則:mode=0XYZx-gvfs-show

在後一種情況下,違反udev規則意味著udisk使用預設選項自動安裝媒體。

udev標籤MODE="0550",您可以認為相當於調用只讀( ro) 安裝選項將被忽略。請注意,指定rorw不會像您期望的那樣顯示在 Nautilus 中。奇怪的是,Nautilus 顯示的權限保持不變,而嘗試寫入(如果 ro已設定)將導致警告訊息並拒絕寫入權限。漏洞 ?

最後但並非最不重要的,不要在為給定設備/etc/fstab指定安裝規則的同時安排一個條目。udev這將導致衝突和錯誤訊息,並將與您安裝設備的規則udisk競爭。udev這並不奇怪。不過,該設備仍將被安裝(在我的情況下,按照規則udev- 請不要問為什麼......),甚至可以訪問。

有點HTH。

相關內容