これまでに54万枚以上の画像を生成したアプリケーションがあります。画像は、これまでに500万のiノードを使用しているツリー構造で保持されます。
リモートのオフサイトサーバーにデータを毎日バックアップしたいと思います。 rsyncを使用することを考えましたが、それが最速の方法になるかどうかはわかりません。
効率的なバックアップ戦略について何かアドバイスはありますか?
変更されたファイルを見つけるために毎日5,000,000のiノードをスキャンするのに非常に長い時間がかかります!
最後のバックアップ以降の変更のみをバックアップする方法があった場合はどうなりますか?
ええと、あなたは…スナップショットでできます!
スナップショットの最大のハードルは、スナップショットをサポートするファイルシステムに切り替えることです。
Linuxでは、2つのよく知られたスナップショットファイルシステムは次のとおりです。
どちらも コピーオンライトファイルシステム です。これが実際に意味することは、最後のスナップショット以降の変更を追跡するため、最新のスナップショットをバックアップサーバーに送信すると、変更のみが送信されますが、決定したすべての毎日のバックアップの完全なコピーが保持されます。保つ。
つまり、ボーナスとして、余分なスペースをあまり確保せずに1日以上のバックアップを保持できる可能性があり(毎日の変更で使用されるディスクスペースのみ)、バックアップを柔軟に削除して、毎週、毎月、または必要に応じて毎年のバックアップ。
これは、増分バックアップを作成してバックアップサーバーに送信するために実行できるコマンドの例です。
# Make a snapshot
btrfs subvolume snapshot -r /app/data /backup/app-data-$(date "+%Y%m%dT%H%M%S%Z")
# Ensure the snapshot is saved
sync
# Find your latest snapshot, referred to as `/backup/app-data-THIS_BACKUP_TIMESTAMP` below
ls -lhtr /backup/
# Send the snapshot since the previous snapshot to the backup server
btrfs send -p /backup/app-data-LAST_BACKUP_TIMESTAMP /backup/app-data-THIS_BACKUP_TIMESTAMP | ssh BACKUP_USER@BACKUP_SERVER "btrfs receive /backup/app-data"
注:除外-p /backup/app-data-LAST_BACKUP_TIMESTAMP
これが最初のバックアップである場合は、最後のコマンドから。
これは、増分バックアップを作成してバックアップサーバーに送信するために実行できるコマンドの例です。
# Create a snapshot of the "data" dataset in your "app-pool" zpool
zfs snapshot app-pool/data@$(date "+%Y%m%dT%H%M%S%Z")
# Find your latest snapshot, referred to as `app-pool/data@THIS_BACKUP_TIMESTAMP` below
zfs list -rt snapshot app-pool/data
# Send the snapshot since the previous snapshot to the backup server
zfs send -i app-pool/data@LAST_BACKUP_TIMESTAMP app-pool/data@THIS_BACKUP_TIMESTAMP | ssh BACKUP_USER@BACKUP_SERVER "zfs receive backup-pool/app-data"
注:除外-i app-pool/data@LAST_BACKUP_TIMESTAMP
これが最初のバックアップである場合は、最後のコマンドから。