mrlesmithjr.zfs

Tabla de Contenidos generada con DocToc

ansible-zfs

Instala y configura ZFS en Linux (http://zfsonlinux.org/)

Requisitos

Al menos un disco duro físico no usado para crear el ZFS Pool.

Vagrant

Levanta un entorno de prueba usando Vagrant.

vagrant up

Esto levantará un servidor con algunos volúmenes ZFS, incluyendo dispositivos iSCSI. Puedes ver/utilizar los volúmenes iSCSI desde el nodo cliente.

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

Ahora deberías tener /dev/sdb y /dev/sdc en tu cliente para formatear y montar.

sudo fdisk -l
Disco /dev/sdb: 1073 MB, 1073741824 bytes
34 cabezales, 61 sectores/pista, 1011 cilindros, total 2097152 sectores
Unidades = sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de I/O (mínimo/óptimo): 512 bytes / 512 bytes
Identificador del disco: 0x00000000

El disco /dev/sdb no contiene una tabla de particiones válida.

Disco /dev/sdc: 2147 MB, 2147483648 bytes
67 cabezales, 62 sectores/pista, 1009 cilindros, total 4194304 sectores
Unidades = sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de I/O (mínimo/óptimo): 512 bytes / 512 bytes
Identificador del disco: 0x00000000

El disco /dev/sdc no contiene una tabla de particiones válida.
vagrant@client:~$ sudo fdisk /dev/sdb
El dispositivo no contiene una tabla de particiones válida de DOS, ni una etiqueta de disco de Sun, SGI o OSF.
Construyendo una nueva etiqueta de disco DOS con identificador de disco 0xa1af287f.
Los cambios permanecerán en memoria hasta que decidas escribirlos.
Después de eso, por supuesto, el contenido anterior no se podrá recuperar.

Variables de Rol

---
# archivo de valores predeterminados para ansible-zfs

# Define si se crean sistemas de archivos ZFS
zfs_create_filesystems: false

# Define si se crean pools ZFS
zfs_create_pools: false

# Define si se crean volúmenes 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

# Define si se instala iscsitarget para servir volúmenes iSCSI
zfs_enable_iscsi: false

# Define si se debe instalar el servidor NFS para servir NFS
zfs_enable_nfs: false

# Define si se aplican los parámetros establecidos en zfs_performance_tuning
zfs_enable_performance_tuning: false

# Define si Samba está instalado y configurado
zfs_enable_samba: false

# Define si las claves para sistemas de archivos encriptados se cargan al arrancar
zfs_autoload_encryption_keys: false

# Define sistemas de archivos a gestionar
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
  # - 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: disabled
  # - name: encrypted-fs
  #   pool: tank
  #   state: present
  #   encryption: aes-256-gcm
  #   keylocation: "file:///use/local/etc/zfs/keys/tank/encyrpted-fs"
  #   keyformat: "hex"

# Define si este rol debe gestionar la instalación de ZFS, incluyendo actualizaciones.
zfs_install_update: true

# Define si el servicio iscsitarget está habilitado
zfs_iscsistarget_enable: "{{ zfs_enable_iscsi }}"

# Define tu FQDN en reversa...(local.vagrant)
zfs_iscsistarget_iqn: iqn.2001-04.org.example

zfs_iscsistarget_max_sleep: 3
zfs_iscsistarget_options: ""
zfs_iscsitarget_target_portals:
  # Define la dirección IP para escuchar conexiones iSCSI | ALL (por defecto) | cidr (x.x.x.x/xx) | deshabilitar ALL si se define cidr
  - ALL
#  - 10.0.2.0/24
#  - 192.168.2.0/24

# Define si se gestionan los permisos del punto de montaje del sistema de archivos 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 }}"

# Define los zpool(s) a gestionar
zfs_pools: []
  # - name: SSD-TANK
  #   action: create
  #   options:
  #     ashift: 13
  #   compression: lz4
  #   devices:
  #     - ata-INTEL_SSDSC2BW240A4_CVDA352100YL2403GN
  #     - ata-INTEL_SSDSC2BW240A4_BTDA329505KM2403GN
  #   type: mirror
  #   state: present

# define patrones de cron de scrub globales. Solo se aplica cuando `zfs_enable_monitoring` está configurado en True.
zfs_pools_scrub_cron:
  minute: 0
  hour: 0
  day: *
  month: *
  weekday: sun
zfs_ubuntu_ppa: ppa:zfs-native/stable

# Define volúmenes de dispositivo bloque a gestionar
zfs_volumes: []
  # - name: backups
  #   pool: tank
  #   shareiscsi: on
  #   volsize: 1G
  #   lun: 0
  #   allow:
  #     - ALL
  #   state: present

zfs_enable_monitoring: False

# en porcentaje.
zfs_monitoring_capacity_threshold: 80

# en días.
zfs_monitoring_scrub_max_age: 8

zfs_monitoring_email_dest: root@localhost

Dependencias

Ninguna

Ejemplo de Playbook

GitHub

        ---
        - name: Instala ZFS en Linux
          hosts: all
          become: true
          vars:
            - zfs_iscsistarget_iqn: iqn.2001-04.local.vagrant  # define tu FQDN en reversa...(local.vagrant)
            - zfs_iscsistarget_target_portals:
                - 192.168.202.0/24
            - zfs_enable_iscsi: true
            - zfs_enable_nfs: true
          roles:
            - role: ansible-zfs
          tasks:
        ```yaml
        #### Galaxy
        ```yaml
        ---
        - name: Instala ZFS en Linux
          hosts: all
          become: true
          vars:
            - zfs_iscsistarget_iqn: iqn.2001-04.local.vagrant  # define tu FQDN en reversa...(local.vagrant)
            - zfs_iscsistarget_target_portals:
                - 192.168.202.0/24
            - zfs_enable_iscsi: true
            - zfs_enable_nfs: true
          roles:
            - role: mrlesmithjr.zfs
          tasks:

Ejemplo Avanzado Creación de ZPool

zfs_pools:  # define los zpool(s) a gestionar
  - name: 'SSD-TANK'
    action: 'create'
    options: # establecer opciones permanentes en el momento de la creación
      ashift: 13
    compression: 'lz4' 
    devices:  # define los dispositivos para crear el pool...puedes definir múltiples por | sdb sdc sdd sde sdf | todo en una línea con espacios
      - 'ata-INTEL_SSDSC2BW240A4_CVDA352100YL2403GN'
      - 'ata-INTEL_SSDSC2BW240A4_BTDA329505KM2403GN'
    type: 'raidz2'  # define el tipo de pool... | básico (sin raid) | mirror | raidz | raidz2 | raidz3
    state: 'present'
  - name: 'SSD-TANK'
    action: 'add'
    compression: 'lz4' 
    devices:
      - 'ata-INTEL_SSDSC2BW240A4_BTDA3300022F2403GN'
    type: 'spare'
    state: 'present'
  - name: 'TANK'
    action: 'create'
    compression: 'lz4' 
    devices:  
      - 'ata-ST2000VN000-1HJ164_W522KVAS'
      - 'ata-ST2000VN000-1HJ164_W522KW2J'
    type: 'mirror'  
    state: 'present'
  - name: 'TANK'
    action: 'add'
    compression: 'lz4' 
    devices:  
      - 'ata-ST2000DM001-1CH164_Z1E957EP'
      - 'ata-ST2000DM001-1ER164_W4Z08B5M'
    type: 'mirror'  
    state: 'present'
  - name: 'TANK'
    action: 'add'
    compression: 'lz4' 
    devices:  
      - 'ata-ST2000DM001-1ER164_W4Z08FPX'
      - 'ata-ST2000DM001-1ER164_W5009JQ4'
    type: 'mirror'  
    state: 'present'
  - name: 'TANK'
    action: 'add'
    compression: 'lz4' 
    devices:  
      - 'ata-ST2000DM001-1CH164_W1E3XCBV'
      - 'ata-ST2000DM001-1CH164_W1E3V7VA'
    type: 'mirror'  
    state: 'present'
  - name: 'TANK'
    action: 'add'
    compression: 'lz4' 
    devices:  
      - 'ata-ST2000DM001-1CH164_W1E3XCBV'
      - 'ata-ST2000DM001-1CH164_W1E3V7VA'
    type: 'mirror'  
    state: 'present'
  - name: 'TANK'
    action: 'add'
    compression: 'lz4' 
    devices:  
      - 'ata-INTEL_SSDSC2CW120A3_CVCV248102U3120BGN'
    type: 'cache'  
    state: 'present'
  - name: 'TANK'
    action: 'add'
    compression: 'lz4' 
    devices:  
      - 'ata-INTEL_SSDSC2CW120A3_CVCV2515011Y120BGN'
    type: 'cache'  
    state: 'present'
  - name: 'TANK'
    action: 'add'
    compression: 'lz4' 
    devices:  
      - 'ata-ST2000DL003-9VT166_5YD48V54'
    type: 'spare'  
    state: 'present'

Licencia

BSD

Información del Autor

Larry Smith Jr.

Acerca del proyecto

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

Instalar
ansible-galaxy install mrlesmithjr.zfs
Licencia
mit
Descargas
513.1k
Propietario
Sharing practical insights on virtualization, cloud, automation, and DevOps to help others build, automate, and innovate with confidence.