web-dev-qa-db-ja.com

zfs-ホットスペア、交換、デタッチ:リソースがビジーです

私は zfsonlinux にかなり慣れていません。 ZFS上にDebianROOTを使用して、まったく新しいサーバーをセットアップすることに成功しました。すべて正常に動作していますが、ホットスペアとディスクの交換に問題があります。

これが私のプールです:

NAME                            STATE     READ WRITE CKSUM
mpool                           ONLINE       0     0     0
  mirror-0                      ONLINE       0     0     0
    ata-ST1XXXXXXXXXXA-part1    ONLINE       0     0     0
    ata-ST1XXXXXXXXXXB-part1    ONLINE       0     0     0
  mirror-1                      ONLINE       0     0     0
    ata-ST1XXXXXXXXXXC-part1    ONLINE       0     0     0
    ata-ST1XXXXXXXXXXD-part1    ONLINE       0     0     0
spares  
  ata-ST1XXXXXXXXXXE-part1      AVAIL   
  ata-ST1XXXXXXXXXXF-part1      AVAIL  

今、私は本当の楽しみから始めることができます。ディスクプル!ディスクCのプラグを抜いています。作業プールがありますが、劣化しています(予想どおり)。

NAME                            STATE     READ WRITE CKSUM
mpool                           ONLINE       0     0     0
  mirror-0                      ONLINE       0     0     0
    ata-ST1XXXXXXXXXXA-part1    ONLINE       0     0     0
    ata-ST1XXXXXXXXXXB-part1    ONLINE       0     0     0
  mirror-1                      DEGRADED     0     0     0
    ata-ST1XXXXXXXXXXC-part1    UNAVAIL      0     0     0
    ata-ST1XXXXXXXXXXD-part1    ONLINE       0     0     0
spares  
  ata-ST1XXXXXXXXXXE-part1      AVAIL   
  ata-ST1XXXXXXXXXXF-part1      AVAIL   

ここまでは順調ですね。しかし、ディスクCをディスクEに置き換えようとすると、とにかく劣化したプールでスタックします。

# zpool replace mpool ata-ST1XXXXXXXXXXC-part1 ata-ST1XXXXXXXXXXE-part1
cannot open '/dev/disk/by-id/ata-ST1XXXXXXXXXXE-part1': Device or ressource busy
(and after a few sec)
Make sure to wait until resilver is done before rebooting.

だから私は(エラーなしで)再銀化するのを数秒待っています、そして私は持っています:

NAME                                STATE     READ WRITE CKSUM
mpool                               ONLINE       0     0     0
  mirror-0                          ONLINE       0     0     0
    ata-ST1XXXXXXXXXXA-part1        ONLINE       0     0     0
    ata-ST1XXXXXXXXXXB-part1        ONLINE       0     0     0
  mirror-1                          DEGRADED     0     0     0
    spare-0                         UNAVAIL
        ata-ST1XXXXXXXXXXC-part1    UNAVAIL      0     0     0
        ata-ST1XXXXXXXXXXE-part1    ONLINE       0     0     0
    ata-ST1XXXXXXXXXXD-part1        ONLINE       0     0     0
spares  
  ata-ST1XXXXXXXXXXE-part1          INUSE       currently in use   
  ata-ST1XXXXXXXXXXF-part1          AVAIL   

それなら私がzpool detach Cディスク(説明されているように ここ )、私のプールは再びオンラインになり、すべてが正常に機能しています(5台のHDDのみのプールで)


だからここに私の質問があります:

  1. フルプールを再構築するには、Cディスクを交換するだけでは不十分なのはなぜですか?説明したように Oracleブログで および ここでも 私はする必要がないと思っていましたzfsのディスクをデタッチして、プールを適切に再構築します(また、利便性を維持するために、プラグを抜いたディスクのzpoolステータストレースを保持することをお勧めします)。
  2. なぜzpoolはスペアディスクが「ビジー」である(本当にビジーではない)と私に言い続けるのですか?
  3. 以下を参照してください:スペアディスクを自動的に戻すにはどうすればよいですか?

EDIT:question1にとってさらに最悪=>ディスクCを接続し直すと、zfsはスペアを管理しません!だから私は1つ少ないディスクが残っています

NAME                                STATE     READ WRITE CKSUM
mpool                               ONLINE       0     0     0
  mirror-0                          ONLINE       0     0     0
    ata-ST1XXXXXXXXXXA-part1        ONLINE       0     0     0
    ata-ST1XXXXXXXXXXB-part1        ONLINE       0     0     0
  mirror-1                          ONLINE       0     0     0
    ata-ST1XXXXXXXXXXE-part1        ONLINE       0     0     0
    ata-ST1XXXXXXXXXXD-part1        ONLINE       0     0     0
spares  
  ata-ST1XXXXXXXXXXF-part1          AVAIL 
