LVM a partitions? (Re: Virt-manager)

Slavek Banko slavek.banko na axis.cz
Úterý Listopad 11 11:45:03 CET 2008


Dne út 11. listopadu 2008 Jan Kasprzak napsal(a):
> 	Nehlede na virtualni stroje, tenhle problem (jak rozumne
> zpristupnit partitionovane zarizeni) jsem resil i jinde - takze: umite
> tohle nekdo rozumne resit, nebo je treba rucne pocitat offsety oblasti?
>
> -Y.

Také jsem stejný problém kdysi řešil. Zjistil jsem, že to počítání není 
problém, a tak jsem si napsal malý skriptík a nazval jej dm-disk.

Slávek
-- 

#!/bin/bash
#-----------------------------------------------------------------------+
#									|
#									|
#	dm-disk  -  vytvoreni zarizeni pro oddily v obrazu disku	|
#									|
#									|
#-----------------------------------------------------------------------+

#-----------------------------------------------------------------------+
#	kontrola parametru						|
#-----------------------------------------------------------------------+
if [ -z "$1" ] || [ ! -r "$1" ]; then
    echo "Jako parametr zadej jmeno zarizeni."
    exit 1
fi
DEV_PARENT=$1

if [ -z "$2" ]; then
  ACTION=status
else
  ACTION="$2"
fi

#-----------------------------------------------------------------------+
#	mapovani oddilu							|
#-----------------------------------------------------------------------+
case "$ACTION" in
    start)
	echo -n "Mapping disk $DEV_PARENT:"
	;;
    stop)
	echo -n "Unmapping disk $DEV_PARENT:"
	;;
esac

fdisk -lu $DEV_PARENT | \
grep "^$DEV_PARENT" | \
sed "s|[\*+]||g" | \
while read DEV_PARTITION DEV_START DEV_END DEV_BLOCKS DEV_TYPE 
DEV_TYPE_LABEL; do
  if [ "$DEV_TYPE" != "5" ] && [ "$DEV_TYPE" != "f" ]; then
    DEV_PARTITION=$(echo "$DEV_PARTITION" | sed -e "s|^/dev/||" -e "s|/|-|
g")
    case "$ACTION" in
	start)
	    if ! dmsetup ls | grep -q "$DEV_PARTITION"; then
		echo -n " $DEV_PARTITION"
		echo 0 $(( DEV_END-DEV_START+1 )) linear $DEV_PARENT $DEV_START |
		dmsetup create "$DEV_PARTITION"
	    fi
	    ;;
	
	stop)
	    if dmsetup ls | grep -q "$DEV_PARTITION"; then
		echo -n " $DEV_PARTITION"
		dmsetup remove "$DEV_PARTITION"
	    fi
	    ;;
	
	*)
	    if dmsetup ls | grep -q "$DEV_PARTITION"; then
		dmsetup info "$DEV_PARTITION"
	    fi
	    ;;
    esac
  fi
done

case "$ACTION" in
    start|stop)
	echo "."
	;;
esac



Další informace o konferenci Linux