There are many tutorials out there for using ZFS tools zpool and zfs, so I’ll just summarize some points below.

Instead of partitioning a disk to several filesystems, in ZFS, there is a concept of a “storage pool” of devices, where filesystems are created in that pool.  Consequently, zpool is used to manage the storage pool whereas zfs is used to manage filesystems in a given pool.

One would start off with zpool create pool_name devicea deviceb to create a storage pool called “pool_name” using devices named “devicea”, “deviceb”, etc. What is nice about ZFS is that “devicex” could be a disk, a partition, or even a file (hence, LUKS also works, too). If you want to mirror disks, use mirror right after the create command. If you want the pool always mounted in a certain directory, use -m mountpoint argument.

Once storage pools are created, use zpool status to check whether or not there are any errors, and use zpool iostat I/O statistics. To take a pool offline, use zpool export pool_name — this is handy, for example, if you use ZFS on external drives. To bring it online, use zpool import pool_name. (I know I’m misusing ZFS terminology here since online/offline are options to activate or deactivate devices…)

“Scrubbing” is a process of checksumming the data on disk, and it is performed with zpool scrub pool_name. Unlike most other filesystems, ZFS stores a checksum for each piece of data, so there is no worry over bit rot. Scrubbing can take a loooong time, so use zpool scrub -s pool_name to stop the process, if needed. zpool status will show you any scrubbing taking place as well as a rough estimate of how long it will take to complete.

There are other options, so use man zpool for details.