diff options
Diffstat (limited to 'handlers/sys.in')
| -rwxr-xr-x | handlers/sys.in | 75 | 
1 files changed, 74 insertions, 1 deletions
diff --git a/handlers/sys.in b/handlers/sys.in index de81435..b7e94b0 100755 --- a/handlers/sys.in +++ b/handlers/sys.in @@ -30,6 +30,8 @@  #     and restore it later by running "dd if=luksheader.sda2.bin of=/dev/sda2"  #     (MAKE SURE YOU PASS THE CORRECT DEVICE AS of= !!!)  # +# (6) LVM metadata for every detected volume group, if "lvm = yes" +#  if [ -f /etc/debian_version ]  then @@ -93,6 +95,10 @@ getconf DD `which dd`  getconf luksheaders no  getconf luksheadersfile $parentdir/luksheader.__star__.bin +getconf VGS `which vgs` +getconf VGCFGBACKUP `which vgcfgbackup` +getconf lvm no +  getconf vsnames all  # If vservers are configured, check that the ones listed in $vsnames are running. @@ -121,6 +127,17 @@ if [ "$luksheaders" == "yes" ]; then     fi  fi +if [ "$lvm" == "yes" ]; then +   if [ ! -x "$VGS" ]; then +      warning "can't find vgs, skipping backup of LVM metadata" +      lvm="no" +   fi +   if [ ! -x "$VGCFGBACKUP" ]; then +      warning "can't find vgcfgbackup, skipping backup of LVM metadata" +      lvm="no" +   fi +fi +  ## PACKAGES ##############################  # @@ -534,7 +551,6 @@ if [ "$hardware" == "yes" ]; then     fi  fi -  ## PARTITIONS #############################  # here we use sfdisk to dump a listing of all the partitions.  @@ -604,3 +620,60 @@ if [ "$luksheaders" == "yes" ]; then        fi     done  fi + +## LVM #################################### + +# returns 0 on success, 1 on error, 2 if not tried +# outputs error message if error, reason if not tried +function doLvmBackup () { +   local lvmdir="$1" +   if [ ! -d "$lvmdir" ]; then +      if ! mkdir "$lvmdir"; then +         echo "could not create $lvmdir" +         return 2 +      else +         info "successfully created $lvmdir" +      fi +   fi +   if [ ! -w "$lvmdir" ]; then +         echo "can not write to directory $lvmdir" +         return 2 +   fi +   debug "Let's try to gather the list of LVM volume groups" +   debug "$VGS --options vg_name --noheadings | @SED@ 's/^[ ]*//' | @SED@ 's/[ ]*$//' | tr '\n' ' '" +   vgs=`$VGS --options vg_name --noheadings | @SED@ 's/^[ ]*//' | @SED@ 's/[ ]*$//' | tr '\n' ' '` +   debug "Let's try to backup LVM metadata for detected volume groups: $vgs" +   debug "$VGCFGBACKUP --file \"${lvmdir}\"/\'%s\' $vgs" +   output=`$VGCFGBACKUP --file "${lvmdir}"/'%s' $vgs` +   exit_code=$? +   debug $output +   case $exit_code in +      0) +         info "LVM metadata was saved to $lvmdir for volume groups: $vgs" +         return 0 +         ;; +      *) +         echo "LVM metadata could not be saved for at least one of these volume groups: $vgs" +         return 1 +         ;; +   esac +} + +if [ "$lvm" == "yes" ]; then +   output=`doLvmBackup "${parentdir}/lvm"` +   exit_code=$? +   case $exit_code in +      0) # success. info message has already been displayed +         true +         ;; +      1) # error +         fatal "$output" +         ;; +      2) # could not even try +         fatal "LVM metadata backup was not tried: $output" +         ;; +      *) # should never happen +         fatal "Unhandled error ($exit_code) while trying to backup LVM metadata, please report a bug" +         ;; +   esac +fi  | 
