Add scripts for making snapshots of LVs with dm-snapshot even when those LVs reside...
[invirt/scripts/pv-fixup.git] / lvmanip
diff --git a/lvmanip b/lvmanip
index 4df4d80..2b9febb 100644 (file)
--- 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
 }