Why does a ZFS resilver scan the entire pool?

Resilvering is a vdev operation; as you implied only the storage devices in that vdev are used to rebuild the new device. I'm not sure why it quotes the full size of the zpool, but I suspect the developers borrowed code from the scrub functions, or that it simply quotes the full zpool size as that would be the worst case scenario.


Resilvering (and scrubbing) involves walking the entire B-Tree of the pool, and re-silvering blocks that would have been on the missing disk.

Without walking through every single txg in the tree, it cannot know which blocks would have been on the missing disk, hence it scans the entire metadata universe for the pool.

It doesn't necessarily read all the data, only sufficient metadata to determine whether it actually needs to read the corresponding data or not. You'll probably see the progress info go up faster than the actual amount of data being read, as it's really counting the amount of data referred to by the metadata it has read.