1 contributor
# AutoNAS udev rules
# Place this file in /etc/udev/rules.d/
# Rule for USB storage devices - trigger on add/remove
# Detect USB disks (whole disk)
ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="disk", ENV{ID_BUS}=="usb", RUN+="/bin/systemctl start autonas-attach@%E{ID_FS_UUID}.service"
ACTION=="remove", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="disk", ENV{ID_BUS}=="usb", RUN+="/usr/local/lib/xdev/autonas/autonas-disk-handler.sh detach %E{ID_FS_UUID}"
# Detect USB partitions (more common case)
ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="partition", ENV{ID_BUS}=="usb", RUN+="/bin/systemctl start autonas-attach@%E{ID_FS_UUID}.service"
ACTION=="remove", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="partition", ENV{ID_BUS}=="usb", RUN+="/usr/local/lib/xdev/autonas/autonas-disk-handler.sh detach %E{ID_FS_UUID}"
# Rule for built-in SD/MMC readers, including GoPro SDXC cards exposed as
# /dev/mmcblkNpM. These devices usually do not set ID_BUS=usb, so the USB
# rules above never see them.
ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="partition", KERNEL=="mmcblk*p[0-9]*", RUN+="/usr/local/lib/xdev/autonas/autonas-udev-wrapper.sh attach %E{ID_FS_UUID}"
ACTION=="remove", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="partition", KERNEL=="mmcblk*p[0-9]*", RUN+="/usr/local/lib/xdev/autonas/autonas-disk-handler.sh detach %E{ID_FS_UUID}"
# Rule for ATA/SATA external storage devices (USB-to-SATA bridges)
# Detect ATA disks (whole disk) - these appear as ATA but are actually USB external
ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="disk", ENV{ID_BUS}=="ata", ATTRS{removable}=="1", RUN+="/usr/local/lib/xdev/autonas/autonas-udev-wrapper.sh attach %E{ID_FS_UUID}"
ACTION=="remove", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="disk", ENV{ID_BUS}=="ata", ATTRS{removable}=="1", RUN+="/usr/local/lib/xdev/autonas/autonas-disk-handler.sh detach %E{ID_FS_UUID}"
# Detect ATA partitions (more common case)
ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="partition", ENV{ID_BUS}=="ata", ATTRS{removable}=="1", RUN+="/usr/local/lib/xdev/autonas/autonas-udev-wrapper.sh attach %E{ID_FS_UUID}"
ACTION=="remove", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="partition", ENV{ID_BUS}=="ata", ATTRS{removable}=="1", RUN+="/usr/local/lib/xdev/autonas/autonas-disk-handler.sh detach %E{ID_FS_UUID}"
# Special rule for USB-to-SATA bridges that appear as ATA but have USB properties
# This safely identifies external USB drives that appear as ATA
ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="disk", ENV{ID_BUS}=="ata", ENV{ID_USB_TYPE}=="disk", RUN+="/usr/local/lib/xdev/autonas/autonas-udev-wrapper.sh attach %E{ID_FS_UUID}"
ACTION=="remove", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="disk", ENV{ID_BUS}=="ata", ENV{ID_USB_TYPE}=="disk", RUN+="/usr/local/lib/xdev/autonas/autonas-disk-handler.sh detach %E{ID_FS_UUID}"
# Detect USB-to-SATA bridge partitions
ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="partition", ENV{ID_BUS}=="ata", ENV{ID_USB_TYPE}=="disk", RUN+="/usr/local/lib/xdev/autonas/autonas-udev-wrapper.sh attach %E{ID_FS_UUID}"
ACTION=="remove", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="partition", ENV{ID_BUS}=="ata", ENV{ID_USB_TYPE}=="disk", RUN+="/usr/local/lib/xdev/autonas/autonas-disk-handler.sh detach %E{ID_FS_UUID}"
# Rule for SCSI external storage devices
# Detect removable disks (whole disk) - exclude USB devices (handled above)
ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="disk", ATTRS{removable}=="1", ENV{ID_BUS}!="usb", RUN+="/bin/systemctl start autonas-attach@%E{ID_FS_UUID}.service"
ACTION=="remove", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="disk", ATTRS{removable}=="1", ENV{ID_BUS}!="usb", RUN+="/usr/local/lib/xdev/autonas/autonas-disk-handler.sh detach %E{ID_FS_UUID}"
# Detect removable partitions (more common case) - exclude USB devices (handled above)
ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="partition", ATTRS{removable}=="1", ENV{ID_BUS}!="usb", RUN+="/bin/systemctl start autonas-attach@%E{ID_FS_UUID}.service"
ACTION=="remove", SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{DEVTYPE}=="partition", ATTRS{removable}=="1", ENV{ID_BUS}!="usb", RUN+="/usr/local/lib/xdev/autonas/autonas-disk-handler.sh detach %E{ID_FS_UUID}"