This role installs ZFS on Linux and configures filesystems and ZVOLs.
nfs-kernel-server
will be installed if a configured filesystem makes use of the sharenfs
attribute.
NFS exports will be permanently configured in /etc/exports.d/zfs-storage-ansible.exports
if zfs_save_nfs_exports
is set accordingly.
The ZFS PPAs from JonathanF are used to install the latest ZFS release.
One of the following distribution releases:
- Debian stretch or buster
- Ubuntu xenial, bionic, cosmic or devel
systemd
is required in order to scrub pools using timers instead of distribution-specific cron jobs.
python-jmespath
is needed on the machine executing this role to correctly determine the need for NFS.
Name | Default / Mandatory | Description |
---|---|---|
zfs_parent_fs |
Existing parent ZFS filesystem for all filesystems and zvols that is optionally prepended to all configurations | |
zfs_storage_defaults |
{} |
Dict containing ZFS attributes that will be applied to all configured ZFS filesystems/zvols |
zfs_filesystems |
[] |
List of zfs_filesystems defined by a name and a dict of attributes (mandatory for each entry) |
zfs_zpools |
[] |
List of dicts having a name (mandatory) and scrub (optional) key. scrub is a boolean and can disable scrubbing for this pool. |
zvols |
[] |
List of zvols defined by a name and a dict of attributes (mandatory for each entry) |
zfs_default_enable_scrub |
True |
Whether to enable zpool scrubbing by default |
zfs_scrub_frequency |
weekly |
Frequency of zfs scrubbing - already running scrubs will be aborted. See systemd.time for allowed values. |
zfs_kernel_module_parameters |
{} |
Dict containing ZFS kernel module options to be set in /etc/modprobe.d/zfs.conf . |
zfs_storage_drive_wwids |
[] |
List of WWID strings of blockdevices in the pool. UDEV rules will be written to set the IO scheduler to noop for those devices. This is needed for partitioned or encrypted devices as ZFS only sets the scheduler to noop if it gets ahold of the whole drive. |
zfs_save_nfs_exports |
True |
Whether to save and delete (if not needed) a NFS export file for consistent exports across reboots. |
Note: There are some ZFS attributes that can only be set at creation (see man zfs).
These are utf8only
, normalization
and casesensitivity
for filesystems and volsize
and volblocksize
for ZVOLs.
The respective task will fail if you try to change those.
Also, volsize
is a mandatory attribute for ZVOLs.
If an attribute is not defined, the ZFS default will be configured (even if the attribute is already set to something else), except for these four attributes:
acltype
=posixacl
compression
=on
relatime
=on
xattr
=sa
All default values for ZFS attributes can be seen in the defaults.
In addition to the actual ZFS attributes described in the man page, this role sets attributes to control automatic snapshotting using tools such as zfs-auto-snapshot.
This is achieved using the following variables, which are all set to False
by default:
ZFS attribute | Variable name in this role | Description |
---|---|---|
com.sun:auto-snapshot |
com_sun_auto_snapshot |
Enable automatic snapshotting and cleaning (destroying) of snapshots using all available intervals for the current dataset (basically acts as if all the following attributes are set to True ). |
com.sun:auto-snapshot:frequent |
com_sun_auto_snapshot_frequent |
Enable snapshotting and cleaning in 15min intervals. |
com.sun:auto-snapshot:hourly |
com_sun_auto_snapshot_hourly |
Enable snapshotting and cleaning in hourly intervals. |
com.sun:auto-snapshot:daily |
com_sun_auto_snapshot_daily |
Enable snapshotting and cleaning in daily intervals. |
com.sun:auto-snapshot:weekly |
com_sun_auto_snapshot_weekly |
Enable snapshotting and cleaning in weekly intervals. |
com.sun:auto-snapshot:monthly |
com_sun_auto_snapshot_monthly |
Enable snapshotting and cleaning in monthly intervals. |
- hosts: zfsstorage
roles:
- role: zfs-storage
zfs_parent_fs: tank
zfs_zpools:
- name: rpool
scrub: False
- name: tank
scrub: False
zfs_scrub_frequency: monthly
zfs_kernel_module_parameters:
zfs_arc_max: 30064771072 # Allow ARC to grow to 30GB
zfs_storage_defaults:
acltype: posixacl
volsize: 50G
quota: 50G
zfs_filesystems:
- name: testing
attributes:
quota: 200G
- name: testing/wiki
attributes:
sharenfs: [email protected]
compression: off
zvols:
- name: testing/dns01
attributes:
volsize: 100G
- name: testing/ldap01
attributes:
Name | Type | Attributes |
---|---|---|
tank/testing |
filesystem | acltype =posixacl , quota =200G |
tank/testing/wiki |
filesystem | acltype =posixacl , sharenfs =[email protected] , compression =off , quota =50G |
tank/testing/dns01 |
zvol | volsize =100G |
tank/testing/ldap01 |
zvol | volsize =50G |
rpool
won't be scrubbed, tank
will be scrubbed monthly
.
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.