中央バックアップサーバー(rsh / SSH経由)にバックアップしたいUbuntu(およびRHEL)サーバーがいくつかあります。スナップショットと増分バックアップを実行したいです。目標は、バックアップサーバーの1つが突然停止した場合にブートイメージをインストールし、バックアップから復元してすぐに実行することをお勧めします。
これらのサーバーには一意のユーザーとグループがあり、同じ名前のいくつかの他のgidとuidがあります。私はrsyncを考えていましたが、ローカルバックアップはうまく機能し、xattrsとACLもバックアップできるように細かく制御できますが、リモートサーバーのrsyncが期待どおりにこれらのニュアンスを維持できないことがわかりました。
それでは、これを達成するためのより良い方法は何ですか?この目的のために一般的に使用されるパッケージはありますか?
答え1
はい、rsync
ACL、拡張属性、ext2属性、ハードリンク、数値ユーザーID、スパースなどを保存することを選択できます。
btrfs
かつてファイルシステムをバックアップサーバー上のファイルシステムと同期させるシステムがありました(バックアップサーバーでスナップショットを実行)、安定性の問題のためzfs-on-linuxに移行されました(残念ながらまだPOSIXをサポートしていません)。 ACL)、解決策があります)。
rsync
興味のあるオプション:--archive --one-file-system --xattrs --hard-links --delete --numeric-ids --sparse --acls
内部同期オプションもあります。
rsyncがしないことの1つは、名前の変更を検出することです(パッチがありますが、それがどのくらい信頼できるかわからず、ファイル名の変更のみを検出します)。
zfs
zfs send
指定されたスナップショット以降に完了した修正のみを送信する必要があります(zpoolを別のzfsとして使用zfs receive
)。私が理解したことが正しい場合は、この機能btrfs
も最近追加されました。したがって、最新のカーネルであるファイルシステムを別のファイルシステムにバックアップする場合、btrfs
これはオプションです。btrfs
答え2
見るスナップ写真rsync
、これはコマンドラインユーティリティ用のPerlラッパーです。 Rsnapshot は、rsync に追加の構成レイヤーを追加して増分バックアップを簡単にします。 (ファイルの以前のバージョンは変更されていない場合は現在のバージョンにハードリンクされます。したがって、バックアップされたファイルシステムの各増分バージョンは完全コピーのように見えます。)
別の同様の可能性は二重性に基づいていますlibrsync
。もっと素敵なユーザーインターフェイスがあることを知っていますが、まだ使ったことがありません。またはrdiff バックアップ、私はこれが同じ開発者のものであると仮定します。それとも少なくとも以前はそうでした。
もちろん、多数のバックアップシステムがあります。これはリストほとんどはFreeBSDで利用でき、ほとんどはLinuxで利用可能です。しかし、上記の3つは、おなじみの場合は考慮するのが当然だと思いますrsync
。 (素晴らしいツールです。)
答え3
編集:みんなありがとう!これで、いくつかの他のパッケージがそのタスクを実行できることがわかり、rsyncの内部についてもう少し理解しています。これについて疑問に思う人のために、--numeric_idsオプションを使用して他のシステムにrsyncする場合は、UID / GIDをマップまたは作成していないまま渡します。バックアップディレクトリのエントリの所有権は奇妙に見えるかもしれませんが、復元時に1:1と一致します(新しいシステムに復元する場合は、復元するアイテムの一部が元のマッピングファイルに関連付けられていると仮定します)。
これは現在、システム全体のバックアップ(sudo経由のルート)に使用されているオプションの完全なリストです。{{my_exclusions}}は読者のための練習であることに注意してください(まだ機能していません)。また、--link-dest...の使用に注意してください。ディレクトリがターゲットにある場合は、以前のバックアップにすでに存在していたファイル(現在のバックアップでは変更されていません)がある場所にハードリンクが作成されます。
rsync \
--recursive \
--links \
--hard-links \
--perms \
--acls \
--xattrs \
--owner \
--group \
--devices \
--specials \
--times \
--one-file-system \
--partial \
--numeric-ids \
--compress \
--delete-during \
--stats \
--human-readable \
--progress \
--verbose \
--super \
--log-file=/tmp/my.log \
--link-dest=/backup/latest_backup \
--exclude={{my_exclusions}} \
--link-dest=/backup/latest \
/ \
{{remote_hostname_or_ip}}:/backup/new_backup