6

I'm trying to write a udev rule to not mount USB devices plugged into my system if they're bootable, but I don't know how to specify in udev if a device is bootable in a rule. Is that possible? If so, what needs to go into my rule?

To be clear, by bootable, I mean the device has an OS that I can boot into at start up.

2
  • 1
    Posting as a comment as UDEV rules is like Greek to me. You cannot make any OS detection on a drive unless you mount its partitions. A work around is to determine if the device has an active partition: if sfdisk -d /dev/sdX 2>/dev/null | grep -q bootable returns a non zero code then the disk contains a bootable partition so mount none.
    – user86969
    Commented May 1, 2015 at 18:35
  • You can run a script on a udev rule trigger. The trick would be for your script to scan the first few bytes of the disk for an MBR signature. The solution given by Nasha above is acceptable. Alternatively, roll your own one liner using dd and perl /grep to scan the first sector of the usb disk for an MBR signature.
    – Lmwangi
    Commented May 23, 2015 at 21:02

1 Answer 1

2

udev adds some environment variables to the partition node (leaf node) including partition entry flags for MBR table. Bootable partition should have ID_PART_ENTRY_FLAGS=0x80.

Try this rule and you gonna see all environment variables (source: Pass ATTR{idVendor} as argument in udev script):

KERNEL="sd[a-z][1-9]", RUN+="/bin/sh -c 'echo == >> /home/username/Desktop/usb-storage.txt; env >> /home/username/Desktop/usb-storage.txt'"

A rule that works for me in Ubuntu 14.04:

ACTION=="add", KERNEL=="sd[a-z][1-9]", ENV{ID_PART_ENTRY_FLAGS}=="0x80", RUN+="/bin/sh -c 'echo 0 > /sys%p/../../../../../../../authorized'"

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .