Vmに休眠中のZFSテストプールを設定しています。
NAME STATE READ WRITE CKSUM
pool DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
spares
sdd AVAIL
Zfsプールで自動的に使用できなくなったドライブを交換する機能をテストしようとしています。たとえば、何らかの理由でドライブがシステムから取り外された場合、ドライブが取り外された直後にスペアダイビングが行われる可能性があります。 spare
ドライブを構成しました。これを読んだところ、これで目標が達成されるはずだと理解できました。また、autoreplace
フラグをon
に設定して、不良ドライブが検出された場合はそれを交換するようにzfsに指示しました。 vmからドライブを削除するときは、sdb
と言って、休眠中のように見えるzfsのステータスを再確認します。
NAME STATE READ WRITE CKSUM
pool DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
sdb UNAVAIL 0 0 0
sdc ONLINE 0 0 0
spares
sdd AVAIL
sdb
デバイスは使用できなくなりますが、スペアに置き換えられることはありません。ユースケースを機能させる方法はありますか?
まず第一に、Ubuntu 16.04で同じ問題を抱えている人にとって、それは現在進行中のバグであり、私の知る限り、現時点では修正されていません。 githubの会話 ここ にアクセスして、私が参照しているバグを確認できます。第二に、私はこの投稿を熱狂的で中級のLinuxユーザーとして書いています。私は開発者ではないか、現在Linuxで職業として働いています。そうは言っても、私はこの問題に関して私が見つけた情報を私の知る限り提供します。
zfsonlinux
パッケージに組み込まれているホットスペア機能は、現在、マニュアルページに記載されているように機能しません。 zpool
のマニュアルページ:
Hot Spares
ZFS allows devices to be associated with pools as "hot spares".
These devices are not actively used in the pool, but when an active
device fails, it is automatically replaced by a hot spare.
注:コールドスペア(スペアは自動的に交換されません)機能は機能しますが、mirrors
またはraidz's
のいずれかで構成される構成でのみ機能します。休閑のような構成がある場合:
NAME STATE READ WRITE CKSUM
pool ONLINE 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
spares
sdd AVAIL
ドライブに障害が発生すると、pool I/O is currently suspended
エラーのため、ドライブをスペアと交換できなくなります。
これは私が経験した解決策のリストであり、結果は次のとおりです。
ZFS自動置換:zpool
のマニュアルページと私の理解によると、autoreplace
機能は、損傷したドライブをスペアと交換するのではなく、損傷したドライブを交換することです。その場所で見つかった新しいデバイスでそれ自体。 zpool
のマニュアルページ:
If set to "on", any new device, found in the same physical location
as a device that previously belonged to the pool, is automatically
formatted and replaced.
autoreplace
を使用するのは良いことですが、ホットスペアの機能を実現するために必要だとは思いません。スペアを動作させることができなかったため、manページ以外では確認できません。
ZED.rc:後で github の会話の中で、ZED_SPARE_ON_CHECKSUM_ERRORS
フラグとZED_SPARE_ON_IO_ERRORS
フラグをzed.rc
内に設定する必要があることがわかりました。 @ user121391がこの投稿への回答で述べたように、zedサービス/デーモンは、プールのステータスを決定し、それに基づいて実行する必要があるものです。その状態で。 zpool events
を実行すると、zed.dが動作していることがわかります。 Linux上のzed.dの詳細 ここ 。フラグを設定し、再起動し、万が一に備えて新しいプールを再構成した後、ホットスペアのテストが再びネガティブになりました。
ZED.dスクリプト:@MichaelKjörlingのコメントで、ホットスペアシナリオを支援するために作成されたZEDにパッケージ化されたスクリプトについて言及しました。私は確かに/etc/zfs/zed.d
にあるスクリプトを見つけました。これらのスクリプトは、githubページ ここ で表示できます。 zed.dの私の理解から、イベントがトリガーされると、ZEDデーモンはそのステータスに基づいてこれらのスクリプトの1つを実行します。とはいえ、io-spare.sh
とchecksum-spare.sh
を手動で実行しようとしましたが、実行にかかった時間とプールのステータスが変更されていないことから判断すると、正しく実行されていないようです。多分これは問題の潜在的な原因です。
ZFSのUbuntu16.04ユーザーの場合、私の知る限り、現在この問題に対する修正はないようです。テストで得られるパフォーマンスに応じて、mirrored
またはraidz
(RAID5)の構成でZFSを引き続き使用する予定です(ミラーリングはより高速になりますが、の速度を確認したいraidz
)ホットスペアは、これら両方の構成の冗長性を高めますが、残念ながら、zfsonlinux
プロジェクトがさらに開発されるまで待つ必要があります。
クイック検索では、 following :が生成されます。
[Open] Solarisでは、これはイベントデーモンによって処理されます。自動置換のオン/オフは、デーモンに置換を行うかどうかを指示するだけです。 FreeBSDでは、自動置換設定はデフォルトでは何もしません。実際の置換のトリガーを処理するdevdルールを作成する必要があります。 Linuxが何をするのかはわかりませんが、systemdに追加できると確信しています
ZoLでは、ZFSイベントデーモンである [〜#〜] zed [〜#〜] も使用できるようです。