Rsyncを活用したLinuxシステムのバックアップおよび復元戦略

Linuxサーバー運用において、データ保護は不可欠な要素です。利用可能なツールとしてtarddrsyncなどが挙げられますが、本記事では転送効率に優れ、差分同期が可能なrsyncを用いたバックアップおよび復元手順について解説します。

システム全体のバックアップ取得

基本構文とアーカイブモード

システムのルートディレクトリを含むバックアップを行う際は、スーパーユーザー権限が必要です。基本的な同期コマンドは以下のようになります。

rsync -aAXv /origin/system /mnt/backup_drive/full_copy

このコマンドにおける主なオプションの役割は以下の通りです。

  • -a: アーカイブモード。権限、所有者、タイムスタンプ、シンボリックリンクなどを保持します。
  • -A: ACL(Access Control Lists)を保持します。
  • -X: 拡張属性を保持します。
  • -v: 処理状況の詳細を出力します。

除外設定の実装

システム全体をバックアップする場合、仮想ファイルシステムや一時ファイル、バックアップ先自体を除外することが重要です。これを行わないと無限ループや不要なリソース消費を引き起こす可能性があります。実運用では、以下のように除外リストを明示的に指定します。

sudo rsync -aAXv --progress \
    --exclude='/dev/*' \
    --exclude='/proc/*' \
    --exclude='/sys/*' \
    --exclude='/tmp/*' \
    --exclude='/run/*' \
    --exclude='/mnt/*' \
    --exclude='/media/*' \
    --exclude='/lost+found' \
    --exclude='/var/tmp/*' \
    --exclude='/home/user/.cache/*' \
    --exclude='*.swap' \
    / /mnt/raid_pool/system_snapshot_2023

ここでは、/dev/procなどのカーネル空間に関連するディレクトリや、マウントポイントである/mnt、キャッシュファイルなどを除外対象としています。これにより、システムの復元に必要な実データのみを効率的に保存できます。

増分バックアップの導入

ディスク容量を節約しつつ、過去の状態を保持するにはハードリンクを利用した増分バックアップが有効です。rsync--link-destオプションを使用すると、変更されていないファイルは前回のバックアップへのハードリンクとして作成され、変更されたファイルのみが新たにディスク容量を消費します。

rsync -aAXv --delete --link-dest=/backup/previous_day /data/source /backup/current_day
  • --delete: ソース側で削除されたファイルをバックアップ先からも削除し、完全な同期状態を維持します。
  • --link-dest: 指定したディレクトリ(前回のバックアップ)とファイルを比較し、変更がない場合はハードリンクを作成します。

この手法により、スナップショット毎のフルバックアップと同等の状態を、増分のみの容量で維持することが可能になります。

バックアップの自動化

定期的な実行にはcronを利用します。直接コマンドを記述するよりも、シェルスクリプトとして保存し、それを実行する方がログ管理やエラーハンドリングの面で推奨されます。

まず、以下のようなスクリプト/usr/local/sbin/run_backup.shを作成します。

#!/bin/bash
rsync -aAXv --delete --link-dest=/backup/last / /backup/now >> /var/log/rsync.log 2>&1
# 成功したら最新バックアップのリンクを更新
if [ $? -eq 0 ]; then
    rm -f /backup/last
    ln -s /backup/now /backup/last
fi

その後、crontab -eを実行し、毎日午前3時にバックアップを実行するよう設定します。

0 3 * * * /usr/local/sbin/run_backup.sh

システム復元の手順

システム障害が発生した際の復元は、バックアップデータをシステムのルートディレクトリへ書き戻すことで行います。復元時もrsyncを使用し、同期元と同期先を逆にします。

rsync -aAXv /mnt/backup_drive/system_snapshot_2023/ /

コマンド末尾のスラッシュ(/)の有無に注意してください。バックアップディレクトリの中身をルートディレクトリへ展開するため、宛先の/はシステムのルートを示します。この処理により、バックアップ取得時の状態へファイルやディレクトリ構造が復元されます。ネットワーク経由や大容量の場合、完了までに時間を要する場合がありますが、処理が完了すればシステムは復旧します。

7月12日 16:19 投稿