stuvusIT.zfs-storage
zfs-storage
此角色在Linux上安装ZFS,并配置文件系统和ZVOL。
如果配置的文件系统使用了sharenfs
属性,将安装nfs-kernel-server
。
如果zfs_save_nfs_exports
相应设置,NFS导出将永久配置在/etc/exports.d/zfs-storage-ansible.exports
中。
使用JonathanF的ZFS PPA来安装最新的ZFS版本。
要求
以下发行版中的一个:
- Debian stretch或buster
- Ubuntu xenial、bionic、cosmic或devel
需要systemd
以便使用定时器清理池,而不是特定于发行版的cron作业。
在执行此角色的机器上需要python-jmespath
以正确判断是否需要NFS。
角色变量
名称 | 默认/强制 | 描述 |
---|---|---|
zfs_parent_fs |
所有文件系统和zvol的现有父ZFS文件系统,作为可选项添加到所有配置之前 | |
zfs_storage_defaults |
{} |
包含将应用于所有配置ZFS文件系统/zvol的ZFS属性的字典 |
zfs_filesystems |
[] |
定义的zfs_filesystems列表,每个条目必须包含name 和attributes 字典 |
zfs_zpools |
[] |
包含name (强制)和scrub (可选)键的字典列表。scrub 为布尔值,可以禁用该池的清理。 |
zvols |
[] |
定义的zvol列表,每个条目必须包含name 和attributes 字典 |
zfs_default_enable_scrub |
True |
是否默认启用zpool清理 |
zfs_scrub_frequency |
weekly |
zfs清理的频率 - 已在运行的清理将被中止。请参见systemd.time了解允许值。 |
zfs_kernel_module_parameters |
{} |
包含要在/etc/modprobe.d/zfs.conf 中设置的ZFS内核模块选项的字典。 |
zfs_storage_drive_wwids |
[] |
池中块设备的WWID字符串列表。将编写UDEV规则以将IO调度程序设置为noop 。这对于分区或加密设备是必需的,因为ZFS仅在获取整个驱动器时才将调度程序设置为noop 。 |
zfs_save_nfs_exports |
True |
是否保存并在重启时删除(如果不需要)NFS导出文件,以确保导出的一致性。 |
注意:某些ZFS属性只能在创建时设置(请参见man zfs)。这些是文件系统的utf8only
、normalization
和casesensitivity
,以及ZVOL的volsize
和volblocksize
。如果尝试更改这些属性,相应的任务将失败。
此外,volsize
是ZVOL的强制属性。
如果未定义某个属性,则将配置ZFS默认值(即使属性已经被设置为其他值),只是这四个属性例外:
acltype
=posixacl
compression
=on
relatime
=on
xattr
=sa
所有ZFS属性的默认值可以在默认值中查看。
除了手册页中描述的实际ZFS属性,此角色还设置属性以控制使用工具(如zfs-auto-snapshot)的自动快照。通过以下变量实现,默认值均设置为False
:
ZFS属性 | 本角色中的变量名称 | 描述 |
---|---|---|
com.sun:auto-snapshot |
com_sun_auto_snapshot |
启用自动快照和快照清理(销毁),适用于当前数据集的所有可用时间间隔(基本上相当于设置所有以下属性为True )。 |
com.sun:auto-snapshot:frequent |
com_sun_auto_snapshot_frequent |
以15分钟的间隔启用快照和清理。 |
com.sun:auto-snapshot:hourly |
com_sun_auto_snapshot_hourly |
以每小时的间隔启用快照和清理。 |
com.sun:auto-snapshot:daily |
com_sun_auto_snapshot_daily |
以每天的间隔启用快照和清理。 |
com.sun:auto-snapshot:weekly |
com_sun_auto_snapshot_weekly |
以每周的间隔启用快照和清理。 |
com.sun:auto-snapshot:monthly |
com_sun_auto_snapshot_monthly |
以每月的间隔启用快照和清理。 |
示例Playbook
- 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 # 允许ARC增长到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:
结果
名称 | 类型 | 属性 |
---|---|---|
tank/testing |
文件系统 | acltype =posixacl , quota =200G |
tank/testing/wiki |
文件系统 | acltype =posixacl , sharenfs =[email protected] , compression =off , quota =50G |
tank/testing/dns01 |
zvol | volsize =100G |
tank/testing/ldap01 |
zvol | volsize =50G |
rpool
不会被清理,tank
将每月进行清理。
许可
此作品根据知识共享署名-相同方式共享 4.0 国际许可协议授权。