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列表,每个条目必须包含nameattributes字典
zfs_zpools [] 包含name(强制)和scrub(可选)键的字典列表。scrub为布尔值,可以禁用该池的清理。
zvols [] 定义的zvol列表,每个条目必须包含nameattributes字典
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)。这些是文件系统的utf8onlynormalizationcasesensitivity,以及ZVOL的volsizevolblocksize。如果尝试更改这些属性,相应的任务将失败。 此外,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 国际许可协议授权。

作者信息

关于项目

Configures ZFS filesystems and ZVOLs that can be shared via NFS

安装
ansible-galaxy install stuvusIT.zfs-storage
许可证
cc-by-sa-4.0
下载
78
拥有者
stuvus IT Team - Studierendenvertretung Universität Stuttgart