#!/bin/bash
exit 1
-DISK=/dev/mapper/36090a028407d6e2b2589a45cdb971489
+SOURCE=/dev/mapper/36090a028407d6e2b2589a45cdb971489
# The name of the LVM archive to get data from
ARCHIVE=/etc/lvm/archive/xenvg_01514.vg
perl -lne 'print $1 if (/'"$1"' = ([0-9]+)/)'
}
+# Extract the first block of an lv to a file named part-$lv
+getfirstblock () {
+ lvname="$1"
+ offset=$(grep -A16 $'\t'$lvname $ARCHIVE | grep pv0 | cut -f 2 -d ,);
+ if [ -z "$offset" ]; then echo "WARNING: LV not found";
+ else
+ echo "Extracting $lvname from offset $offset"
+ dd if=$SOURCE of=part-$lvname bs=1M skip=$(( $offset * 8192 + 384 )) bs=512 count=1;
+ fi
+}
+
lvinfo () {
perl -ne 'print if ( /^(\s*)'"$1"' \{/ ... /^$1\}/ )' $ARCHIVE
}
echo "# WARNING: LV $lvname not found";
else
echo "# Extracting $lvname from offset $offset PEs with length $length PEs"
- echo dd if=$DISK of=/dev/xenvg/$lvname \
+ echo dd if=$SOURCE of=/dev/xenvg/$lvname \
skip=$(( $offset * 64 + 3 )) bs=64K count=$(( $length * 64 ))
fi
}
echo "# WARNING: LV $lvname not found";
else
echo "# Extracting $lvname segment 2 from offset $offset PEs with length $length PEs"
- echo dd if=$DISK of=/dev/xenvg/$lvname bs=64K \
+ echo dd if=$SOURCE of=/dev/xenvg/$lvname bs=64K \
skip=$(($offset*64 + 3)) count=$(($length*64)) seek=$(($seek*64))
fi
}
for m in sorted(mm.iterkeys()): print m'
}
-lvsleft () {
- lvs -o name,devices xenvg \
- | perl -lane "print \$F[0] if (\$F[1] =~ m|$DISK|)"
-}
-
vmstolvs () {
perl -pe 's/^/d_/;s/$/_hda/'
}
| perl -lne '$total += $_; END { print $total; }'
}
+lvsleft () {
+ lvs -o name,devices $VG \
+ | perl -lane "print \$F[0] if (\$F[1] =~ m|$DISK|)"
+}
+
movelv () {
echo pvmoving $VG/$1...
pvmove -i 10 -n $VG/$1 $2
# - pvmove all the LVs back
+# Doing this part with CLVM again.
+
+lvsleft () {
+ lvs -o name,devices $VG \
+ | perl -lane "print \$F[0] if (\$F[1] =~ m|$TMPDEV|)"
+}
+
+movelv () {
+ echo pvmoving $VG/$1...
+ lvchange -an $VG/$1
+ pvmove -i 10 -n $VG/$1 $2
+ lvchange -ay $VG/$1
+}
+
+movestuff () {
+ date
+ while read lv; do
+ echo MOVING: $lv >>/var/log/lvm2.log
+ movelv $lv $TMPDEV
+ date
+ done
+}
+
+moveall () {
+ date
+ for lv in $(lvsleft); do
+ echo MOVING: $lv >>/var/log/lvm2.log
+ movelv $lv $TMPDEV
+ date
+ done
+}
+
#FOREACH host:
-for lv in $(lvs -o lv_name --noheadings $VG); do
- movelv $VG/$lv $TMPDEV
-done
+#set logging in /etc/lvm/lvm.conf
+while sleep 1; do
+ echo MARK: $(date) >>/var/log/lvm2.log
+done &
+lvsleft | grep -xf <(invirt-listvms | yamlkeys | vmstolvs) \
+ | movestuff >>/root/lvm/movelv.log 2>&1
+moveall >>/root/lvm/movelv.log 2>&1
+while true; do
+ kinit -k -45
+ sh -x status.sh 2>&1 | zwrite -c xvm-auto -i pvmove -O auto
+ sleep 1800
+done &
#done
+#suffix=.return-1; mv /var/log/lvm2.log lvm/lvm2.$suffix.log; mv lvm/movelv{,.$suffix}.log
+
# hopefully empty:
lvs $VG -o lv_name,devices | grep $TMPDEV
# if not, do some more movelv
# - pvremove the temporary PV
vgreduce $VG $TMPDEV
pvremove $TMPDEV
+#FOREACH host:
dmsetup remove $TMPDM
+#done
# - pvresize the new PV to use the whole space
pvresize $DISK