Skip to content

Instantly share code, notes, and snippets.

@Akkiesoft
Last active April 17, 2025 15:41
Show Gist options
  • Save Akkiesoft/f11280bde15d345bf0ae80a540bc7e1c to your computer and use it in GitHub Desktop.
Save Akkiesoft/f11280bde15d345bf0ae80a540bc7e1c to your computer and use it in GitHub Desktop.
virtnbdbackupを使用した増分バックアップのシェルスクリプト。日曜日にフル、それ以外は増分でバックアップする。また、1〜2週間でローテーションする。
#!/bin/bash
BACKUP_VMS=(
ここにVMの名前を書く
)
DEST=/usb-ssd/kvm-backup
# 今の曜日
WOD=$(LANG=C date +%a)
# 今週日曜日の日付
THISWEEK=$(date --date 'last sunday' +'%Y%m%d')
# 今週のディレクトリがなければ作る
if [ ! -d $DEST/$THISWEEK ]; then
mkdir -p $DEST/$THISWEEK
fi
if [ "$WOD" == "Sun" ]; then
# 日曜日ならフルバックアップ
MODE="full"
echo "Start full backup."
else
# 日曜日以外なら増分バックアップ
MODE="inc"
echo "Start increase backup."
fi
for VM in "${BACKUP_VMS[@]}"; do
echo "Backing up $VM"
sudo virtnbdbackup -d $VM -l $MODE -o $DEST/$THISWEEK/$VM
# 結果の出力。Slackに投げたり、Zabbixに投げたりしてもヨサゲ
RESULT=$(cat `ls -1 $DEST/$THISWEEK/$VM/backup.$MODE.*.log | tail -1` | tail -1 | awk -F': ' '{print $2}')
echo "$VM backup result: $RESULT"
done
# 先週日曜日の日付
#LASTWEEK=$(date --date 'last week sunday' +'%Y%m%d')
# 2週間前の日曜日
TWO_WEEKS_AGO=$(date --date '2 week ago sunday' +'%Y%m%d')
if [ -d $DEST/$TWO_WEEKS_AGO ] ; then
echo "Deleting backups from 2 weeks ago."
sudo rm -rf $DEST/${TWO_WEEKS_AGO}
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment