web-dev-qa-db-ja.com

ZFSresilverがプール全体をスキャンするのはなぜですか?

故障したディスクを交換したばかりの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が使用済みのすべてのディスクスペースをスキャンするのはなぜですか?

5
Jasmine Lognnes

再シルバー化はvdev操作です。そのvdev内のストレージデバイスのみが新しいデバイスの再構築に使用されることを示唆したように。なぜzpoolのフルサイズを引用するのかはわかりませんが、開発者がスクラブ関数からコードを借用したか、最悪のシナリオであるため、単にフルサイズを引用しているのではないかと思います。

4
Chris S