私は 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のみのプールで)
だからここに私の質問があります:
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
逆の方法で行う必要があります。障害が発生したプールディスクを(新しいディスクまたはそれ自体で)交換し、その後、スペアディスクをプールから切り離します(すべてのvdevで使用できるようにします)。交換に使用したディスク自体が交換されない限り、スペアはビジーであると思います。このディスクまたは別のディスクを取り外すと、状況が悪化するだけです。
また、ZoLにはイベントに応じたスペアの自動アタッチ/デタッチがないことを覚えています。独自のスクリプトを作成するか、 ZFSイベントデーモン のようなものを使用する必要があります。
Cディスクに障害が発生した場合は、交換してから取り外します。しかし、zpoolは私がミラーにCディスクを持っていたことを覚えていなかったので、それは私のプールをかき集めます-1:/
それはあなたがそれをどのように見るかに依存します。ミラーからディスクを切り離すと、それはもう関係ありません。欠陥がある可能性があり、別のシステムで使用される可能性があり、メーカー保証の下で交換される可能性があります。それが何であれ、あなたのプールは気にしません。
ディスクを取り外すだけでは、劣化します。代わりに(自動スペア、手動スペア、または完全手動交換から)別のディスクを提供すると、このディスクは古いディスクの役割を引き受けます(したがって、用語replace
、新しいディスクはその中の古いディスクを完全に置き換えますポジションとその義務)。
必要に応じて、たとえばスペアとして、切り離されたディスクをプールに戻すことができます(したがって、最初の状況は逆になります)。
スペアは、自動アクティベーションでのみ実際に意味があります。 Sunによって設計されたZFSストレージアレイには多くの同様のディスクがあり、18〜48個のディスクが珍しくありませんでした。それらは複数のvdevで構成されていました。たとえば、24ディスクシステム用の4 x RAIDZ2です。さらに、それらは専任の管理者によって管理されていましたが、24時間年中無休で作業することはできません。したがって、最初の応答として何かが必要であり、どのディスクでもいつでも障害が発生する可能性があるため、すべてのvdevで機能する必要がありました。
したがって、深夜に2番目のvdevのディスクに障害が発生した場合、システムは2つの構成済みスペアのいずれかを自動的に取得し、障害が発生したディスクを交換して、プールが通常どおり機能するようにします(データベースが実行されているWebサイトを使用する顧客の場合と同じパフォーマンス) 、 例えば)。午前中に、管理者は障害のレポートを読み、原因のトラブルシューティングを行います。
エンジニアが最も一般的な予想される使用シナリオのために設計した方法でそれを考えると、それははるかに理にかなっています。これは、説明どおりに実行する必要があるという意味ではなく、動作の理由である可能性があります。
フルプールを再構築するには、Cディスクを交換するだけでは不十分なのはなぜですか? Oracleブログとここでも説明されているように、プールを適切に再構築するためにzfsのディスクを切り離す必要はないと予想していました(そして、利便性を維持するために、プラグを抜いたディスクのzpoolステータストレースを保持する方がはるかに優れています)
上記のように、プールディスクを別のディスクまたはそれ自体と交換するか(スペアは無料でスペアとして機能し続けます)、プールディスクを切り離すことができますが、スペアは永続的にプールディスクの役割を引き受けます。 zpool add poolname spare diskname
を使用して手動で別のスペアを追加する必要があります(これは、切り離されたディスクまたは新しいディスクの場合があります)。
なぜzpoolはスペアディスクが「ビジー」である(本当にビジーではない)と私に言い続けるのですか?
卓越したIOのせいだと思います。それは、操作を完了するのに少し時間がかかった理由を説明します。
以下を参照してください:スペアディスクを自動的に戻すにはどうすればよいですか?
zpool replace
に置き換えます。デタッチ手順は、プールディスクの交換後、自動管理がない場合にのみスペアディスクに必要です(特定のプールレイアウトと管理状況を除いて、私の目には意味がありません)。