Linuxサーバー管理

rsyncで効率的なバックアップを構築する【世代管理まで完全解説】

Linuxサーバー管理
記事内に広告が含まれています。

rsyncは差分転送で効率的なバックアップを実現するLinux標準コマンドです。–delete は必ず –dry-run で確認してから実行してください。

主要オプション

オプション説明
-aアーカイブモード(パーミッション・タイムスタンプ保持)
-v詳細表示
-z転送時に圧縮(ネットワーク転送時に有効)
–delete送信元にないファイルを送信先から削除(要注意)
–dry-run実際には実行しない(テスト用)
–exclude除外パターンを指定

ローカルバックアップ

# 基本的なバックアップ
$ sudo rsync -avh /var/www/ /backup/www/

# --delete は必ず --dry-run で確認してから実行
$ sudo rsync -avh --dry-run --delete /var/www/ /backup/www/
$ sudo rsync -avh --delete /var/www/ /backup/www/

# ログ・キャッシュを除外
$ rsync -avh --exclude="*.log" --exclude="tmp/" /var/www/ /backup/www/

リモートサーバーへのバックアップ

# SSH経由でリモートにバックアップ
$ rsync -avzh -e "ssh -p 2222 -i ~/.ssh/backup_key" /var/www/ backup@remote:/backup/www/

# 帯域制限(本番サーバーへの影響を抑える)
$ rsync -avzh --bwlimit=10000 /var/www/ backup@remote:/backup/

世代管理バックアップ(–link-dest)

–link-dest でハードリンクを使った差分世代管理を実現します。変更されたファイルのみ実体を持ち、ストレージを大幅に節約できます。

#!/bin/bash
set -euo pipefail
BACKUP_SRC=/var/www
BACKUP_DST=/backup
DATE=$(date +%Y-%m-%d_%H%M%S)
LATEST="$BACKUP_DST/latest"

rsync -avh --delete \
  --link-dest="$LATEST" \
  "$BACKUP_SRC/" "$BACKUP_DST/$DATE/"

# latest シンボリックリンクを更新
ln -sfn "$BACKUP_DST/$DATE" "$LATEST"

# 30日以上前のバックアップを削除
find "$BACKUP_DST" -maxdepth 1 -type d -name "????-??-??_*" -mtime +30 -exec rm -rf {} +
# cron で毎日深夜2時に自動実行
$ sudo crontab -e
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

# 定期的にリストアテストを実施
$ sudo rsync -avh /backup/latest/ /tmp/restore-test/

まとめ

  • -a でパーミッション・タイムスタンプを保持したアーカイブコピー
  • –delete は必ず –dry-run で確認してから実行する
  • ネットワーク転送時は -z で圧縮。ローカルは不要
  • –link-dest でハードリンクを使った効率的な差分世代管理を実現
  • バックアップは自動化するだけでなく、定期的にリストアテストも実施する

📋 Linuxサーバー運用・管理チェックリスト完全版でPhase 2の全要点を確認できます。

コメント

タイトルとURLをコピーしました