Michael Biebl wrote:
> I never used ZFS, so I basically have zero knowledge how it is supposed to
> work.
Here is a rough summary, I hope this helps!
ZFS glossary:
* a "vdev" is an underlying physical disks/partitions (e.g. /dev/sda)
* a "pool" is made of 1 or more vdevs (e.g. "morpheus")
* a "dataset" is a logical volume/filesystem inside the pool (e.g.
"morpheus/home/alice")
* a "zvol" or "volume" is a dataset that stores blocks (used for e.g. VMs)
* a "zfs" or "filesystem" is a dataset that stores files
* a "property" is a key/value pair associated with a dataset (e.g.
"compression=lz4").
NFS integration background:
* ZFS properties can (optionally) replace /etc/fstab, /etc/exports,
/etc/smb.conf.
* If you do
zfs set mountpoint=/home morpheus/home
zfs set sharenfs=on morpheus/home
that is roughly like
morpheus/home /home zfs defaults # in fstab
/home *(rw) # in exports
* USUALLY that is all you need.
ZFS calls mount/umount/exportfs/... automatically when appropriate,
so the running system matches the ZFS properties.
* You can call "zfs unshare" to manually stop NFS/SMB shares configured via
ZFS properties.
* You can call "zfs share" to manually start NFS/SMB shares configured via ZFS
properties.
Postscript:
* Properties are recursive, so if you have ZFS datasets like
morpheus/home
morpheus/home/alice
morpheus/home/bob
If you "zfs set sharenfs=on morpheus/home", alice & bob are implicitly also
shared.
For NFS, this means things Just Work without needing no_subtree_check or a
lot of repetition in /etc/exports.
* The sharenfs= property can be more complicated than "on".
The notation follows Solaris, not Linux.
For example,
zfs set sharenfs=sec=sys,ro,rw=example.com,rw=example.net,all_squash
morpheus/home
means something like
/home *(ro,sec=sys,all_squash)
/home example.com(rw,sec=sys,all_squash)
/home example.net(rw,sec=sys,all_squash)