7d07a6cf50
Those files are actually common for dom0 and VM, but as we splitted the repos, move them accordingly.
62 lines
1.5 KiB
Bash
Executable File
62 lines
1.5 KiB
Bash
Executable File
#!/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
|
|
|
|
# Get lock only in dom0 - there are so many block devices so it causes xenstore
|
|
# deadlocks sometimes.
|
|
if [ -f /etc/qubes-release ]; then
|
|
# Skip xenstore-write if cannot obtain lock. This can mean very early system startup
|
|
# stage without /run mounted (or populated). Devices will be rediscovered later
|
|
# by qubes-core startup script.
|
|
exec 9>>/var/run/qubes/block-xenstore.lock || exit 0
|
|
flock 9
|
|
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
|