chiark / gitweb /
set paths on remote commands
[chiark-utils.git] / backup / lvm
index 3e9cc2b74b6bb931feaca5fa6275d76d41206004..5389e7b08a2a1d5efe0e1c6203b9967f4ceb55ad 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 # invoked by backup scripts as
 #    lvm snap $vardir $device $mountpoint
 #              creates and mounts on $vardir/snap-mount
@@ -35,6 +35,7 @@ esac
 
 #---------- clean up anything
 
+snmnt="$vardir/snap-mount"
 umount -v "$snmnt" || true
 test ! -d "$snmnt" || rmdir -- "$snmnt"
 
@@ -62,9 +63,18 @@ fstype="$(mount | sed -n \
  "s,^$device on $mountpoint type \([a-z0-9][a-z0-9]*\) .*,-t \1 ,p")"
 
 if [ -z "$lvm_lvsize_opts" ]; then
-       df="$(df -k $device)"
-       blocks="$(printf "%s" "$df" |  sed -n '2,$s,^/dev/[^    ]*[     ][      ]*[0-9][0-9]*[  ][      ]*\([0-9][0-9]*\)[      ].*,\1,p')"
-       lvm_lvsize_opts="-L $blocks"K
+       vggroup="${device#/dev/}"
+       vggroup="${vggroup%/*}"
+       vgdisplay_out="$(really vgdisplay -c "$vggroup")"
+       extents="$(printf "%s" "$vgdisplay_out" | awk -F: '{print $16}')"
+
+       lvdisplay_out="$(really lvdisplay -c "$device")"
+       extents2="$(printf "%s" "$lvdisplay_out" | awk -F: '{print $9}')"
+       extents2=$(( $extents2 + ($extents2+9)/10 - 1 ))
+
+       if [ $extents2 -lt $extents ]; then extents=$extents2; fi
+
+       lvm_lvsize_opts="-l $extents"
 fi
 
 lvpath="$(dirname "$device")/$lvm_lv"