私は単一ディスクのZFSプールで愚かな事故を引き起こしました。これは、 このメーリングリストスレッド の人と同じように見えます。 e。、重要なメタデータを上書きしたようです。これを実際のペイロードから復元できますか、それともメタデータなしでペイロードを取得する方法はありますか?
これが私がしたことです、正確に:
zpool export
するのを忘れたzpool create
がデバイスが使用中であると不平を言ったとき、私は「問題ありません。ホストを停止しただけで、もう使用されていません」と思い、zpool create -f
を実行しました。(RTFMの後で気付いたように)私がすべきだったのは、新しいホストではimport
ではなくcreate
です。これでzfspoolが機能しましたが、ファイルシステムがなくなった/見えなくなりました。
古いホストにデバイスを再インポートしようとし、後でimport -D
を試しましたが、明らかに、両方とも機能しませんでした。
まず最初に、何かを試す前に、ディスクのビットストリームコピーを取得します。
ありません zpool import -D
何でもする?
正直なところ、新しいプールが元のプールのすべてのラベル、ブロック、およびポインターブロックを上書きしたため、私はそうは思いません。
ディスク/パーティションの上部と下部の512キロバイトには、最後の数個のuberblock(リカバリとロールバック用)とプールのRAIDジオメトリ(より具体的にはディスクが含まれていたvdev)のリストを含むラベルが含まれています。新しいプールを作成することで、ほぼ確実に古いラベルを一掃しました。これは、プールの正確なジオメトリ(ディスク順序のRAID-Z構成)を知って、難しい方法でuberblockを探す必要があることを意味します。
Zpool createは、デバイス上のすべてのラベルを上書きします(そのため、「-f」を追加する必要がありました。これは、基本的に「すべてがうまくいかない場合は私を責める」ことを意味します)。 vdevラベルにはルートブロックポインター(プールオブジェクトツリー全体のルートブロックを指す)が含まれており、新しいデータが追加されると(COWセマンティクスのため)、このブロックポインターの値が移動するため、データは失われます。