« || »

 rsyncで世代バックアップ及びミラーリング

2020. 3. 30 (月)

rsyncで世代バックアップやミラーリングを行うためのPHPスクリプトです。
こちらで作成したものと基本的に同内容ですが、各処理ごとに分けていたスクリプトを個人的に扱いやすいよう1つにまとめたものです。

■スクリプト

backup.php

backup_config.php

■backup_config.phpの設定

 // バックアップ元ディレクトリ
 define(‘SOURCE_DIR’, ‘/mnt/nas/’);

バックアップ元のディレクトリをフルパスで指定します。
リモートには非対応です。

 // バックアップ先ディレクトリ
 define(‘BACKUP_DIR’, ‘/mnt/nas_backup/’);

バックアップ元のディレクトリをフルパスで指定します。
リモートには非対応です。
このディレクトリ以下に、バックアップ日時を名前としたサブディレクトリとともにバックアップが行なわれます。

 // バックアップ世代数
 define(‘BACKUP_GENERATION’, 200);

世代バックアップを行いたい場合、残したい世代数を2以上の値を指定します。
1以下にすると世代バックアップはせずに最新のバックアップに対するミラーリングとなります。
後述するバックアップ先容量監視での削除や間引き処理もありますので、この世代数に達していなくても削除が行なわれる場合があります。

間引き処理は以下のものがあります。
1日以上経過したバックアップはその日の最終のもののみ残し、それ以外を削除
1か月以上経過したバックアップはその月の最終のもののみ残し、それ以外を削除

 // 世代バックアップ間隔(分)
 // 0の場合は1日間隔
 define(‘GENERATION_BACKUP_INTERVAL’, 360);

世代バックアップを行う間隔を分単位で指定します。
360で6時間間隔、720で12時間間隔になります。

 // ミラーリング時にバックアップ先となったディレクトリ名の更新(0:更新しない 1:更新する)
 define(‘MIRRORING_DIR_NAME_UPDATE’, 0);

ミラーリング時は既に存在する最新のバックアップに対してミラーリングを行いますが、ミラーリング先としたディレクトリ名を処理完了日時に合わせて変更するかを指定します。

 // 古いバックアップを削除するディスク容量閾値(%)
 // 0の場合はディスク容量のチェックは行いません
 define(‘THRESHOLD’, 95);

バックアップ先のディスクに対して古いバックアップの削除を開始する容量の閾値を%で指定します。
指定した値に達したら、それを下回るまで古いバックアップから順に削除されます。

■設置と実行スケジューリング

backup.phpとbackup_config.phpを同一ディレクトリへ保存し、crontabにて以下の設定を行います。

 * * * * * php /スクリプト設置パス/backup.php &> /dev/null

上記の例では毎分ごとにスクリプトが実行されます。
バックアップ元のディスク使用量に変化が無ければ処理を行わず終了し、排他処理も行い同一プロセスが複数同時に走らないようにもしていますので必要以上の負担はかからないかと思いますが、気になるようでしたら実行間隔を広げてください。
逆に、もっと間隔を短くしたい場合は以下のような指定方法もあります。

 * * * * * php /スクリプト設置パス/backup.php &> /dev/null
 * * * * * sleep 30; php /スクリプト設置パス/backup.php &> /dev/null

上記の例では毎分0秒と30秒に処理が実行されます。

実行した時の挙動は初回はフルバックアップ、GENERATION_BACKUP_INTERVAL で指定した間隔ごとに世代バックアップ、それ以外は最新バックアップに対するミラーリングとなります。

« || »

Comments are closed.