
我想超越這個優秀解決方案透過 @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
,此時掛載的磁碟區必須出現在Devices
Nautilus 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=0XYZ
,x-gvfs-show
在後一種情況下,違反udev
規則意味著udisk
使用預設選項自動安裝媒體。
該udev
標籤MODE="0550"
,您可以認為相當於調用只讀( ro
) 安裝選項將被忽略。請注意,指定ro
或rw
不會像您期望的那樣顯示在 Nautilus 中。奇怪的是,Nautilus 顯示的權限保持不變,而嘗試寫入(如果 ro
已設定)將導致警告訊息並拒絕寫入權限。漏洞 ?
最後但並非最不重要的,不要在為給定設備/etc/fstab
指定安裝規則的同時安排一個條目。udev
這將導致衝突和錯誤訊息,並將與您安裝設備的規則udisk
競爭。udev
這並不奇怪。不過,該設備仍將被安裝(在我的情況下,按照規則udev
- 請不要問為什麼......),甚至可以訪問。
有點HTH。