The NAS was getting full and I wanted bigger drives, but I didn't want to rebuild the pool from scratch and restore everything from backup. ZFS has a nicer trick for a mirror: swap the disks one at a time, resilver after each, and the pool grows to the new size once the last small disk is gone. No downtime, no restore, just patience.
The procedure on TrueNAS is mercifully dull. Offline one disk, physically pull it, slot the new larger one in, and tell the pool to replace. Then you wait for the resilver, which copies the data onto the new disk and verifies it. On my pool each pass took the better part of a day, which is fine, because the array stays online and serving the whole time.
zpool status tank
zpool replace tank /dev/old /dev/new
The part that actually requires nerve is that for the duration of each resilver you are running with reduced redundancy. Pull one disk from a two-way mirror and you have no redundancy at all until the new one finishes. If the remaining disk picks that exact window to fail, you're restoring from backup after all. So I did the obvious thing and confirmed my backups were current before I touched anything, then resisted the strong temptation to start the second swap before the first had fully settled.
By the time the last small disk was out, the pool quietly reported its new, larger size with no further intervention. ZFS doesn't make a fuss about this kind of thing, which is exactly what you want from the layer holding all your data. Boring is the highest compliment I can pay a storage system.