web-dev-qa-db-ja.com

ZFS:zvolを時間に戻す方法を知っている人はいますか?

ZFSベースのiSCSI SANは、多数のVMサーバーにZVOLを提供します。今日、ネットワークの不具合により、クライアントにマウントされているすべてのiSCSIボリュームが停止しました。 RO。それを回避する唯一の方法は、すべてをシャットダウンして再起動することです。多くの場合、fsckを実行してiSCSIボリュームをオンラインに戻します。そうですね、fsckはボリュームの1つを完全に破棄することにしました。したがって、私のようには見えません。 fsckが作成した混乱を修正できるようになります。

ZFSでファイルを回復することについてはかなり読んだことがありますが、この場合はZVOLを扱っています。これはある意味ではるかに単純ですが、の内容をロールバックしようとすることを扱っているものは何も見ていません。ブロックデバイス。助言がありますか?

-TIA-

いくつかのデータセットの詳細:

Dataset zpool1/vm3 [ZVOL], ID 59, cr_txg 12078, 44.6G, 2 objects, rootbp DVA[0]=<6:6c2c4b1e00:200> DVA[1]=<7:487aa4b200:200> [L0 DMU objset] fletcher4 lz4 LE contiguous unique double size=800L/200P birth=7736596L/7736596P fill=2 cksum=4c78779ec:2049fb2de6c:6f2f6c4a44e9:1042484aee3ded

    Deadlist: 1K (512/512 comp)

mintxg 0 -> obj 48
mintxg 1 -> obj 4157

    Object  lvl   iblk   dblk  dsize  lsize   %full  type
         0    7    16K    16K  7.00K    16K    6.25  DMU dnode
        dnode flags: USED_BYTES
        dnode maxblkid: 0

    Object  lvl   iblk   dblk  dsize  lsize   %full  type
         1    5    16K     8K  44.6G   200G   36.45  zvol object
        dnode flags: USED_BYTES
        dnode maxblkid: 26214399

    Object  lvl   iblk   dblk  dsize  lsize   %full  type
         2    1    16K    512      0    512  100.00  zvol prop
        dnode flags: USED_BYTES
        dnode maxblkid: 0
        microzap: 512 bytes, 1 entries

                size = 214748364800

システムはCentOS7.1です

Linux san1srvp01 3.10.0-514.6.1.el7.x86_64 #1 SMP Wed Jan 18 13:06:36 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

関連するスナップショットはありません。言うまでもなくそうだと思いました。

私が質問している理由、そして私が求めているのは、フォレンジック技術によるオブジェクトの回復を掘り下げている Max Burning のこのような記事に関連しています。もちろん、これはZFS内部の知識が不足していないことに依存しています。私が見たもののほとんどは、rawブロックストレージを実装するオブジェクトとは非常に異なるファイルオブジェクトをさかのぼることを扱っており、ZVOLに関連する内部についてはほとんど何も見ていません。

Fsckが行った変更を技術的に「ロールバック」できない場合でも、少なくとも戻って、元の主要なブロックのいくつかを見つけることは役に立ちます。これは、ZFSのCOW動作と、私が不足している十分な知識があれば可能であるはずですが、通常、それで私を止めることはできません。

1
tlum

はい、できます。散らかってしまいます。

https://Gist.github.com/jshoward/5685757

1
jkhilmer

関連するスナップショットはありません。言うまでもなくそうだと思いました。

したがって、zpoolとデータが正常である時間と相関するスナップショットがないと、簡単な手段やロールバック機能はありません。

2
ewwhite

Tero Kilkanenがコメントで正しく述べているように、zvolがまだ有効だったときのスナップショットが必要です。そうしないと、データが失われます。


いくつかの背景:

スナップショットは、ファイルシステムまたはボリューム(zvol)などの任意のデータセットから作成でき、それ自体も(読み取り専用、依存)データセットです。これらは常にアトミックであるため、データセット全体の特定の時点での状態を取得します(ただし、最上位のアプリケーションでは、最悪の場合、ディスクまたはシステムのハードリセットのように見える場合があります)。データの整合性は維持されます(少なくとも同期書き込みの場合、非同期書き込みはもちろん部分的に破棄されている可能性があります)。

この点でのzvolsとファイルシステムの唯一の違いは、各スナップショットは常にデータセット全体を参照するため、ファイルシステムスナップショットから復元するファイルを選択できることです(現在または古いデータと混合する)が、できるのはzvol全体を使用することを選択します。これは、非常に大きなファイルのようなものだからです(理論的には、バイト範囲をコピーして自分でマージすることもできますが、それは非常に不便です)。データ(ファイルとブロック)のこの「ビュー」を除けば、動作は同じです。

0
user121391

Zpool import-Tオプションを確認してください。注意:これはプール上にあり、zvolではありません。おそらく、zvolを新しいzpoolに送信し、import-Tを使用して別のtxgを使用してインポートすることができます。

0
Sam