2.3 KiB
ZFS
Ansible community support for ZFS is limited to create filesystems, volumes and snapshots. There is no support for managing zpools, so here it is.
Inventory
Here is an example inventory file you can use with this role:
zfs_pools:
- name: peace
type: raidz1
devices:
- ata-SOME-DISK-LABEL-1
- ata-SOME-DISK-LABEL-2
options:
ashift: 12
root: /mnt/peace
state: present
And you will get raid1 zpool peace with two disks, with 12 ashift.
You can use a variety of options, see the zpoolprops(7) man page.
And for your zfs filesystems:
zfs_datasets:
- name: peace/pictures
state: present
- name: peace/movies
state: present
extra_zfs_properties:
mountpoint: /mnt/peace/movies
quota: 500G
Prometheus metrics
The role deploys an hourly systemd timer (zfs-metrics.timer) running
/usr/local/bin/zfs-metrics.sh, which writes pool and dataset capacity to
node_exporter's textfile collector directory (zfs_metrics_dir). The
node_exporter role must be deployed on the host; the script exits silently
otherwise.
| Metric | Labels | Description |
|---|---|---|
zfs_pool_size_bytes |
pool |
Total pool size |
zfs_pool_alloc_bytes |
pool |
Allocated bytes |
zfs_pool_free_bytes |
pool |
Free bytes |
zfs_pool_capacity_percent |
pool |
Used capacity |
zfs_dataset_used_bytes |
dataset |
Used bytes (incl. snapshots and children) |
zfs_dataset_refer_bytes |
dataset |
Own referenced bytes |
zfs_dataset_quota_bytes |
dataset |
Quota (0 = none) |
These feed the ZFS - Pools & Datasets Grafana dashboard. node_exporter's
built-in --collector.zfs exposes ARC, I/O and pool state only, not capacity.
zfs_pool_capacity_percent also drives Grafana capacity alerts (80/90/95%
tiers) to ntfy, provisioned by the grafana role — see roles/grafana/README.md.
Tunables (defaults/main.yml): zfs_metrics_enabled, zfs_metrics_dir,
zfs_metrics_script_path, zfs_metrics_interval.