ローカルCentOSサーバのイメージバックアップを行うためにMondo Rescueを使っています。フリーはあるものの歴史も安定性もあり、リカバリ実績もあるので重宝してます。
CentOSならインストールにyumを使えるので導入も簡単です。
Mondo Rescueのインストール
Mondo Rescueは専用レポジトリが用意されていますので、yumにrepoファイルを登録してインストールします。サーバ毎のダウンロード先詳細についてはDownload Mondo Rescueで確認してください。
レポジトリの公開鍵を組み込む
# wget ftp://ftp.mondorescue.org/rhel/6/x86_64/mondorescue.pubkey # rpm --import mondorescue.pubkey
CentOS6(64bit)用レポジトリファイル「mondorescue Vanilla Packages」をダウンロードしyumに登録する。
# wget ftp://ftp.mondorescue.org/rhel/6/x86_64/mondorescue.repo # cat mondorescue.repo [mondorescue] name=rhel 6 x86_64 - mondorescue Vanilla Packages baseurl=ftp://ftp.mondorescue.org//rhel/6/x86_64 enabled=1 gpgcheck=1 gpgkey=ftp://ftp.mondorescue.org//rhel/6/x86_64/mondorescue.pubkey # cp mondorescue.repo /etc/yum.repos.d/mondorescue.repo
mondorescueレポジトリを読み込んでいるか確認する
# yum check-update 読み込んだプラグイン:fastestmirror, security Loading mirror speeds from cached hostfile * base: ftp.iij.ad.jp * epel: ftp.riken.jp * extras: ftp.iij.ad.jp * updates: ftp.iij.ad.jp mondorescue | 1.3 kB 00:00 mondorescue/primary | 51 kB 00:01 mondorescue 208/208
Mondo Rescueをインストールする。
※インストール結果を見てみるとepelレポジトリが必須なようです
# yum install mondo 依存性を解決しました ================================================================================ パッケージ アーキテクチャ バージョン リポジトリー 容量 ================================================================================ インストールしています: mondo x86_64 3.2.2-1.rhel6 mondorescue 925 k 依存性関連でのインストールをします。: afio x86_64 2.5-1.rhel6 mondorescue 81 k buffer x86_64 1.19-4.rhel6 mondorescue 24 k genisoimage x86_64 1.1.9-12.el6 base 348 k mindi x86_64 3.0.2-1.rhel6 mondorescue 205 k mindi-busybox x86_64 1.21.1-1.rhel6 mondorescue 291 k mtools x86_64 4.0.12-1.el6 base 194 k perl-IO-Interface x86_64 1.05-2.el6 epel 28 k perl-Module-ScanDeps noarch 0.95-2.el6 base 41 k perl-MondoRescue noarch 3.2.2-1.rhel6 mondorescue 80 k perl-Net-IPv4Addr noarch 0.10-6.el6 epel 16 k perl-ProjectBuilder noarch 0.13.2-1.rhel6 mondorescue 130 k syslinux x86_64 4.04-3.el6 base 346 k syslinux-nonlinux noarch 4.04-3.el6 base 584 k wodim x86_64 1.1.9-12.el6 base 369 k 完了しました!
バックアップファイルをISOイメージ化するためにmkisofsを導入する。
※今回は導入済でした。これも依存関係に出てくればいいのに。
# yum install mkisofs パッケージ genisoimage-1.1.9-12.el6.x86_64 はインストール済みか最新バージョンで す 何もしません
フルバックアップ/増分バックアップスクリプトを作成する
Mondo Rescueをインストールしたら次にバックアップジョブを作成する必要があります。今回は以下のルールで作成します。
- 週1でフルバックアップ、他の日は増分バックアップを行う
- バックアップデータは4世代分残す
- バックアップデータは外部ファイルサーバに保存する
- 外部ファイルサーバは必要な時のみマウントする
- バックアップデータは光学メディア(BD-R)に保存できるようにする
- バックアップデータは日付・サーバ名・フル/増分が分かるファイル名にする
ということでまずはフルバックアップ用のスクリプトを作成します。
mondo_fb.sh
#!/bin/bash # フルバックアップスクリプト export LANG=C # 各種変数定義 MAIL=mail@example.net # バックアップ結果のメール保存先 HOSTNAME=Server # バックアップデータに付与するサーバ名 # バックアップ保存先 DSTDIR=/mnt/backup # 外部ファイルサーバをサーバのどこにマウントするか指定する DSTSRV=//192.0.2.86/backup # 外部ファイルサーバのIPアドレス & ディレクトリなど SRVUSR=backupuser # ファイルサーバをマウントする際の認証ユーザ SRVPASS=backuppass # ファイルサーバをマウントする際のパスワード # バックアップファイルの最大サイズ。この値を超えると次のファイルが作成される。 # DVD-Rは4gまたは4200m BD-Rは22g ISOSIZE=22g # バックアップファイル保持期間(日) KEEP=21 # バックアップ領域にある自サーバ名のディレクトリをマウントする。(nfsの場合はcifsをnfsに変更する。) mount -t cifs ${DSTSRV}/${HOSTNAME}/ ${DSTDIR} -o username=${SRVUSR},password=${SRVPASS} # mondoarchiveコマンドでバックアップを作成し、実行結果からresult=0の文字を検索 # result=0の文字がある場合は、バックアップ正常と判断 # 正常異常ともに処理結果をメールで送信 # -OiはISOモード、-NはNFS除外、-dは保存先ディレクトリ、-Eは除外ディレクトリ、-sはサイズ。 if /usr/sbin/mondoarchive -OiN -d ${DSTDIR} -E ${DSTDIR} -s ${ISOSIZE} -p `date +%Y%m%d`_${HOSTNAME}_full | grep "result=0"; then echo -e "Full backup succeed" else echo -e "Full backup Failed!!!! Type 'less /var/log/mondoarchive.log' to see the output log"| mail -s "[Warning] result of mondoarchive backup (${HOSTNAME})" ${MAIL} fi # バックアップディレクトリのファイルのタイムスタンプがKEEPで設定した日数以上前のものを自動削除する find ${DSTDIR} -mindepth 0 -mtime +${KEEP} -exec rm -f {} \; # バックアップ領域マウント解除 umount ${DSTDIR} exit
次に増分バックアップ用のスクリプトを作成します。主な違いはmondoarchiveに増分バックアップを意味する-Dが追加されていることと、削除コマンドが無い事の2点です。
mondo_db.sh
#!/bin/bash # 増分アップスクリプト export LANG=C # 各種変数定義 MAIL=mail@example.net HOSTNAME=Server # バックアップ保存先 DSTDIR=/mnt/backup DSTSRV=//192.0.2.86/backup SRVUSR=backupuser SRVPASS=backuppass # バックアップファイルの最大サイズ。この値を超えると次のファイルが作成される。 # DVD-Rは4gまたは4200m BD-Rは22g ISOSIZE=22g # バックアップ領域マウント mount -t cifs ${DSTSRV}/${HOSTNAME}/ ${DSTDIR} -o username=${SRVUSR},password=${SRVPASS} # mondoarchiveコマンドでバックアップを作成し、実行結果からresult=0の文字を検索 # result=0の文字がある場合は、バックアップ正常と判断 # 正常異常ともに処理結果をメールで送信 # -OiはISOモード、-NはNFS除外、-Dは増分バックアップ、-dは保存先ディレクトリ、-Eは除外ディレクトリ、-sはサイズ。 if /usr/sbin/mondoarchive -OiND -d ${DSTDIR} -E ${DSTDIR} -s ${ISOSIZE} -p `date +%Y%m%d`_${HOSTNAME}_diff | grep "result=0"; then echo -e "Differential backup succeed" else echo -e "Differential backup Failed!!!! Type 'less /var/log/mondoarchive.log' to see the output log"| mail -s "[Warning] result of mondoarchive backup (${HOSTNAME})" ${MAIL} fi # バックアップ領域マウント解除 umount ${DSTDIR} exit
スクリプトに実行権限を付与します。
# chmod u+x mondo_fb.sh mondo_db.sh # ll -rwx------ 1 root root 1254 6月 17 17:22 2016 mondo_db.sh -rwx------ 1 root root 1484 6月 17 17:23 2016 mondo_fb.sh
バックアップスクリプトをCRONに登録する
スクリプトが動作することを確認したら、スケジュール実行するためにcronに登録します。実行時間がランダムで良ければ/etc/cron.dailyにバックアップスクリプトのシンボリックリンクを作成するだけで良いのですが、今回は実行時間を指定したいので/etc/cron.d/に実行ルールファイルを作成します。なおこのファイルに実行権限は不要です。
/etc/cron.d/mondobackup
## mondobackup full:sun 5:00AM diff:mon-sat 5:00AM 0 5 * * 0 root /root/script/mondo_fb.sh 1> /dev/null 2> /dev/null 0 5 * * 1-6 root /root/script/mondo_db.sh 1> /dev/null 2> /dev/null
世代管理ができているか確認する
1ヶ月経過してから4世代管理が正常に出来ているか確認します。
# mount -t cifs //192.0.2.86/backup/server/ /mnt/backup -o username=backupuser,password=backuppass # ll /mnt/backup -rwxr-xr-x 0 root root 2212679680 7月 3 05:45 2016 20160703_server_full-1.iso -rwxr-xr-x 0 root root 438478848 7月 4 05:16 2016 20160704_server_diff-1.iso -rwxr-xr-x 0 root root 444968960 7月 5 05:16 2016 20160705_server_diff-1.iso -rwxr-xr-x 0 root root 445765632 7月 6 05:16 2016 20160706_server_diff-1.iso -rwxr-xr-x 0 root root 480471040 7月 7 05:17 2016 20160707_server_diff-1.iso -rwxr-xr-x 0 root root 481662976 7月 8 05:16 2016 20160708_server_diff-1.iso -rwxr-xr-x 0 root root 512665600 7月 9 05:17 2016 20160709_server_diff-1.iso -rwxr-xr-x 0 root root 2217545728 7月 10 05:44 2016 20160710_server_full-1.iso -rwxr-xr-x 0 root root 475639808 7月 11 05:17 2016 20160711_server_diff-1.iso -rwxr-xr-x 0 root root 482131968 7月 12 05:17 2016 20160712_server_diff-1.iso -rwxr-xr-x 0 root root 484354048 7月 13 05:17 2016 20160713_server_diff-1.iso -rwxr-xr-x 0 root root 486352896 7月 14 05:18 2016 20160714_server_diff-1.iso -rwxr-xr-x 0 root root 642539520 7月 15 05:20 2016 20160715_server_diff-1.iso -rwxr-xr-x 0 root root 643506176 7月 16 05:20 2016 20160716_server_diff-1.iso -rwxr-xr-x 0 root root 2223144960 7月 17 05:49 2016 20160717_server_full-1.iso -rwxr-xr-x 0 root root 485654528 7月 18 05:18 2016 20160718_server_diff-1.iso -rwxr-xr-x 0 root root 486471680 7月 19 05:17 2016 20160719_server_diff-1.iso -rwxr-xr-x 0 root root 520060928 7月 20 05:18 2016 20160720_server_diff-1.iso -rwxr-xr-x 0 root root 521418752 7月 21 05:18 2016 20160721_server_diff-1.iso -rwxr-xr-x 0 root root 522141696 7月 22 05:18 2016 20160722_server_diff-1.iso -rwxr-xr-x 0 root root 522598400 7月 23 05:19 2016 20160723_server_diff-1.iso -rwxr-xr-x 0 root root 2226511872 7月 24 05:45 2016 20160724_server_full-1.iso -rwxr-xr-x 0 root root 456034304 7月 25 05:17 2016 20160725_server_diff-1.iso -rwxr-xr-x 0 root root 457861120 7月 26 05:17 2016 20160726_server_diff-1.iso -rwxr-xr-x 0 root root 459581440 7月 27 05:18 2016 20160727_server_diff-1.iso -rwxr-xr-x 0 root root 494065664 7月 28 05:18 2016 20160728_server_diff-1.iso -rwxr-xr-x 0 root root 531156992 7月 29 05:20 2016 20160729_server_diff-1.iso -rwxr-xr-x 0 root root 531877888 7月 30 05:20 2016 20160730_server_diff-1.iso # umount /mnt/backup/
正常に古いバックアップファイルを削除できているようです。
リストア手順については機会があったら追加しようと思います。無いのが一番なのですがw
※2017/7/12 追記
2017年6月末頃から「mondorescue Vanilla Packages」を利用しようとすると「warning: rpmts_HdrFromFdno: Header V4 RSA/SHA512 Signature, key ID 20ebfb0e: NOKEY」と公開鍵関係でエラーが出るようになりました。
Anacron job 'cron.daily' on server /etc/cron.daily/0yum.cron: warning: rpmts_HdrFromFdno: Header V4 RSA/SHA512 Signature, key ID 20ebfb0e: NOKEY Error: The GPG keys listed for the "rhel 6 x86_64 - mondorescue Vanilla Packages" repository are already installed but they are not correct for this package. Check that the correct key URLs are configured for this repository.
詳細原因は不明ですが公開鍵の期限が切れているのではないかと思います。あまり薦められる手ではないのですが一時的に公開鍵のチェックをオフにしてyumを実行すればmondorescueのインストールを行うことができます。ただし鍵が違うということは、改ざんされている可能性があることに注意してください。
# vi mondorescue.repo
[mondorescue]
name=rhel 6 x86_64 - mondorescue Vanilla Packages
baseurl=ftp://ftp.mondorescue.org//rhel/6/x86_64
enabled=1
- gpgcheck=1
+ gpgcheck=0
gpgkey=ftp://ftp.mondorescue.org//rhel/6/x86_64/mondorescue.pubkey
また、yum完了後に「gpgcheck=1」に戻しておきましょう。