From 1c8ae3c8d39df16bde30d27595043f5dab8c7f04 Mon Sep 17 00:00:00 2001 From: Greg Price Date: Sat, 2 May 2009 18:53:34 -0400 Subject: [PATCH] pv-fixup, lvmanip: last tweaks This is from the very beginning of April, at the close of the LVM saga. Somehow I never pushed. svn path=/trunk/scripts/pv-fixup/; revision=2321 --- lvmanip | 17 ++++++++++++++--- pv-fixup | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 67 insertions(+), 11 deletions(-) diff --git a/lvmanip b/lvmanip index 4df4d80..2b9febb 100644 --- a/lvmanip +++ b/lvmanip @@ -1,7 +1,7 @@ #!/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 @@ -13,6 +13,17 @@ lvmextractint () { 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 } @@ -69,7 +80,7 @@ ddlv () { 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 } @@ -89,7 +100,7 @@ ddlv2 () { 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 } diff --git a/pv-fixup b/pv-fixup index d5c0830..5db38a9 100644 --- a/pv-fixup +++ b/pv-fixup @@ -35,11 +35,6 @@ yamlkeys () { 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/' } @@ -51,6 +46,11 @@ totalsize () { | 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 @@ -107,12 +107,55 @@ LVM_SYSTEM_DIR=lvm vgextend $VG $DISK # - 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 @@ -120,7 +163,9 @@ lvs $VG -o lv_name,devices | grep $TMPDEV # - 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 -- 1.7.9.5