vmware player仮想マシンのバックアップ tar.gz編 | labunixのラボゆにっくす

labunixのラボゆにっくす

Debian [ Lenny | squueze | kfreebsd ] amd64

■実は何故これが動くのか、書いた本人が良くわかっていない。。。w
 多分別の環境でも使うので、貼っておく。

 1.対象は、vmware playerのデフォルト「${HOME}/vmware」 
 2.対象が4GBを超えている場合は何もしない。
   ※4GB超えは以下で対応
   rsyncによる仮想マシンの自動バックアップスクリプト(bash版)
   http://ameblo.jp/labunix/entry-11091054060.html
 3.バックアップ先は、「${HOME}/bak.vmware」
 4.4世代までローテーションする
   ※「tar.gz」「tar.gz.0」「tar.gz.1」「tar.gz.2」の4世代

$ vim vmware_tgz;chmod +x vmware.tgz
#!/bin/bash
export MYHOME="${HOME}"
export VM="vmware"
export BAK="bak.vmware"
export MAX="2"

for CHK in ${VM}/*/;do
  if [ -d ${MYHOME}/${CHK} ];then
    echo "OK: Checking ... ${MYHOME}/${CHK}"
    if [ `du -s ${MYHOME}/${CHK} | awk '{print $1}'` -gt "4194304" ];then
      echo "SKIP: 4GB Over , Do Nothing ${CHK}"
    else
      TARGET_STAMP=`ls -ld ${MYHOME}/${CHK} | awk '{print $6}' | sed s/"-"//g`
      TARGET="${CHK}:${TARGET_STAMP}"
      BACKUP=`echo ${CHK} | sed s/"${VM}"/"${BAK}"/ | sed s/"\/\$"/".tar.gz"/`
      test -f ${MYHOME}/${BACKUP} || tar zcvf ${MYHOME}/${BACKUP} ${MYHOME}/${CHK}
      BACKUP_STAMP=`ls -l ${MYHOME}/${BACKUP} | awk '{print $6}' | sed s/"-"//g`
      echo "if [ DIR ${TARGET_STAMP} > TGZ ${BACKUP_STAMP} ] -> start backup"
      if [ ${TARGET_STAMP} -gt ${BACKUP_STAMP} ];then
        for NUM in `seq ${MAX} -1 0`;do
          PREV=`echo ${NUM} | awk '{print $1-1}'`
          if [ ${PREV} == "-1" ];then
            PREV=""
          else
            PREV=".$PREV"
          fi
          if [ -f "${MYHOME}/${BACKUP}${PREV}" ];then
            echo "Rotation..."
            echo "${MYHOME}/${BACKUP}${PREV} -> ${MYHOME}/${BACKUP}.${NUM}"
             mv ${MYHOME}/${BACKUP}${PREV} ${MYHOME}/${BACKUP}.${NUM}
          fi
        done
        if [ -f "${MYHOME}/${BACKUP}" ];then
          echo "Error: ${MYHOME}/${BACKUP} is not rotated"
          echo "${MYHOME}/${CHK} -> ${MYHOME}/${BACKUP}"
          exit 1
        else
          echo "${MYHOME}/${CHK} -> ${MYHOME}/${BACKUP}"
           tar zcvf ${MYHOME}/${BACKUP} ${MYHOME}/${CHK}
        fi
      else
        echo "SKIP: Today's Backup done, Do Nothing ${CHK}"
      fi
    fi
  else
    echo "Error: Do not Found ${MYHOME}/${CHK}"
  fi
done
unset MYHOME VM BAK MAX