故障したディスクを交換したばかりのzpoolがあり、新しいディスクへの再シルバーリングを開始しました。
私が理解していないのは、vdevのサイズが約30TBのときに、なぜzpool status
が129TBをスキャンしたいと言うのかということです。 iostat -nx 1
を見ると、vdev内の5つのディスクが大量の読み取りを取得しており、新しいディスクが大量の書き込みと同等であることがわかります。そのため、zfsはすべてのデータをスキャンするわけではありません。
# zpool status tank3 |head
pool: tank3
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Thu Apr 30 09:59:15 2015
61.2T scanned out of 129T at 3.03G/s, 6h23m to go
946G resilvered, 47.34% done
質問
各vdevは互いに独立しているため、1つのresilverで他のvdevをスキャンする必要はありません。再シルバーリング時にzfsが使用済みのすべてのディスクスペースをスキャンするのはなぜですか?
再シルバー化はvdev操作です。そのvdev内のストレージデバイスのみが新しいデバイスの再構築に使用されることを示唆したように。なぜzpoolのフルサイズを引用するのかはわかりませんが、開発者がスクラブ関数からコードを借用したか、最悪のシナリオであるため、単にフルサイズを引用しているのではないかと思います。