現在、2台のサーバーがあり、両方のサーバーが同じハードウェア、ディスクなどを持っています。
あるサーバー(server1)が「マスター」サーバーになります。デフォルトでは、人々が接続できるようにSMB共有を持つraidz2を持つサーバーです。
他のサーバー(server2)は、server1(raidz2)と同じ構成ですが、server1のバックアップにのみ使用されます。その目的は、ディスク障害、火災、洪水などによってserver1が失われた場合にオフサイトバックアップとして機能することです。
server2にバックアップする最良の方法を見つけようとしています。
最初はrsyncのようなものを考えました。これはcronで設定するのが簡単で、週に1回実行できます。
またはzfs send / recvで何かを使うつもりです。私が理解しているように、ZFSは「スナップショット」を実行できるので、多くのスペースを失うことなくスナップショット/増分バックアップを作成できれば良いと思いました。私はこれが実装するのが難しく、エラーが発生しやすいと思います。
他のオプションがありますか?
前述したように、両方のサーバーはハードウェアとraidz2レイアウトの面で同じように構成されています。私の現在の状況に関する提案はありますか?よろしくお願いします。
答え1
増分ZFS送受信を使用します。rsync
ファイルシステム全体を閲覧することなく、最後のスナップショット以降に行われた変更を知ることは、ZFSよりも効率的です。
というファイルシステムの完全バックアップを作成したいとしますdatapool/fs
。
まず、ターゲットサーバーにバックアップを保存し、ソースプールに再帰スナップショットを保存するプールを作成します。
dest # zpool create datapool ...
source # zfs snapshot -r datapool/fs@snap1
その後、データ全体を初期バックアップに送信します。
source # zfs send -R datapool/fs@snap1 | ssh dest zfs receive datapool/fs
来週(または希望の期間)にソースプールから2番目のスナップショットを作成し、そのデルタをターゲットに送信します。その時点で、ZFSは1週間以内に変更されたコンテンツ(削除、生成、および変更されたファイル)のみを送信するのに十分スマートでした。ファイルが変更されると、すべてが転送されず、変更されたブロックのみが転送され更新されます。
source # zfs snapshot -r datapool/fs@snap2
source # zfs send -ri snap1 datapool/fs@snap2 |
ssh dest zfs receive -F datapool/fs
バックアップして操作を繰り返すたびに、スナップショットの数を増やします。
不要になった場合は、いずれかのサーバーで使用されていない古いスナップショットを削除してください。
帯域幅制約がある場合は、パイプにgzip
/コマンドを挿入したり、SSH圧縮を有効にしたりするなど、すぐにデータを圧縮/圧縮解除できます。zip
source # zfs send -ri snap1 datapool/fs@snap2 | gzip |
ssh dest "gunzip | zfs receive -F datapool/fs"
またmbuffer
、ページ:
dest # mbuffer -s 128k -m 1G -I 9090 | zfs receive datapool/fs
source # zfs send -i snap2 datapool/fs@snap3 |
mbuffer -s 128k -m 1G -O w.x.y.z:9090
注:このzfs -r
フラグは、Solaris以外のZFS実装では使用できません。 http://lists.freebsd.org/pipermail/freebsd-fs/2012-September/015074.html。この場合は、-F
ターゲットでこのフラグを使用せずにデータセットを明示的にロールバックしてください。ソースに新しいデータセットが作成された場合は、スナップショット+増分転送/受信を実行する前に独立して転送してください。
もちろん、バックアップするファイルシステムが1つしかなく、基本データセット階層がない場合、またはスタンドアロンバックアップを実行したい場合は、増分バックアップを実装する方が簡単で、ZFS実装に関係なく同じように機能する必要があります。
T0:
zfs snapshot datapool/fs@snap1
zfs send datapool/fs@snap1 | ssh dest zfs receive datapool/fs
T1:
zfs snapshot datapool/fs@snap2
zfs send -i snap1 datapool/fs@snap2 |
ssh dest zfs receive -F datapool/fs