Mondo Rescueでイメージバックアップ【CentOS 7】

Mondo Rescueを利用して、VPSサーバのイメージバックアップを行います。
ここではさくらのVPSのホスティングサーバを使用し、バックアップファイルは追加ストレージ(NFS)に保存します。

バックアップ保存ベースディレクトリ /disk2
世代数 5
世代ファイル保存ディレクトリ backup.0(最新)
backup.1(1日前)
backup.2(2日前)
backup.3(3日前)
backup.4(4日前)

1. Mondo Rescueのインストール

(1) リポジトリの取得
Mondo Rescueをインストールするためにリポジトリを取得します。
# cd /etc/yum.repos.d
# wget http://ftp.mondorescue.org/centos/7/x86_64/mondorescue.repo
取得したリポジトリファイルを編集します。
# vi mondorescue.repo
「enabled=1」を「enabled=0」に変更します。
[mondorescue]
name=centos 7 x86_64 - mondorescue Vanilla Packages
baseurl=ftp://ftp.mondorescue.org//centos/7/x86_64
#enabled=1
enabled=0
gpgcheck=1
gpgkey=ftp://ftp.mondorescue.org//centos/7/x86_64/mondorescue.pubkey

(2) Mondo Rescueパッケージのインストール
# yum install http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el7/en/x86_64/rpmforge/RPMS/afio-2.5.1-1.el7.rf.x86_64.rpm
# yum install ftp://ftp.project-builder.org/rhel/7/x86_64/perl-ProjectBuilder-0.16.1-1.rhel7.noarch.rpm
# yum install http://mondo.mirror.pclark.com/ftp/pub/mondorescue/centos/7/x86_64/buffer-1.19-8.centos7.x86_64.rpm
# yum install https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/perl-IO-Interface-1.05-2.el7.x86_64.rpm
# yum install ftp://ftp.pbone.net/mirror/ftp.gwdg.de/pub/linux/misc/mondorescue/rhel/7/x86_64/perl-Net-IPv4Addr-0.10-6.el7.noarch.rpm
# yum --enablerepo=mondorescue install mondo expect

2. バックアップの実行

(1) オプション
mondoarchive -O バックアップの実行
mondoarchive -V バックアップデータの検証

-i バックアップデータをISOイメージで出力。
-[0-9] 圧縮レベル。デフォルト「-3」、「-0」は無圧縮。
-s (サイズ) CD/DVD、ISOの最大サイズ。
-N ローカルディスクのみバックアップの対象とする。NFSなどは除外する。
-E "Path" 指定したパスをバックアップ対象から除外。
-d (Path) 指定したパスにバックアップイメージを出力。
-p (prefix) バックアップファイルの先頭に付く名称。
【例】(prefix)-1.iso
-D 差分バックアップを実行。

(2) 実行コマンド
手動でバックアップを実行してみます。(/disk2/backup.0に保存します。)
# /usr/sbin/mondoarchive  -Oi -9 -s 4480m -N -V -E "/disk2" -d /disk2/backup.0 -p "backup_$(date '+%Y%m%d')"

3. バックアップの定期実行

(1) バックアップスクリプト
ここでは、「/root/backup_snapshot.sh」というスクリプトファイルを作成します。
# vi /root/backup_snapshot.sh
以下の内容を記載します。
#!/bin/bash

#----- backup file save base directory -----
BACKUP_BASE_DIR=/disk2
BACKUP_MAX_COUNT=5
BACKUP_FILE_PREFIX="backup_$(date '+%Y%m%d')"
#-------------------------------------------
# Backup Directory
# /disk2/backup.0 (Current data)
# /disk2/backup.1 (Previous data)
# /disk2/backup.2 (Two previous data)
# /disk2/backup.3 (Three previous data)
# /disk2/backup.4 (Four previous data)
#-------------------------------------------
cd $BACKUP_BASE_DIR
#----- backup file shift directory -----
RESULT=`find backup.$(($BACKUP_MAX_COUNT - 1))/*.* 2>/dev/null`
# In case of unexpected error
if [ $? -ne 0 ]; then
  :
# If the file does not exist
elif [ -z "$RESULT" ]; then
  :
# If the file exists
else
  rm -f backup.$(($BACKUP_MAX_COUNT - 1))/*.*
fi
 
for (( i=$BACKUP_MAX_COUNT - 2; i>=0; i-- ))
do
  PATH1=$BACKUP_BASE_DIR/backup.$i
  RESULT=`find $PATH1/*.* 2>/dev/null`
  # In case of unexpected error
  if [ $? -ne 0 ]; then
    :
  # If the file does not exist
  elif [ -z "$RESULT" ]; then
    :
  # If the file exists
  else
    PATH2=$BACKUP_BASE_DIR/backup.$(($i + 1))
    mv $PATH1/*.* $PATH2
  fi
done
 
/usr/bin/sleep 5
 
/usr/sbin/mondoarchive  -Oi -9 -s 4480m -N -V -E "$BACKUP_BASE_DIR" -d $BACKUP_BASE_DIR/backup.0 -p  $BACKUP_FILE_PREFIX

(2) 定期実行設定
【例】深夜0:00時に実行する設定を行います。
# crontab -e
0 0 * * * /bin/bash /root/backup_snapshot.sh 2>/dev/null


最終更新:2021年06月10日 07:28