# 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}"