. /usr/share/ganeti/extstorage/zfs/defaults.sh
-zfs list -r $EXTP_ZFS -o name,volsize,logicalused,used,available,refer,lv:a,ganeti:originstname
+zfs list -r $EXTP_ZFS -o name,volsize,logicalused,used,available,refer,lv:a,lv:s,ganeti:originstname
+#!/bin/sh -e
+
ssh `gnt-cluster getmaster` gnt-node list `hostname -s`
ssh `gnt-cluster getmaster` gnt-node list-storage `hostname -s`
# lz4 compression with low cpu operhead which always helps
test -z "$EXTP_CREATE" && EXTP_CREATE="-s -b 4k -o compression=lz4"
-# on zfs destroy remove snapshots of instance disks
-test -z "$EXTP_DESTROY" && EXTP_DESTROY="-r"
+# on zfs destroy remove dependent snapshots
+test -z "$EXTP_DESTROY" && EXTP_DESTROY="-R"
# emulate VG configured in cluster for wrapper scripts in sbin
test -z "$EXTP_VG" && EXTP_VG='ffzgvg'
+
+# zfs pool and file system (existing) where to create block devices
+test -z "$EXTP_ZFS" && EXTP_ZFS=tmp500g/$EXTP_VG
+
+export VOL_NAME
+
+zfs_get() {
+zfs get $1 -o value -p -H $EXTP_ZFS/$VOL_NAME
+}
. /usr/share/ganeti/extstorage/zfs/defaults.sh
+rm -f /dev/$EXTP_VG/$VOL_NAME
zfs destroy $EXTP_DESTROY $EXTP_ZFS/$VOL_NAME
# gnt-instance move --node arh-hw bbb
# lvcreate -L5120m -ne4bf0e9d-2c6e-4e1c-8bc4-342ee94724a5.disk0 -i1 ffzgvg tmp500g/block
if echo $* | grep -q $EXTP_VG ; then
- SNAP=0
+ SNAP='-'
while [ ! -z "$1" ] ; do
case $1 in
-L*) VOL_SIZE=`echo $1 | sed 's/-L//'` ;;
-n*) VOL_NAME=`echo $1 | sed 's/-n//'` ;;
- -s) SNAP=1 ;;
+ -s) SNAP='s' ;;
/dev/$EXTP_VG/*) VOL_ORIGIN=`echo $1 | cut -d/ -f4`
esac
shift
done
- if [ $SNAP = 0 ] ; then
+ if [ $SNAP = '-' ] ; then
test -e /dev/zvol/$EXTP_ZFS/$VOL_NAME || \
zfs create -V ${VOL_SIZE} $EXTP_CREATE $EXTP_ZFS/$VOL_NAME
else
- zfs snap $EXTP_ZFS/$VOL_ORIGIN@snap
- sleep 1
- zfs clone $EXTP_ZFS/$VOL_ORIGIN@snap $EXTP_ZFS/$VOL_NAME
- sleep 1
- ln -sfv `readlink -f /dev/zvol/$EXTP_ZFS/$VOL_NAME` /dev/$EXTP_VG/$VOL_NAME
+ zfs snap $EXTP_ZFS/$VOL_ORIGIN@snap || true
+ zfs set lv:s='o' $EXTP_ZFS/$VOL_ORIGIN
+ zfs clone $EXTP_ZFS/$VOL_ORIGIN@snap $EXTP_ZFS/$VOL_NAME || true
+ zfs set lv:s='s' $EXTP_ZFS/$VOL_NAME
+ zfs set ganeti:originstname=$(VOL_NAME=$VOL_ORIGIN zfs_get ganeti:originstname) $EXTP_ZFS/$VOL_NAME
+ export VOL_NAME
+ echo $VOL_NAME
+ $dir/attach
fi
if echo $* | grep -q $EXTP_VG ; then
while [ ! -z "$1" ] ; do
if echo $1 | grep -q $EXTP_VG ; then
- VOL_NAME=`echo $1 | sed -e "s:$EXTP_VG/::" -e 's/\.snap$/@snap/'`
+ VOL_NAME=`echo $1 | sed -e "s:$EXTP_VG/::"` # FIXME -e 's/\.snap$/@snap/'`
fi
shift;
done
# destroy snapshot and clone
- if [ /dev/zvol/$EXTP_ZFS/$VOL_NAME ] ; then
- zfs destroy -R $EXTP_ZFS/$VOL_NAME || exit 0 # FIXME
- rm -f /dev/$EXTP_VG/$VOL_NAME
- fi
+ export VOL_NAME
+ $dir/remove
else
/sbin/lvm lvrename $*
fi
. /usr/share/ganeti/extstorage/zfs/defaults.sh
-export VOL_NAME
-
VOL() {
+ echo "VOL $@" >&2
while [ ! -z "$1" ] ; do
+ echo "XXX $1" >&2
case $1 in
*$EXTP_VG*) VOL=`echo $1 | cut -d/ -f4` ;;
- *) echo "# ignore $1" >&2
esac
shift
done
- echo "# $VOL" >&2
export VOL_NAME=$VOL
-
+ echo "VOL_NAME $VOL_NAME" >&2
}
# lvs --noheadings --units=m --nosuffix '--separator=|' -ovg_name,lv_name,lv_size,lv_attr
if echo $* | grep -q vg_name,lv_name,lv_size,lv_attr ; then
- zfs list -o name,volsize,lv:a -t volume -r $EXTP_ZFS -H -p | sed "s:$EXTP_ZFS/*::" | \
- awk '{ print " '$EXTP_VG'|"$1"|" $2 / 1024 / 1024 "|-wi-a"$3"--" }'
+ zfs list -o name,volsize,lv:s,lv:a -t volume -r $EXTP_ZFS -H -p | sed "s:$EXTP_ZFS/*::" | \
+ awk '{ print " '$EXTP_VG'|"$1"|" $2 / 1024 / 1024 "|"$3"wi-a"$4"--" }'
/sbin/lvm lvs $* 2>/dev/null || exit 0 # local, might fail
# gnt-instance modify -t drbd -n box02 zfs
# lvs --noheadings '--separator=|' --units=k --nosuffix -olv_attr,lv_kernel_major,lv_kernel_minor,vg_extent_size,stripes,devices /dev/ffzgvg/c72d9ea7-f396-4104-b4ee-8b613da32051.disk1
elif echo $* | grep -q lv_attr,lv_kernel_major,lv_kernel_minor,vg_extent_size,stripes,devices ; then
- VOL_NAME=VOL $*
- volblocksize=`zfs get volblocksize -o value -p -H $EXTP_ZFS/$VOL_NAME`
- perm=`zfs get lv:attr -o value -p -H $EXTP_ZFS/$VOL_NAME`
- if [ -e /dev/zvol/$EXTP_ZFS/$VOL_NAME.snap ] ; then
- perm="owi-aos-" # snapshot origin
- elif echo $VOL_NAME | grep -q '.snap$' ; then
- perm="swi-a-s-" # snapshot
- fi
- ls -al `readlink -f /dev/zvol/$EXTP_ZFS/$VOL_NAME` | sed 's/,//' | awk '{ print " -wi-ao--|" $5 "|" $6 "|'$volblocksize'|1|" $10 "(" $6 * 1280 + $6 ")" }' # FIXME what is number after device?
+ VOL $5 $6
+ a=$(zfs_get lv:a)
+ s=$(zfs_get lv:s)
+ ls -al `readlink -f /dev/zvol/$EXTP_ZFS/$VOL_NAME` | sed 's/,//' | awk '{ print " '$s'-wi-a'$a'--|" $5 "|" $6 "|'$(zfs_get volblocksize)'|1|" $10 "(" $6 * 1280 + $6 ")" }' # FIXME what is number after device?
# lvs -o tags --noheadings --nosuffix /dev/ffzgvg/88c6b19f-7b3f-4041-bb9c-d2a0716e459c.disk0
elif [ "$1" = "-o" ] ; then
VOL $@
- tag=`zfs get lv:tag -o value -p -H $EXTP_ZFS/$VOL_NAME`
- echo $tag
+ echo $(zfs_get lv:tag)
else
/sbin/lvm lvs $*
#lvs --noheadings '--separator=|' --units=k --nosuffix -olv_attr,lv_kernel_major,lv_kernel_minor,vg_extent_size,stripes,devices /dev/ffzgvg/c72d9ea7-f396-4104-b4ee-8b613da32051.disk1
#lvs --noheadings '--separator=|' --units=k --nosuffix -olv_attr,lv_kernel_major,lv_kernel_minor,vg_extent_size,stripes,devices /dev/ffzgvg/3e6746a9-cb99-4584-a219-af7e4b5cb5f5.disk0_data
-#lvs --noheadings --units=m --nosuffix '--separator=|' -ovg_name,lv_name,lv_size,lv_attr
+lvs --noheadings --units=m --nosuffix '--separator=|' -ovg_name,lv_name,lv_size,lv_attr
lvs --noheadings --units=m --nosuffix '--separator=|' -ovg_name,lv_name,lv_size,lv_attr ffzgvg
-lvs -o tags --noheadings --nosuffix /dev/ffzgvg/88c6b19f-7b3f-4041-bb9c-d2a0716e459c.disk0
+#lvs -o tags --noheadings --nosuffix /dev/ffzgvg/88c6b19f-7b3f-4041-bb9c-d2a0716e459c.disk0
+lvs --noheadings '--separator=|' --units=k --nosuffix -olv_attr,lv_kernel_major,lv_kernel_minor,vg_extent_size,stripes,devices /dev/ffzgvg/d501d86b-f421-4811-bcbe-1370da3e3a74.disk0