In ZFS, volumes are the flip side of the coin from a dataset.
Like a dataset, a volume is a child of the parent pool. But that is where the similarity ends.
On creation, the volume is given a specific size, and ZFS creates a virtual disk device with an equal size.
You might be asking, “Why would you need to do that?” And that is a fair question.
The most common uses for ZFS volumes are:
- Export via iscsi (for diskless workstations, virtual machines, and the like)
- Swap (the merits of this are debatable, but some people do it to try to prevent out-of-memory events)
- Uses similar to .iso files, and the like
As an example: Assume a volume “grindstone/iSCSI1” (exists on the pool grindstone as iSCSI1), the virtual block device would exist in /dev/zvol/grindstone/iSCSI1 and if exporting via iSCSI, that device is what you would export.
Like datasets, volumes can be fine-tuned by configuring them using their variables.
Back to ZFS