UDEV-Rule 中的一些 RUN-Commands 被忽略
執行樹莓派並更新到 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
. 重啟 udevsystemctl 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找到安裝失敗的解釋。