web-dev-qa-db-ja.com

バックアップシステムにあるZFSスナップショットイメージを検証するにはどうすればよいですか?

私はZFSでFreeBSDホストを実行しています。

zfs send を使用して、リモートホストに一連の増分ZFSスナップショットイメージを保存しているとしましょう。

zfs send -i zpool/data/foo@04hoursago zpool/data/foo@10hoursago > /nfs/backups/foo.zfs

または、FTPサーバーを介してストリームを送信することもできます。

% ftp backup
ftp> put "| zfs send -i zpool/data/foo@04hoursago zpool/data/foo@10hoursago" /backups/foo.zfs

このリモートイメージを検証したいと思います。この画像に含まれているスナップショットのリストを印刷するか、オプションでチェックサムまたはその他のメタデータを抽出して、画像が有効であり、期待どおりのスナップショットが含まれていることを確認します。

画像ファイルをクエリして、中身を確認するにはどうすればよいですか?

zfs receive-nvおよびverbose)フラグを使用してno-opを試し、イメージ内のスナップショットを一覧表示しましたが、ライブシステムでは機能しない可能性があります。

# zfs receive -nv zpool < /nfs/backups/foo.zfs
cannot receive new filesystem stream: destination 'zpool' exists
must specify -F to overwrite it
# zfs receive -nv -F zpool < /nfs/backups/foo.zfs
cannot receive new filesystem stream: destination has snapshots (eg. zpool@09hoursago)
must destroy them to overwrite it
6

ZFSの最新バージョンでは、zstreamdumpという名前のコマンドが提供されています。このコマンドは、zfs sendを使用して作成された ストリームから人間が読める情報を提供 (または画像)できます。

これは、コマンドラインを使用した例です。

Host # zstreamdump < foo.zfs 
BEGIN record
    ...
    toname = zpool/data/foo@04hoursago
    END checksum = 123123123123123123/123123123123123123/asdasdasdasdasd/zxczxczxczxczxc
    ...
    Total write size = 54784 (0xd600)

FTPの例:

ftp> get /backups/foo.zfs "| zstreamdump"
BEGIN record
 hdrtype = 1
 ...
 toname = zpool/data/foo@04hoursago
 END checksum = 123123123123123123/123123123123123123/asdasdasdasdasd/zxczxczxczxczxc
 ...

これにより、実際のスナップショットの名前とそのスナップショットのチェックサムがわかります。もちろん、その情報は別のレイヤーに存在するため、スナップショット内のファイルのリストは表示されません。

私は実際にzfs send -iを使用して作成された増分スナップショットでこれを試していませんが、これは私が望むものかもしれません。

6

-nvアプローチの問題は、-nで受信したときに中間ファイルシステムが作成されないため、no-opフラグなしで機能している間は毎回失敗することだと思います(ただし、完全なファイルシステムには時間がかかる場合があります)。残念ながら、オンラインのほとんどのドキュメント/ブログはこのフラグを使用していないため、あなた(および私)のようにこのエラーが発生することはありません。

Solaris Internals ZFS Best Practices Guide からの警告の言葉も:

ZFS送信ストリームをファイルまたはテープに保存し、そのファイルが破損した場合、それを受信できなくなり、データを回復できなくなります。ただし、ネバダ州のビルド125では、zstreamdump(1m)コマンドを追加して、ZFSスナップショットの送信ストリームを確認しています。 RFE6736794も参照してください。

特に大規模なデータセットの場合、これは3つのことを意味します。

  • ストリームがビットの安全性に関して信頼できないストレージにある場合は、ほぼ常にチェックする必要がありますが、1つのビットエラーでバックアップ全体が消去されるリスクがあります。
  • ストリームが信頼できるストレージ上にある場合(たとえば、NFSとしてエクスポートされたZFSボリューム上)、比較的節約できますが、zfs list -rzfs diffを見逃します。
  • ネイティブストレージ(SSH経由でアクセスされるZFSボリュームなど)にアクセスできる場合は、受信したファイルシステムを拡張して、上記のツールを使用できます。また、この場合、-vスイッチは期待どおりに機能し、簡単に解析できます。
2
user121391