TrueNAS 25.10.1 定期スクラブの設定

TrueNAS は ZFS のスクラブ(Scrub)を定期的に実行する設定があります。

スクラブとは
Scrub(スクラブ) は、ZFSのストレージプール内に保存されているすべてのデータとメタデータを読み出して検証し、データの整合性(チェックサム)を確認する作業です。
ZFSは書き込み時にデータとチェックサムを記録し、読み出し時にチェックサムを検証しますが、Scrubはそれをプール全体に対して強制的に実行します。
従来のファイルシステムにおけるfsck(ファイルシステムチェック)とは異なり、ファイルシステムがオンライン(稼働中)の状態で実行できるのが最大の特徴です。

ZFS Scrubの主な機能と役割
ZFS Scrubは、主に**静的データ破損(Silent Data Corruption / Bit Rot)**を検知し、修正するために使用されます。

全データの検証: 単にファイルシステムの構造(メタデータ)だけでなく、ディスクに書き込まれているすべてのデータブロックを読み取ります。

チェックサムによる照合: ZFSはMerkle Tree(ハッシュ木)構造を持っており、親ブロックが子ブロックのチェックサム(ハッシュ値)を保持しています。Scrubはデータを読み出し、その場で計算したチェックサムと、記録されている期待値を比較します。

自動修復(Self-Healing): ミラーリング(RAID 1相当)やRAID-Zなどの冗長構成が取られている場合、破損データ(チェックサム不一致)が見つかると、ZFSは自動的に正しいデータを冗長側から取得し、破損したデータを上書きして修復します。

ZFSではデータの読み出し時に自動的に整合性を確認しますが、それだけだと、長期間アクセスのない場所はサイレントに破損が進行してしまう可能性があります。それを避けるために全領域を読み込んで検査して、必要なら修復を行う機能、というわけです。なお、この処理には、データのある全領域の読み込みが発生しますので、それなりのディスクアクセス、I/Oが発生します。また、この処理により潜在的なディスクの不具合が顕在化する可能性も考えられます。

(参考)
Oracle Solaris ZFS 管理ガイド ZFS ファイルシステムの整合性をチェックする
zpool-scrub.8

Running a Pool Data Integrity Check (Scrub)

25.10 でメニューが再編されて、


scrub_25101_01.png

Storage

Storage Health
の右上の
「Scrub Now」(今すぐスクラブを実行)

その下の
Scheduled Scrub:
に位置しています。


Scrub Now
をクリックすると、


scrub_25101_02.png

確認ダイアログが出て、見たまま即Scrubを実行することができます。

また、
Scheduled Scrub:
の右の
Configure
をクリックすると、


scrub_25101_03.png

Scheduled Scrub (スケジュールされたスクラブ)の設定を確認できます。
初期インストール状態で、
Schedule (スケジュール)
毎週日曜日の0:00 ( AM12:00 )
Threshold Days (しきい値日数)
35
が設定されています。

スケジュールの設定で、毎週日曜日に実行しようとし、そのときに前回の実行から35日経過していたら実行する、ということで、大体月1回よりすこし長いくらいの間隔(35÷7で5週間)ということ。


scrub_25101_04.png

Help: Threshold Days
Days before a completed scrub is allowed to run again. This controls the task schedule. For example, scheduling a scrub to run daily and setting Threshold days to 7 means the scrub attempts to run daily. When the scrub is successful, it continues to check daily but does not run again until seven days have elapsed. Using a multiple of seven ensures the scrub always occurs on the same weekday.
ヘルプ: しきい値日数
完了したスクラブの再実行が許可される日数。これにより、タスクのスケジュールが制御されます。たとえば、スクラブを毎日実行するようにスケジュールし、しきい値の日数 を7に設定すると、スクラブは毎日実行しようとします。スクラブが成功すると、毎日チェックが続行されますが、7日が経過するまで再度実行されません。 7の倍数を使用することで、常に同じ曜日にスクラブが行われます。

以前のバージョンと設定値自体に変化はないので、
特に変わったポリシーがなければこの設定のままでいいのではないかと思います。
※実際にデイスクのデータのある全領域から読み込みを行いますので、日曜日の夜だとハードディスクのシーク音で睡眠が妨げられる場合は出社後の月曜10:00とかに調整してもいいかもしれません。
あとは何か特別な事情だと思いますので一旦割愛。

定期的に実行することで、ZFSのセルフヒーリングが全域に適用されて、サイレントなデータ破損を防ぎ、ディスクの劣化も検知できると思います。

なお、

「非ECCメモリ環境でZFS Scrubを行うと、メモリ化けしたデータをディスクに書き込むことで、逆に正常なデータを破壊してディスク全体を破壊してしまう(Scrub of Death)」

という言説がありますが、

「メモリ上でデータが化けた結果、ZFSが『ディスク上のデータが壊れている』と誤判断し、誤ったデータで上書きしてしまう」

ためには、以下の厳しい条件をクリアする必要があります。

データの読み出し: ディスクからブロックAを読み出す。
不整合の検知: メモリ上で計算したチェックサムが合わない(ここでメモリ不良の影響を受ける可能性がある)。
冗長データの確認: ミラーやRAID-Zの別のディスクからブロックB(冗長データ)を読み出す。
正解の確定: ブロックBのチェックサムを計算し、「正しい」と確認できた場合のみ、ブロックAをブロックBで上書きして修復する。

ここが重要です: メモリが不良(ランダムにビットが反転する状態)である場合、ステップ4の「冗長データの検証」も失敗する確率が極めて高いです。ZFSは「正しいデータ(チェックサムが一致するデータ)」をメモリ上で確保できない限り、ディスクへの書き戻し(修復)を行いません。

そのため、非ECCメモリ環境でScrub中にメモリのビット反転が発生したとしても、ビット反転を受けたデータが「続々と」書き込まれてファイルシステムが全滅するようなシナリオは現実的ではありません。


ZFSの共同創設者であり、現在もOpenZFSの主要開発者である Matthew Ahrens 氏は、この件について明確に回答しています。

Matthew Ahrens氏の見解(要約): 「ECCメモリはあるに越したことはないが、ZFSにとって必須要件ではない。『非ECCメモリだとZFSは他のファイルシステムより危険』というのは誤りだ。 メモリが壊れていれば、ZFSは(誤った修復をするのではなく)チェックサムエラーを検知するか、パニックを起こして停止する可能性が高い。これは、静かに壊れたデータを書き込み続ける従来のファイルシステムよりも安全である。」

Ars Technica OpenForum - "ZFS vs... others"

BSD Now Tutorial - ZFS and ECC RAM

ディスクの負荷はありますが基本的に読み出しですので、知らないうちにディスク上のデータが破損しているリスクに比べれば定期的な健康診断としてはある程度許容すべきと思います。
(スクラブを実行するとディスクがエラーを起こす、ではなく、スクラブがディスクにすでに発生しているエラーを検出する、です。いずれにせよ、スクラブでエラーが発生するようなディスクは寿命です)

磁気記録面の経年劣化により、データの中身が静かに変化してしまっていて(Bit Rot)、ずっと後でいざ読み込もうとしたときに読めないよりかは遥かにマシと思います。

そのほかのTrueNASのデータ保護のための設定
TrueNAS 25.10.1 のデータ保護のための設定

コメントは無効になっていますので、何かありましたらフォームかTwitter(X)で。

About

2025年12月28日 18:38に投稿されたエントリーのページです。

ひとつ前の投稿は「TrueNAS 25.10.1 のメール設定」です。

次の投稿は「keepLiNK 16ポート 2.5G スイッチングハブを買ってみた」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35