Mondo Rescueでイメージバックアップ【AlmaLinux 8】

Mondo Rescueを利用して、VPSサーバのイメージバックアップを行います。
※CentOS 8のリポジトリを利用します。

なお、ここではさくらの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/8/x86_64/mondorescue.repo
取得したリポジトリファイルを編集します。
# vi mondorescue.repo
「enabled=1」を「enabled=0」に変更します。
[mondorescue]
name=centos 8 x86_64 - mondorescue Vanilla Packages
baseurl=ftp://ftp.mondorescue.org//centos/8/x86_64
#enabled=1
enabled=0
gpgcheck=1
gpgkey=ftp://ftp.mondorescue.org//centos/8/x86_64/mondorescue.pubkey

(2) Mondo Rescueパッケージのインストール
# dnf --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) バックアップスクリプト
バックアップディレクトリ /disk2/snapshot/backup.0
世代数 5(ディスク容量によって世代数を増減して下さい。)
世代管理バックアップ /disk2/snapshot/backup.1
/disk2/snapshot/backup.2
/disk2/snapshot/backup.3
/disk2/snapshot/backup.4
バックアップ除外ディレクトリ /dis2

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

#----- backup file save base directory -----
BACKUP_BASE_DIR=/disk2/snapshot
BACKUP_MAX_COUNT=5
BACKUP_FILE_PREFIX="backup_$(date '+%Y%m%d')"
EXCLUDED_DIR=/disk2 
#-------------------------------------------
# Backup Directory
# /disk2/snapshot/backup.0 (Current data)
# /disk2/snapshot/backup.1 (Previous data)
# /disk2/snapshot/backup.2 (Two previous data)
# /disk2/snapshot/backup.3 (Three previous data)
# /disk2/snapshot/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 "$EXCLUDED_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年07月30日 10:07