Debian

UDEV-Rule 中的一些 RUN-Commands 被忽略

  • August 12, 2020

執行樹莓派並更新到 raspbian buster。與 Jessie 相同的文件可以正常工作。我使用了以下 udev 規則:

# Idea from https://www.axllent.org/docs/view/auto-mounting-usb-storage/
KERNEL!="sd[a-z][0-9]", GOTO="media_by_label_auto_mount_end"
# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"
# Get a label if present, otherwise specify one
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"
# Global mount options
ACTION=="add", ENV{mount_options}="relatime"
# Filesystem-specific mount options
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"
# Mount the device
ACTION=="add", RUN+="/bin/date >> /tmp/xx"
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}",  RUN+="/bin/date >> /tmp/xx"
# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"
# Exit
LABEL="media_by_label_auto_mount_end"

如果我添加我的 mp3 播放器,將創建一個目錄 /media/MP3_INTENSO,如果我刪除它,該目錄將被刪除。

只有當我有規則文件時才會發生這種情況。所以肯定是文件的影響。

我嘗試udevadm monitor並找到了預期的: UDEV [2378.210993] add /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/host0/target0:0:0/0:0:0:0/block/sda/sda1 (block)

執行udevadm test /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/host0/target0:0:0/0:0:0:0/block/sda/sda1然後返回:

dir_name=MP3_INTENSO
mount_options=relatime,utf8,gid=100,umask=002
TAGS=:systemd:
USEC_INITIALIZED=2377859838
run: '/bin/date >> /tmp/xx'
run: '/bin/mkdir -p /media/MP3_INTENSO'
run: '/bin/mount -o relatime,utf8,gid=100,umask=002 /dev/sda1 /media/MP3_INTENSO'
run: '/bin/date >> /tmp/xx'
Unload module index
Unloaded link configuration context.

它看起來像預期的那樣。我可以在命令行中成功執行每個命令。但是,如果我只插入設備並且從未安裝過設備,我從未在 /tmp/xx 中找到條目。

我在 /var/log/messages 或 dmesg 中沒有找到任何內容。

出了什麼問題,我該怎麼做才能進一步分析?

為了進一步分析,編輯/etc/udev/udev.conf和添加udev_log=debug. 重啟 udev systemctl restart udev

有了這個,您將獲得以下資訊:

'/bin/date >> /tmp/xx'(err) '/bin/date: extra operand '/tmp/xx''
'/bin/date >> /tmp/xx'(err) 'Try '/bin/date --help' for more information.'

所以看起來“>>”不起作用。一個簡單的 /usr/local/bin/log.sh 就可以完成這項工作。之後,我發現 mp3 播放器已成功安裝。現在有趣的問題是誰在快速解除安裝設備,但這是另一個問題。

可以在archlinux-wiki找到安裝失敗的解釋。

引用自:https://unix.stackexchange.com/questions/599914