ZFS: 使用できないプール内のディスクをオンラインにする

ZFS: 使用できないプール内のディスクをオンラインにする

私は FreeBSD と ZFS を使用したホーム サーバーを所有しており、過去 5 年間問題なく動作しており、障害のあるディスクを正常に交換できたことも何度かあります。

しかし、今日は小さな災害が発生し、解決策を見つけたいと思っています。

最上位レベルのプールは 3 つの vdev で構成されており、各 vdev は raidz1 プールであるため、最大 3 つのディスクが故障しても (すべてが異なる vdev に属していると仮定)、データの整合性は損なわれません。

昨日、1 つの vdev 内の 1 つのディスクでかなりの数のエラーが報告されていることに気付きました。過去の経験から、これは通常、ディスクが故障しそうなことを示しているため、私はいつものように次のようにします。

  1. ディスクをオフラインにする: zpool offline tank gpt/ta4
  2. ディスクを物理的に交換する
  3. gpartで新しいディスクをセットアップし、zpool replace tank gpt/ta4を実行します。

しかし、今回は手順2と3の間に災難が起こりました。新しいドライブをインストールした後、サーバーの電源を入れたところ、何かが焦げるようなにおいがし、HBAが4ドライブが利用できませんでした。信じられないほど不運なことに、何らかの電圧サージが発生したに違いありません。同じ vdev (gpt/ta2) 内の別のドライブが完全に死んでおり、目視検査で PCB 上の MOSFET の 1 つが壊れていることが判明しました。

したがって、gpt/ta2 は UNAVAIL で、gpt/ta4 は OFFLINE なので、明らかに vdev (raidz1) も UNAVAIL です。

質問は次のとおりです。1) gpt/ta4 をオンラインに戻す方法はありますか? 「zpool online tank gpt/ta4」を発行しようとすると、プールが利用できないと表示されるので、実行できません。なぜそうなるのかは理解できますが、gpt/ta4 は、読み取りエラーが発生しているものの、オフラインにする前は基本的に raidz1 プールの「正常な」メンバーであったと考えていました (zpool ステータスでは、既知のデータ エラーは報告されていません)。これを実現する方法はありますか?

2) それができない場合、少なくともトップレベル プールの残り (3 つの raidz1 vdev で構成) をオンラインにする方法はありますか? 他の 2 つの vdev はまったく問題ありません。

助けてください。貴重なデータがたくさんあります :-)

前もって感謝します。

答え1

この時点では役に立たないかもしれませんが、これがまさに、私が raidz1 の使用を勧めたり、ミラー セットで巨大なディスクを使用している場合はトリプル ミラーを提案したりすることがない理由です。

あなたが取ることのできるいかなる行動も、タンクをオンラインに戻すことは /極めてありそうにありません/。 あなたの期待を高めないように、まずそのことから始めなければなりません。

1: ディスクがすべて取り外される場合でも、ディスクが安全であることを確認します。

2: FreeBSD の最新バージョンに更新します。入手可能な最新の ZFS ビットが必要です。

3: 元の gpt/ta4 (「正常」で読み取りエラーが発生しているだけ) をシステムに戻すか、新しい ZFS ビット (削除した場合は他のビットもすべて) を搭載した新しいシステムに戻し、起動して、動作するまで順番に実行します (注意してください - これらは安全ではありません。特に最後のものは、システムを回復しようとするとロールバックして、最近書き込まれたデータが失われる可能性があります)。

  • zpool インポート -f タンク
  • zpool インポート -fF タンク
  • zpool インポート -fFX タンク

3 つすべてが失敗した場合、"単純な" リカバリの範囲外になります。Google で「不良プールのインポート」、「zdb」、「zpool import -F」、「zpool import -X」、「zpool import -T」(危険!) などを検索すると、他の人が行ったリカバリの試みに関する追加のブログや情報が見つかるかもしれませんが、その時点ですでに非常に危険で、さらにデータに損害を与える可能性があり、有料のリカバリ サービスの領域に急速に踏み込んでいます (従来のデータ リカバリ会社ではなく、ZFS に関する専門知識がまったくなく、役に立ちません)。

注: より正確で「安全な」方法は、「zpool import -o readonly=on -f -T [txg_id] tank」です。ただし、これが機能するには、まず自分で zdb を使用して、一見正常と思われる最近の txg_id を見つける必要があります。ここでそのすべてを説明するつもりはありません。ここでは Google が役に立ちます。十分な情報を読んで、自分が行っていることに多少なりとも安心できるまで、何もしないでください。単一のソースを信頼しないでください。

注 2: 最も安全な方法は、ZFS リカバリ サービスが可能な人にすぐに連絡することです。

注 3: 次に「最も安全な」方法は、ドライブを安全なシステムに配置し、各 raw ドライブ全体を新しいディスクに dd して、理論的にはディスクの同一のコピーを作成することですが、そのためには、同じ数の新しいディスクが必要になります。サイズやタイプは、古いものと同様または同一のものが望ましいですが、必ずしも必要ではありません。その後、上記のいずれかを 1 セットのドライブで試し、他のドライブは安全のために取っておきます。

関連情報