増分バックアップとは
前回行われたバックアップからの変更・追加部分をバックアップする手法である.
下記の図では,グレー色が前回からの変更や追加部分である.例えば,7月3日を見てみると7月2日までの15GBはバックアップをせずに,変更や追加部分である5GBのみをバックアップする.
こうすることで,1回あたりのバックアップ量を少なくすることができる.また,世代を残す際にも容量を圧迫せずに残すことができる.しかし,復元時に複数のデータブロックを繋ぎ合わせる必要があるため作業が複雑になる面もある.
増分バックアップの実装
今回は,シェルスクリプトを用いて増分バックアップを実装した.ソースコードを以下に掲載する.1行目では,BASEDIRという変数を用意して送信先の親パスを代入する.2行目では,LATESTBKUPという変数を用意してlsコマンドで送り先のディレクトリ状況を確認する.今回,バックアップを実行する際にbackup-(date+%Y%m%d-%H%M%S)というディレクトリを作成するようにしているためgrepコマンドを使用している.また,tailコマンドを使用することによって一番最後に作られたディレクトリ(つまり最新のバックアップディレクトリ)と比較することができる.こうすることで,増分バックアップが可能となる.最後に,3行目でrsyncコマンドとlink-destオプションを使用して増分バックアップを実現している.
#! /bin/bash
BASEDIR="送信先の親パス"
LATESTBKUP=$(ssh 送信先のユーザ名@IPアドレス ls $BASEDIR | grep backup- | tail -n 1)
rsync -avh --progress --link-dest="$BASEDIR/$LATESTBKUP" 送信元のパス "送信先のユーザ名@IPアドレス:/送信先のパス/backup-$(date +%Y%m%d-%H%M%S)"
上記での注意点
・lsコマンドを使用する際にsshを使用する
→ 違うサーバにある送信先のディレクトリを参照するため
・パスの指定方法
→ ディレクトリごと送信するかディレクトリ配下のファイルを送信するかで最後に/(スラッシュ)を付けるか付けないかが変わる
→ ディレクトリごと送信したい場合:スラッシュを付けない
→ ディレクトリ配下のファイルを送信したい場合:スラッシュを付ける
実際の実行結果
・初回のフルバックアップ
・送信元
・送信先
上記のように,実際にファイルを送信することに成功している.
・2回目のバックアップ(増分バックアップ)
・送信元
・送信先
上記のように,1回目で送られた1,2,3.txtは送られずに追加された4.txtのみを送信することに成功している.つまり,増分バックアップに成功している.
最後に
今回は,シェルスクリプトを用いたVM間での増分バックアップの方法を説明しました.増分バックアップを利用することで,ファイル送信時間が速くなったり,送り先のディスクを圧迫せずにファイルを保存することが可能となります.気になる方は,是非ご自身の環境で試してみてください!!