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
Информация об авторе
Ларри Смит мл.
- @mrlesmithjr
- http://everythingshouldbevirtual.com
- mrlesmithjr [at] gmail.com
Установить
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.
