1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #!/bin/bash
- NAME=${DEVNAME#/dev/}
- DESC="${ID_MODEL} (${ID_FS_LABEL})"
- SIZE=$[ $(cat /sys/$DEVPATH/size) * 512 ]
- MODE=w
- XS_KEY="qubes-block-devices/$NAME"
- xs_remove() {
- if [ "$QUBES_EXPOSED" == "1" ]; then
- xenstore-rm "$XS_KEY"
- fi
- echo QUBES_EXPOSED=0
- }
- # Ignore mounted...
- if fgrep -q $DEVNAME /proc/mounts; then
- xs_remove
- exit 0
- fi
- # ... and used by device-mapper
- if [ -n "`ls -A /sys/$DEVPATH/holders 2> /dev/null`" ]; then
- xs_remove
- exit 0
- fi
- # ... and "empty" loop devices
- if [ "$MAJOR" -eq 7 -a ! -d /sys/$DEVPATH/loop ]; then
- xs_remove
- exit 0
- fi
- # Special case for CD
- if [ "$ID_TYPE" = "cd" ]; then
- if [ "$ID_CDROM_MEDIA" != "1" ]; then
- # Hide empty cdrom drive
- xs_remove
- exit 0
- fi
- MODE=r
- fi
- # Special description for loop devices
- if [ -d /sys/$DEVPATH/loop ]; then
- DESC=$(cat /sys/$DEVPATH/loop/backing_file)
- fi
- xenstore-write "$XS_KEY/desc" "$DESC" "$XS_KEY/size" "$SIZE" "$XS_KEY/mode" "$MODE"
- echo QUBES_EXPOSED=1
- # Make sure that block backend is loaded
- /sbin/modprobe xen-blkback 2> /dev/null || /sbin/modprobe blkbk
|