Mondo Rescue で Google Drive に定期バックアップ 環境構築メモ

サーバ自体はあまりクリティカルなものが動いてないので、いまだにサーバのバックアップ対策をしていなかったんですが、トラブルがあったときに同じ手順繰り返すのもシンドいので、今更ながらにバックアップ対策を実施しました。その時の作業メモです。

1. Mondo Rescue の導入

サーバのフルバックアップに Mondo Rescue を使います。

mondorescue リポジトリを yum に登録
cd /etc/yum.repos.d
wget ftp://ftp.mondorescue.org/rhel/6/x86_64/mondorescue.repo

Mondo Rescue をインストール
yum install mondo

2. gdrive の導入

サーバからGoogle Driveへのアクセスには gdrive を使います。

gdrive のインストール
wget -O drive https://docs.google.com/uc?id=0B3X9GlR6EmbnQ0FtZmJJUXEyRTA&export=download
mv drive /usr/sbin/drive
chmod 755 /usr/sbin/drive

初回起動時に OAth2 認証を行う
drive

Go to the following link in your browser:
https://accounts.google.com/o/oauth2/auth?client_id=......

上記URLにアクセスし、認証コードを表示し、続いてコンソール上に入力すると使えるようになります。
Enter verification code: ***

3. バックアップ用のシェルスクリプトを作成

vi /root/server-backup.sh

#/bin/bash

readonly BACKUP_DIR=/tmp/backup
readonly BACKUP_BASENAME=vps-backup
readonly PASSWORD=*******
readonly KEEP_DAYS=4

GDRIVE_DIR_ID=$(/usr/sbin/drive list --noheader --query "mimeType='application/vnd.google-apps.folder' and title='$BACKUP_BASENAME'" | awk '{print $1}')

# ディレクトリ初期化
if [ -e $BACKUP_DIR ]
then
  rm -rf $BACKUP_DIR
fi
mkdir $BACKUP_DIR

# サーババックアップ
/usr/sbin/mondoarchive -O -i -N -d $BACKUP_DIR -s 30g -p $BACKUP_BASENAME

# バックアップファイルを暗号化
/usr/bin/openssl aes-256-cbc -e -in ${BACKUP_DIR}/${BACKUP_BASENAME}-1.iso -out ${BACKUP_DIR}/${BACKUP_BASENAME}-crypt.iso -pass pass:$PASSWORD

# Google Drive に保存
/usr/sbin/drive upload --parent $GDRIVE_DIR_ID --file ${BACKUP_DIR}/${BACKUP_BASENAME}-crypt.iso --title ${BACKUP_BASENAME}-`date +%Y%m%d`.iso

# Google Drive の古いバックアップファイルを削除
LIMIT_TIMESTAMP=$(date -d "$KEEP_DAYS days ago" +%s)
/usr/sbin/drive list --noheader --query "'$GDRIVE_DIR_ID' in parents" | while read ln
do
  ITR_ID=$(echo $ln | awk '{print $1}')
  ITR_DATE=$(echo $ln | awk '{print $(NF-1),$NF}')
  if [ $(date -d "$ITR_DATE" +%s) -lt $LIMIT_TIMESTAMP ]
  then
    /usr/sbin/drive delete --id $ITR_ID
  fi
done

cron でシェルを定期実行

vi /etc/cron.d/backup

0 7 * * * root /root/server-backup.sh

参考サイト