web-dev-qa-db-ja.com

ZFSスクラブはチェックサムエラーを検出しますが、badblocksとsmartctlは検出しません

2つのドライブをミラーとして持つZFSプールを構成しました。オペレーティングシステムはUbuntu16.04で、ベンダーがパッケージ化したzfs0.6.5を使用しています。ドライブは3TWDGreenと3TWD Red(おそらくパフォーマンスには最適ではありませんが、これは考慮事項ではありません)であり、バイトとセクターのサイズは同じです。私はパーティションを使用していませんが、zpool createはいつものように各ドライブに2つ作成しました。デフォルトでは、OSは月に1回プールでスクラブを実行し、手動で数回スクラブを実行しました。

スクラブプロセスでWDRedドライブのチェックサムエラーが数回検出されましたが、すべての実行で検出されたわけではありません。それらは自動的に修復されており、私の知る限り問題は発生していません。 CKSUM列に表示されている数値は、3、5、および9を示しており、今後のUbuntu18.04およびZFS0.7.5への最近のアップグレード後、31も示しています(メッセージを正しく覚えている場合は、「エラーが多すぎます」という追加情報があります) )。

心配して、私はドライブをプールから切り離し、プールをエクスポートしました。ドライブをインポートせずに、ドライブでbadblocks -b 4096 -s -v -wを実行しましたが、(0/0/0)エラーが報告されました。また、私が正しく理解していれば、smartctl -a /dev/sdaは異常なことは何も示していません(| grep -i error):

  1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002e   200   200   000    Old_age   Always       -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0008   100   253   000    Old_age   Offline      -       0

ディスクをプールに再接続しましたが、現在再シルバー化中です。しかし、私は謎のままです。繰り返し発生するスクラブエラーの原因は何でしょうか。問題が何であるかをよりよく理解するために、またはそれを完全に回避するために、私は将来何をすべきですか?特にWDRedは2016年にのみ製造されているため、交換用ドライブの購入については特に検討したくありません。

(これが関連するかどうかはわかりませんが、ある時点で、オペレーターのエラーまたはソフトウェアのバグにより、問題のないWD Greenドライブパーティションテーブルが破損しました。デタッチする以外に、プールに戻すアクションが見つかりませんでした。再シルバーリングプロセス中に、一部のブロックがWD Redドライブから読み取れず、影響を受けた1つのファイルをバックアップから復元しました。スクラブにより、このインシデントの前後の両方でチェックサムエラーが検出されました。)

1
taneli

チェックサムの失敗はファイルシステムとは独立して発生するため、チェックサムの失敗の原因を簡単に特定する方法はありません(FS自体のバグが原因である場合を除きますが、それはそうではないと思います)ここで何が起こっているのか)smartctlbadblocksの成功は、問題が障害のあるディスクではないことを期待しています。

これは、エラーを理解するのに役立つことを目的としたページです: http://illumos.org/msg/ZFS-8000-9P 。それからの引用:

For example, the following cases will all produce errors that do not 
indicate potential device failure:

- A network attached device lost connectivity but has now recovered
- A device suffered from a bit flip, an expected event over long
  periods of time
- An administrator accidentally wrote over a portion of the disk
  using another program

この時点で、ドライブへの接続を確認し、resilverを実行することが正しい方法だと思います。

1
Dan