My FreeNAS box ran out of room, as these things do, and I didn't fancy rebuilding the pool from backups to get bigger disks in. ZFS lets you grow a mirror by replacing each disk in turn with a larger one, and once the last small disk is gone the pool quietly expands to fill the new space. No downtime, no restore, just patience.
The dance goes like this. Pull one disk from the mirror, put a larger one in its place, and tell ZFS to replace it:
zpool replace tank gptid/old-disk gptid/new-disk
ZFS resilvers, copying everything onto the new disk and bringing it into the mirror. On spinning rust full of media that took most of a day per disk, so this is not a one-evening job. You wait for zpool status to report the resilver complete and the pool healthy, then and only then do you touch the next disk.
That waiting is the whole point. During a resilver your redundancy is reduced, and if you yank the next disk before the first one has finished you're a single failure away from a very bad day. So I did it one disk at a time, checking zpool status obsessively between each, like a man defusing something.
A few disks and a couple of days later, the last old drive came out, and the pool grew on its own. The data never went offline once. Slower than a clean rebuild, certainly, but I never had to trust a backup to be complete, which is its own kind of comfort.