5
4wk_

短縮版:

逆の方法で行う必要があります。障害が発生したプールディスクを(新しいディスクまたはそれ自体で)交換し、その後、スペアディスクをプールから切り離します(すべてのvdevで使用できるようにします)。交換に使用したディスク自体が交換されない限り、スペアはビジーであると思います。このディスクまたは別のディスクを取り外すと、状況が悪化するだけです。

また、ZoLにはイベントに応じたスペアの自動アタッチ/デタッチがないことを覚えています。独自のスクリプトを作成するか、 ZFSイベントデーモン のようなものを使用する必要があります。


ロングバージョン:

フォローアップコメントについて

Cディスクに障害が発生した場合は、交換してから取り外します。しかし、zpoolは私がミラーにCディスクを持っていたことを覚えていなかったので、それは私のプールをかき集めます-1:/

それはあなたがそれをどのように見るかに依存します。ミラーからディスクを切り離すと、それはもう関係ありません。欠陥がある可能性があり、別のシステムで使用される可能性があり、メーカー保証の下で交換される可能性があります。それが何であれ、あなたのプールは気にしません。

ディスクを取り外すだけでは、劣化します。代わりに(自動スペア、手動スペア、または完全手動交換から)別のディスクを提供すると、このディスクは古いディスクの役割を引き受けます(したがって、用語replace、新しいディスクはその中の古いディスクを完全に置き換えますポジションとその義務)。

必要に応じて、たとえばスペアとして、切り離されたディスクをプールに戻すことができます(したがって、最初の状況は逆になります)。

ZFSシステムでのスペアの動作

スペアは、自動アクティベーションでのみ実際に意味があります。 Sunによって設計されたZFSストレージアレイには多くの同様のディスクがあり、18〜48個のディスクが珍しくありませんでした。それらは複数のvdevで構成されていました。たとえば、24ディスクシステム用の4 x RAIDZ2です。さらに、それらは専任の管理者によって管理されていましたが、24時間年中無休で作業することはできません。したがって、最初の応答として何かが必要であり、どのディスクでもいつでも障害が発生する可能性があるため、すべてのvdevで機能する必要がありました。

したがって、深夜に2番目のvdevのディスクに障害が発生した場合、システムは2つの構成済みスペアのいずれかを自動的に取得し、障害が発生したディスクを交換して、プールが通常どおり機能するようにします(データベースが実行されているWebサイトを使用する顧客の場合と同じパフォーマンス) 、 例えば)。午前中に、管理者は障害のレポートを読み、原因のトラブルシューティングを行います。

  • ディスクが故障した場合、彼は同じトレイ内の交換用ディスクと交換し、再シルバー化すると、ホットスペアは自動的に予備のデューティに戻され、最初の応答を実行できる別のデッドディスクを監視します。
  • 交換用ディスクが利用できない場合は、スペアを新しいデータディスクにして、スペアの数を一時的に1つ減らすこともできます(新しいスペアとなる別の交換用ディスクが出荷されるまで)。
  • コントローラがディスクをドロップするだけのエラーである場合、彼はそれをそれ自体と交換し、最初の場合と同じスペアの更新をトリガーする可能性があります。

エンジニアが最も一般的な予想される使用シナリオのために設計した方法でそれを考えると、それははるかに理にかなっています。これは、説明どおりに実行する必要があるという意味ではなく、動作の理由である可能性があります。

あなたの質問への回答

フルプールを再構築するには、Cディスクを交換するだけでは不十分なのはなぜですか? Oracleブログとここでも説明されているように、プールを適切に再構築するためにzfsのディスクを切り離す必要はないと予想していました(そして、利便性を維持するために、プラグを抜いたディスクのzpoolステータストレースを保持する方がはるかに優れています)

上記のように、プールディスクを別のディスクまたはそれ自体と交換するか(スペアは無料でスペアとして機能し続けます)、プールディスクを切り離すことができますが、スペアは永続的にプールディスクの役割を引き受けます。 zpool add poolname spare disknameを使用して手動で別のスペアを追加する必要があります(これは、切り離されたディスクまたは新しいディスクの場合があります)。

なぜzpoolはスペアディスクが「ビジー」である(本当にビジーではない)と私に言い続けるのですか?

卓越したIOのせいだと思います。それは、操作を完了するのに少し時間がかかった理由を説明します。

以下を参照してください:スペアディスクを自動的に戻すにはどうすればよいですか?

  • 自動スペア交換を有効にします(Solaris/illumosではデフォルト、Linuxでは少し面倒です)
  • 障害が発生したプールディスクを(デタッチする代わりに)zpool replaceに置き換えます。デタッチ手順は、プールディスクの交換後、自動管理がない場合にのみスペアディスクに必要です(特定のプールレイアウトと管理状況を除いて、私の目には意味がありません)。
3
user121391