web-dev-qa-db-ja.com

ZFSプール内の上書きされたラベル、ポインターブロック、およびueberblockを回復するにはどうすればよいですか?

私は単一ディスクのZFSプールで愚かな事故を引き起こしました。これは、 このメーリングリストスレッド の人と同じように見えます。 e。、重要なメタデータを上書きしたようです。これを実際のペイロードから復元できますか、それともメタデータなしでペイロードを取得する方法はありますか?

これが私がしたことです、正確に:

  • 1台のマシンで単一のディスクを使用してZFSプールを実行していました
  • 別のマシンの新しいZFSプールに移行したかった
  • 最初のマシンでzpool exportするのを忘れた
  • zpool createがデバイスが使用中であると不平を言ったとき、私は「問題ありません。ホストを停止しただけで、もう使用されていません」と思い、zpool create -fを実行しました。

(RTFMの後で気付いたように)私がすべきだったのは、新しいホストではimportではなくcreateです。これでzfspoolが機能しましたが、ファイルシステムがなくなった/見えなくなりました。

古いホストにデバイスを再インポートしようとし、後でimport -Dを試しましたが、明らかに、両方とも機能しませんでした。

2
Hanno Fietz

まず最初に、何かを試す前に、ディスクのビットストリームコピーを取得します。

ありません zpool import -D 何でもする?

正直なところ、新しいプールが元のプールのすべてのラベル、ブロック、およびポインターブロックを上書きしたため、私はそうは思いません。

1
Hugh Mann

ディスク/パーティションの上部と下部の512キロバイトには、最後の数個のuberblock(リカバリとロールバック用)とプールのRAIDジオメトリ(より具体的にはディスクが含まれていたvdev)のリストを含むラベルが含まれています。新しいプールを作成することで、ほぼ確実に古いラベルを一掃しました。これは、プールの正確なジオメトリ(ディスク順序のRAID-Z構成)を知って、難しい方法でuberblockを探す必要があることを意味します。

Zpool createは、デバイス上のすべてのラベルを上書きします(そのため、「-f」を追加する必要がありました。これは、基本的に「すべてがうまくいかない場合は私を責める」ことを意味します)。 vdevラベルにはルートブロックポインター(プールオブジェクトツリー全体のルートブロックを指す)が含まれており、新しいデータが追加されると(COWセマンティクスのため)、このブロックポインターの値が移動するため、データは失われます。

1
Italux