mrlesmithjr.zfs

Содержание сгенерировано с помощью DocToc

ansible-zfs

Устанавливает и настраивает ZFS на Linux (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 сектора
Единицы = сектора по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер ввода/вывода (минимальный/оптимальный): 512 байт / 512 байт
Идентификатор диска: 0x00000000

Диск /dev/sdb не содержит таблицы разделов

Диск /dev/sdc: 2147 MB, 2147483648 байт
67 головок, 62 сектора/дорожка, 1009 цилиндров, всего 4194304 сектора
Единицы = сектора по 1 * 512 = 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 Kernel Server для обслуживания 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
  #   # включено | отключено (по умолчанию) | lzjb | gzip | gzip-1 | gzip-2 | gzip-3 | gzip-4 | gzip-5 | gzip-6 | gzip-7 | gzip-8 | gzip-9 | lz4 | zle
  #   compression: lz4
  #   # задержка (по умолчанию) | пропускная способность
  #   logbias: latency
  #   # Определите альтернативную точку монтирования
  #   # mountpoint: /var/lib/docker
  #   # все (по умолчанию) | ни одно | метаданные
  #   primarycache: all
  #   quota: 3G
  #   # Определяет размер записи .. 16K | 32K | 64K | 128K (по умолчанию) | и т.д.
  #   recordsize: 16K
  #   sharenfs: on
  #   # стандартное (по умолчанию) | всегда | отключено    sync: отключено
  #   # Управляет тем, скрыты или видимы устройства снимков zvol. скрытые (по умолчанию) | видимые
  #   snapdev: visible
  #   # Управляет тем, скрыт или виден каталог .zfs в корне файловой системы. скрытый (по умолчанию) | видимый
  #   snapdir: visible
  #   state: present
  # - name: Shares/Movies
  #   compression: lz4
  #   group: nogroup
  #   mountpoint: /TANK/Shares/Movies
  #   owner: nobody
  #   pool: TANK
  #   quota: none
  #   sharesmb: true
  #   smb_options:
  #     browseable: "yes"
  #     comment: ""
  #     create_directory_mask: "0755"
  #     create_mask: "0777"
  #     guest_ok: "yes"
  #     read_only: "no"
  #     share_name: Movies
  #     writable: "yes"
  #   xattr: sa
  #   acltype: posixacl
  #   state: present
  #   # стандартное (по умолчанию) | всегда | отключено
  #   sync: отключено
  # - name: encrypted-fs
  #   pool: tank
  #   state: present
  #   # Алгоритм шифрования, который нужно использовать, или просто "включить", чтобы использовать стандартный, выбранный ZFS.
  #   encryption: aes-256-gcm
  #   # Где искать ключ на файловой системе. Подсказка не поддерживается этой ролью.
  #   keylocation: "file:///use/local/etc/zfs/keys/tank/encyrpted-fs"
  #   # пароль | hex | raw
  #   keyformat: "hex"

# Определяет, должна ли эта роль управлять установкой 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:
  # Определите IP-адрес для прослушивания подключений iSCSI | ВСЕ (по умолчанию) | cidr (x.x.x.x/xx) | отключить ВСЕ, если задан cidr
  - ВСЕ
#  - 10.0.2.0/24
#  - 192.168.2.0/24

# Определяет, управляются ли права доступа к точкам монтирования файловой системы 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
    # 1/2 от общей системной памяти
    value: "{{ (ansible_memtotal_mb | int * 1024 * 1024 * 0.5) | round | int }}"
  - param: zfs_arc_meta_limit
    # 1/4 zfs_arc_max
    value: "{{ (ansible_memtotal_mb | int * 1024 * 1024 * 0.125) | round | int }}"
  - param: zfs_arc_min
    # 1/2 от zfs_arc_meta_limit
    value: "{{ (ansible_memtotal_mb | int * 1024 * 1024 * 0.0625) | round | int }}"

# Определяет пулы zpool для управления
zfs_pools: []
  # - name: SSD-TANK
  #   action: create
  #   # установить постоянные параметры во время создания
  #   options:
  #     ashift: 13
  #   # atime: on
  #   # включено | отключено (по умолчанию) | lzjb | gzip | gzip-1 | gzip-2 | gzip-3 | gzip-4 | gzip-5 | gzip-6 | gzip-7 | gzip-8 | gzip-9 | lz4 | zle
  #   compression: lz4
  #   # Определите устройства для создания пула...можно определить несколько через | sdb sdc sdd sde sdf | все в одной строке с пробелами
  #   devices:
  #     - ata-INTEL_SSDSC2BW240A4_CVDA352100YL2403GN
  #     - ata-INTEL_SSDSC2BW240A4_BTDA329505KM2403GN
  #   # Определите тип пула... | базовый (без RAID) | зеркало | raidz | raidz2 | raidz3
  #   type: mirror
  #   state: present
  #   # изменить параметры задания cron для общей очистки для этого конкретного пула
  #   scrub_cron:
  #     # enable: False  # отключить создание cron задачи для этой конкретной пула
  #     hour: 2
  #     weekday: sat
  # - name: SSD-TANK
  #   action: add
  #   # atime: on
  #   compression: lz4
  #   devices:
  #     - ata-INTEL_SSDSC2BW240A4_CVDA352100GP2403GN
  #     - ata-INTEL_SSDSC2BW240A4_CVDA401000Q02403GN
  #   type: mirror
  #   state: present

# определяет глобальные параметры задания 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
  #   # Определяет, должен ли iscsitarget обслуживать том... | включить | отключить | или не определен
  #   shareiscsi: on
  #   # Определяет размер тома для блочных устройств
  #   volsize: 1G
  #   lun: 0
  #   allow:
  #     - ВСЕ
  #   state: present
  # - name: data
  #   pool: tank
  #   shareiscsi: on
  #   volsize: 2G
  #   lun: 1
  #   allow:
  #     # - 10.0.0.0/8
  #     - 192.168.202.0/24
  #   state: present
  # - name: encrypted-vol
  #   pool: tank
  #   state: present
  #   # Алгоритм шифрования, который нужно использовать, или просто "включить", чтобы использовать стандартный, выбранный ZFS.
  #   encryption: on
  #   # Где искать ключ на файловой системе. Подсказка не поддерживается этой ролью.
  #   keylocation: "file:///use/local/etc/zfs/keys/tank/encyrpted-vol"
  #   # пароль | hex | raw
  #   keyformat: "hex"
  #   volsize: 3G

zfs_enable_monitoring: False

# в процентах.
zfs_monitoring_capacity_threshold: 80

# в днях.
zfs_monitoring_scrub_max_age: 8

zfs_monitoring_email_dest: root@localhost

Зависимости

Нет

Пример плэйбука

GitHub

        ---
        - name: Установка ZFS на Linux
          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: Установка ZFS на Linux
          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'
#    atime: 'on'
    options: # установить постоянные параметры во время создания
      ashift: 13
    compression: 'lz4'  # включено | отключено (по умолчанию) | lzjb | gzip | gzip-1 | gzip-2 | gzip-3 | gzip-4 | gzip-5 | gzip-6 | gzip-7 | gzip-8 | gzip-9 | lz4 | zle
    devices:  # определить устройства для создания пула...можно определить несколько через | sdb sdc sdd sde sdf | все в одной строке с пробелами
      - 'ata-INTEL_SSDSC2BW240A4_CVDA352100YL2403GN'
      - 'ata-INTEL_SSDSC2BW240A4_BTDA329505KM2403GN'
      - 'ata-INTEL_SSDSC2BW240A4_CVDA352100GP2403GN'
      - 'ata-INTEL_SSDSC2BW240A4_CVDA401000Q02403GN'
      - 'ata-INTEL_SSDSC2BW240A4_CVDA4010045B2403GN'
      - 'ata-INTEL_SSDSC2BW240A4_BTDA329501102403GN'
      - 'ata-INTEL_SSDSC2BW240A4_BTDA329503XM2403GN'
      - 'ata-INTEL_SSDSC2BW240A4_CVDA4010011R2403GN'
    type: 'raidz2'  # определить тип пула... | базовый (без RAID) | зеркало | raidz | raidz2 | raidz3
    state: 'present'
  - name: 'SSD-TANK'
    action: 'add'
    compression: 'lz4'  # включено | отключено (по умолчанию) | lzjb | gzip | gzip-1 | gzip-2 | gzip-3 | gzip-4 | gzip-5 | gzip-6 | gzip-7 | gzip-8 | gzip-9 | lz4 | zle
    devices:
      - 'ata-INTEL_SSDSC2BW240A4_BTDA3300022F2403GN'
    type: 'spare'
    state: 'present'
  - name: 'TANK'
    action: 'create'
#    atime: 'on'
    compression: 'lz4'  # включено | отключено (по умолчанию) | lzjb | gzip | gzip-1 | gzip-2 | gzip-3 | gzip-4 | gzip-5 | gzip-6 | gzip-7 | gzip-8 | gzip-9 | lz4 | zle
    devices:  # определить устройства для создания пула...можно определить несколько через | sdb sdc sdd sde sdf | все в одной строке с пробелами
      - 'ata-ST2000VN000-1HJ164_W522KVAS'
      - 'ata-ST2000VN000-1HJ164_W522KW2J'
    type: 'mirror'  # определить тип пула... | базовый (без RAID) | зеркало | raidz | raidz2 | raidz3
    state: 'present'
  - name: 'TANK'
    action: 'add'
    compression: 'lz4'  # включено | отключено (по умолчанию) | lzjb | gzip | gzip-1 | gzip-2 | gzip-3 | gzip-4 | gzip-5 | gzip-6 | gzip-7 | gzip-8 | gzip-9 | lz4 | zle
    devices:  # определить устройства для создания пула...можно определить несколько через | sdb sdc sdd sde sdf | все в одной строке с пробелами
      - 'ata-ST2000DM001-1CH164_Z1E957EP'
      - 'ata-ST2000DM001-1ER164_W4Z08B5M'
    type: 'mirror'  # определить тип пула... | базовый (без RAID) | зеркало | raidz | raidz2 | raidz3
    state: 'present'
  - name: 'TANK'
    action: 'add'
    compression: 'lz4'  # включено | отключено (по умолчанию) | lzjb | gzip | gzip-1 | gzip-2 | gzip-3 | gzip-4 | gzip-5 | gzip-6 | gzip-7 | gzip-8 | gzip-9 | lz4 | zle
    devices:  # определить устройства для создания пула...можно определить несколько через | sdb sdc sdd sde sdf | все в одной строке с пробелами
      - 'ata-ST2000DM001-1ER164_W4Z08FPX'
      - 'ata-ST2000DM001-1ER164_W5009JQ4'
    type: 'mirror'  # определить тип пула... | базовый (без RAID) | зеркало | raidz | raidz2 | raidz3
    state: 'present'
  - name: 'TANK'
    action: 'add'
    compression: 'lz4'  # включено | отключено (по умолчанию) | lzjb | gzip | gzip-1 | gzip-2 | gzip-3 | gzip-4 | gzip-5 | gzip-6 | gzip-7 | gzip-8 | gzip-9 | lz4 | zle
    devices:  # определить устройства для создания пула...можно определить несколько через | sdb sdc sdd sde sdf | все в одной строке с пробелами
      - 'ata-ST2000DM001-1CH164_W1E3XCBV'
      - 'ata-ST2000DM001-1CH164_W1E3V7VA'
    type: 'mirror'  # определить тип пула... | базовый (без RAID) | зеркало | raidz | raidz2 | raidz3
    state: 'present'
  - name: 'TANK'
    action: 'add'
    compression: 'lz4'  # включено | отключено (по умолчанию) | lzjb | gzip | gzip-1 | gzip-2 | gzip-3 | gzip-4 | gzip-5 | gzip-6 | gzip-7 | gzip-8 | gzip-9 | lz4 | zle
    devices:  # определить устройства для создания пула...можно определить несколько через | sdb sdc sdd sde sdf | все в одной строке с пробелами
      - 'ata-ST31000340NS_9QJ814GW'
      - 'ata-ST31000340NS_9QJ80NQK'
    type: 'mirror'  # определить тип пула... | базовый (без RAID) | зеркало | raidz | raidz2 | raidz3
    state: 'present'
  - name: 'TANK'
    action: 'add'
    compression: 'lz4'  # включено | отключено (по умолчанию) | lzjb | gzip | gzip-1 | gzip-2 | gzip-3 | gzip-4 | gzip-5 | gzip-6 | gzip-7 | gzip-8 | gzip-9 | lz4 | zle
    devices:  # определить устройства для создания пула...можно определить несколько через | sdb sdc sdd sde sdf | все в одной строке с пробелами
      - 'ata-INTEL_SSDSC2CW120A3_CVCV248102U3120BGN'
    type: 'cache'  # определить тип пула... | базовый (без RAID) | зеркало | raidz | raidz2 | raidz3
    state: 'present'
  - name: 'TANK'
    action: 'add'
    compression: 'lz4'  # включено | отключено (по умолчанию) | lzjb | gzip | gzip-1 | gzip-2 | gzip-3 | gzip-4 | gzip-5 | gzip-6 | gzip-7 | gzip-8 | gzip-9 | lz4 | zle
    devices:  # определить устройства для создания пула...можно определить несколько через | sdb sdc sdd sde sdf | все в одной строке с пробелами
      - 'ata-INTEL_SSDSC2CW120A3_CVCV2515011Y120BGN'
    type: 'cache'  # определить тип пула... | базовый (без RAID) | зеркало | raidz | raidz2 | raidz3
    state: 'present'
  - name: 'TANK'
    action: 'add'
    compression: 'lz4'  # включено | отключено (по умолчанию) | lzjb | gzip | gzip-1 | gzip-2 | gzip-3 | gzip-4 | gzip-5 |gzip-6 | gzip-7 | gzip-8 | gzip-9 | lz4 | zle
    devices:  # определить устройства для создания пула...можно определить несколько через | sdb sdc sdd sde sdf | все в одной строке с пробелами
      - 'ata-ST2000DL003-9VT166_5YD48V54'
    type: 'spare'  # определить тип пула... | базовый (без RAID) | зеркало | raidz | raidz2 | raidz3
    state: 'present'

Лицензия

BSD

Информация об авторе

Ларри Смит мл.

О проекте

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

Установить
ansible-galaxy install mrlesmithjr.zfs
Лицензия
mit
Загрузки
513.2k
Владелец
Sharing practical insights on virtualization, cloud, automation, and DevOps to help others build, automate, and innovate with confidence.