mrlesmithjr.zfs

目录 通过 DocToc 生成

ansible-zfs

在 Linux 上安装和配置 ZFS (http://zfsonlinux.org/)

要求

至少需要一个未使用的物理硬盘来创建 ZFS 池

Vagrant

使用 Vagrant 创建测试环境

vagrant up

这将启动一个包含一些 ZFS 卷和 iSCSI 设备的服务器... 您可以从客户端节点查看/使用 iSCSI 卷...

vagrant ssh client
sudo iscsiadm -m discovery -t st -p 192.168.202.201
sudo iscsiadm -m node --login

现在您应该在客户端有 /dev/sdb 和 /dev/sdc,可以格式化和挂载。

sudo fdisk -l
磁盘 /dev/sdb: 1073 MB, 1073741824 字节
34 个扇区,61 个磁道,1011 个气缸,总共 2097152 个扇区
单位 = 每个 512 字节的扇区
扇区大小 (逻辑/物理): 512 字节 / 512 字节
读写大小 (最小/最佳): 512 字节 / 512 字节
磁盘标识符: 0x00000000

磁盘 /dev/sdb 不包含有效的分区表

磁盘 /dev/sdc: 2147 MB, 2147483648 字节
67 个扇区,62 个磁道,1009 个气缸,总共 4194304 个扇区
单位 = 每个 512 字节的扇区
扇区大小 (逻辑/物理): 512 字节 / 512 字节
读写大小 (最小/最佳): 512 字节 / 512 字节
磁盘标识符: 0x00000000

磁盘 /dev/sdc 不包含有效的分区表
vagrant@client:~$ sudo fdisk /dev/sdb
设备既不包含有效的 DOS 分区表,也不包含 Sun、SGI 或 OSF 磁盘标签
正在创建一个新的 DOS 磁盘标签,磁盘标识符为 0xa1af287f。
更改将在内存中保持,直到您决定写入它们。
之后,当然,之前的内容将无法恢复。

角色变量

---
# ansible-zfs 的默认文件

# 定义是否创建 ZFS 文件系统
zfs_create_filesystems: false

# 定义是否创建 ZFS 池
zfs_create_pools: false

# 定义是否创建 ZFS 卷
zfs_create_volumes: false
zfs_debian_package_key: http://zfsonlinux.org/4D5843EA.asc
zfs_debian_package_url: http://archive.zfsonlinux.org/debian/pool/main/z/zfsonlinux
zfs_debian_package_version: 6
zfs_debian_package: "zfsonlinux_{{ zfs_debian_package_version }}_all.deb"
zfs_enable_auto_snapshots: true

# 定义是否安装 iscsitarget 以提供 iSCSI 卷
zfs_enable_iscsi: false

# 定义是否安装 NFS 内核服务器以提供 NFS
zfs_enable_nfs: false

# 定义是否应用 zfs_performance_tuning 中定义的参数
zfs_enable_performance_tuning: false

# 定义是否安装和配置 Samba
zfs_enable_samba: false

# 定义加密文件系统的密钥是否在启动时加载
zfs_autoload_encryption_keys: false

# 要管理的文件系统
zfs_filesystems: []
  # - name: nfs
  #   pool: tank
  #   atime: off
  #   compression: lz4
  #   logbias: latency
  #   primarycache: all
  #   quota: 3G
  #   recordsize: 16K
  #   sharenfs: on
  #   snapdev: visible
  #   snapdir: visible
  #   state: present

# 定义是否管理 ZFS 的安装,包括更新。
zfs_install_update: true

# 定义是否启用 iscsitarget 服务
zfs_iscsistarget_enable: "{{ zfs_enable_iscsi }}"

# 在反向中定义您的 FQDN...(local.vagrant)
zfs_iscsistarget_iqn: iqn.2001-04.org.example

zfs_iscsistarget_max_sleep: 3
zfs_iscsistarget_options: ""
zfs_iscsitarget_target_portals:
  # 定义监听 iSCSI 连接的 IP 地址 | ALL (默认) | cidr (x.x.x.x/xx) | 如果定义 cidr 则禁止全部
  - ALL

# 定义 ZFS 文件系统挂载点的权限是否管理
zfs_manage_filesystem_permissions: false

zfs_performance_tuning:
  - param: zfs_prefetch_disable
    value: 1
  - param: zfs_txg_timeout
    value: 5
  - param: zfs_arc_max
    value: "{{ (ansible_memtotal_mb | int * 1024 * 1024 * 0.5) | round | int }}"
  - param: zfs_arc_meta_limit
    value: "{{ (ansible_memtotal_mb | int * 1024 * 1024 * 0.125) | round | int }}"
  - param: zfs_arc_min
    value: "{{ (ansible_memtotal_mb | int * 1024 * 1024 * 0.0625) | round | int }}"

# 定义要管理的 zpool
zfs_pools: []

# 定义全局 scrub cron 作业参数。仅在 `zfs_enable_monitoring` 设置为 True 时应用。
zfs_pools_scrub_cron:
  minute: 0
  hour: 0
  day: *
  month: *
  weekday: sun
zfs_ubuntu_ppa: ppa:zfs-native/stable

# 定义要管理的块设备卷
zfs_volumes: []
  # - name: backups
  #   pool: tank
  #   volsize: 1G
  #   state: present

zfs_enable_monitoring: False

# 以百分比计算。
zfs_monitoring_capacity_threshold: 80

# 以天计算。
zfs_monitoring_scrub_max_age: 8

zfs_monitoring_email_dest: root@localhost

依赖

示例剧本

GitHub

        ---
        - name:  Linux 上安装 ZFS
          hosts: all
          become: true
          vars:
            - zfs_iscsistarget_iqn: iqn.2001-04.local.vagrant  # 在反向中定义您的 FQDN...(local.vagrant)
            - zfs_iscsitarget_target_portals:
                - 192.168.202.0/24
            - zfs_enable_iscsi: true
            - zfs_enable_nfs: true
          roles:
            - role: ansible-zfs
          tasks:
        ```yaml
        #### Galaxy
        ```yaml
        ---
        - name:  Linux 上安装 ZFS
          hosts: all
          become: true
          vars:
            - zfs_iscsistarget_iqn: iqn.2001-04.local.vagrant  # 在反向中定义您的 FQDN...(local.vagrant)
            - zfs_iscsitarget_target_portals:
                - 192.168.202.0/24
            - zfs_enable_iscsi: true
            - zfs_enable_nfs: true
          roles:
            - role: mrlesmithjr.zfs
          tasks:

高级示例 ZPool 创建

zfs_pools:  # 定义要管理的 zpool
  - name: 'SSD-TANK'
    action: 'create'
    options: # 创建时设置永久选项
      ashift: 13
    compression: 'lz4'
    devices:
      - 'ata-INTEL_SSDSC2BW240A4_CVDA352100YL2403GN'
      - 'ata-INTEL_SSDSC2BW240A4_BTDA329505KM2403GN'
    type: 'raidz2'
    state: 'present'
  # 更多的池创建...

许可证

BSD

作者信息

Larry Smith Jr.

关于项目

Installs and configures ZFS On Linux (http://zfsonlinux.org/)

安装
ansible-galaxy install mrlesmithjr.zfs
许可证
mit
下载
513.6k
拥有者
Sharing practical insights on virtualization, cloud, automation, and DevOps to help others build, automate, and innovate with confidence.