ZFS: Criando Pools – Parte 03

 

Ambiente

  • Sistema Operacional: Debian 10
  • Ip: 192.168.0.41
  • nome/hostname: server02
  • HD:  /dev/sdb e /dev/sdc. Cada um com 100MB

 

Antes de começarmos precisaremos saber um pouco mais sobre Pool no ZFS:

Dispositivo Virtual

O ZFS trabalha muito com dispositivos virtuais, também conhecido como VDEVs(Virtual Devices)

O conceito é mais ou menos parecido com RAID, conforme vimos nesse artigo. Basicamente juntamos alguns dispositivos físicos(HDs) que se agrupame a esse agrupamento chamamos de Array. Esse array é representado por um nome(meta-device), por exemplo: “/dev/md0” é um meta-device que representa um array(grupo de discos). Nesse caso, em ZFS, /dev/md0 seria nosso VDEV.

O que conhecemos como raid em ZFS chamamos de RAIDZ, então temos RAIDZ-1, RAIDZ-2….

 

Assim também alguns usam o termo ZPOOL ao invés de Pool apenas.

 

Tipos de VDEVs

Temos:

  1. disco: é o padrão. São os dispositivos físicos(HDs….)
  2. arquivo: Caminho absoluto para um arquivo de imagem(.ISO por exemplo)
  3. mirror: um espelhamento de HDs. Como o RAID-1. Exemplo: 2 discos de 10GB  juntos formam um VDEV de 10GB mas com redundância. Ao invés de somar para 20GB fica apenas com 10GB porém com tolerância a falha de um dos discos.
  4. spare: Discos marcamos como “hot spare” para o ZFS. Por exemplo, temos um RAID-1 com 2 discos de 10GB totalizando um array de 10GB.  Junto com  e esses dois discos temos um outro de backup com 10GB. Esse terceiro está marcado como “hot spare”, se um dos dois do raid-1 falhar esse terceiro substituirá automaticamente o danificado.
  5. raid1, raid2, raid: raid com tolerância  a falhas e com distribuição baseada em paridade.
  6. cache: dispositivo usado como L2ARC(Level 2 Adaptative Read Cache). Se trata de um dispositivo que podemos adicionar e será usado para cache.
  7. Log:  Um log(SLOG) separado, conhecido como ZIL(ZFS Intent Log).

 

 

Algumas Restrições do ZPOOL

  • Uma vez que um dispositivo físico é adicionado a um VDEV ele não pode ser removido
  • um zpool não pode ter seu tamanho reduzido, apenas aumentado
  • raid-0 é mais rápido que raid-1, que é mais rápido que raidz-1 e esse é mais rápido que raidz-2…
  • hot spare não é automaticamente adicionado a não ser que você habilite nas configurações. Por padrão está inativado
  • Um zpool não irá automaticamente ser redimensionado quando um disco grande enche o pool a não ser que habilitemos a opção ANTES da substituição do primeiro disco. Essa opção está inativada por padrão
  • Um zpool irá saber sobre setores com 4k de tmanho APENAS e SOMENTE SE o drive reportar.
  • Deduplicação(eliminação de dados repetidos e excessivos) é extremamente custoso e causará transtornos na performance se não houver memória RAM o bastante. Em um pool podemos ter diversos volumes. A deduplicação  abrange todo o pool e não apenas os volumes pertencente ao pool.
  • Em contrapartida, compressão é POUCO DISPENDIOSA, BARATA para o consumo do processador. A compressão está desabilitada por padrão. Pode valer a pena o seu uso.
  • ZFS sobre bastante de fragmentação e zpool cheios irá afetar no desempenho.

 

Criando um Pool Básico

Muitos discos podem ser juntados para uso no ZFS e esses discos juntos formam o que chamamos de pool.

Após termos instalado o zfs no Debian, iremos criar um pool com os dois discos(sdb e sdc) que temos.

  1. Criando um pool com os discos /dev/sdb e /dev/sdc
    elder@server02:~$ sudo zpool create meuPool sdb sdc

    Obs.: Acima criei um raid-0, sem redundância e sem tolerância à falha!

  2. Verificado o status com “zpool status”
    elder@server02:~$ sudo zpool status meuPool
      pool: meuPool
     state: ONLINE
      scan: none requested
    config:
    
    	NAME        STATE     READ WRITE CKSUM
    	meuPool     ONLINE       0     0     0
    	  sdb       ONLINE       0     0     0
    	  sdc       ONLINE       0     0     0
    
    errors: No known data error
  3. Destruindo o pool
    elder@server02:~$ sudo zpool destroy meuPool
  4. Um pool espelhado(mirror)
    elder@server02:~$ sudo zpool create meuPool mirror sdb sdc
  5. Verificando o status.
    elder@server02:~$ sudo zpool status
      pool: meuPool
     state: ONLINE
      scan: none requested
    config:
    
    	NAME        STATE     READ WRITE CKSUM
    	meuPool     ONLINE       0     0     0
    	  mirror-0  ONLINE       0     0     0
    	    sdb     ONLINE       0     0     0
    	    sdc     ONLINE       0     0     0
    
    errors: No known data error
  6. Destruindo o Pool
    elder@server02:~$ sudo zpool destroy meuPool

Bom, até agora aprendemos a criar apenas o pool. Mas onde guardo meus arquivos? Podemos criar volumes dentro do Pool e é isso que vamos ver.

 

Criando Volumes no Pool

Volumes aqui também são chamados de ZVOL. ZVOL é um dispositivo de bloco ou, em inglês, block device. Já temos um post falando sobre o que é Block Device, clique aqui. ZVOL é uma espécie de block device que pega/usa espaço do pool.

Irei criar uma pasta chamada “documentos” para trabalharmos

elder@server02:~$ sudo mkdir /documentos

Criaremos as subpastas “planilhas” e “contratos” dentro de /documentos

elder@server02:~$ sudo mkdir /documentos/planilhas
elder@server02:~$ sudo mkdir /documentos/contratos

Somente para teste iremos dá permissão total(777)

elder@server02:~$ sudo chmod -R 777 /documentos

Vamos criar novamente o pool meuPool espelhado(mirror)

elder@server02:~$ sudo zpool   create meuPool mirror sdb sdc

vamos ver listar e vermos o tamanho do nosso pool com “sudo zpool list”

elder@server02:~$ sudo zpool list
NAME      SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
meuPool    80M   110K  79,9M        -         -     3%     0%  1.00x    ONLINE  -

Podemos ver que mesmo cada dispositivo físico tendo 100 mb aqui foi usado apenas 80MB.

Vamos criar os volumes

 

  1. Criando o volume “planilhas” e montaremos  em /documentos/planilhas
    elder@server02:~$ sudo zfs create -o mountpoint=/documentos/planilhas meuPool/planilhas
  2. Criando o volume “contrados” e montaremos  em /documentos/contratos
    elder@server02:~$ sudo zfs create -o mountpoint=/documentos/contratos meuPool/contratos
  3. Visualize os volumes montados
    elder@server02:~$ df -h
    Sist. Arq.         Tam. Usado Disp. Uso% Montado em
    .......
    meuPool             40M  128K   40M   1% /meuPool
    meuPool/planilhas   40M  128K   40M   1% /documentos/planilhas
    meuPool/contratos   40M  128K   40M   1% /documentos/contratos

    Vamos usar “df -hT” para vermos o tipo dos volumes, que nesse caso é zfs.

    elder@server02:/documentos/contratos$ df -hT
    Sist. Arq.        Tipo      Tam. Usado Disp. Uso% Montado em
    .......
    meuPool           zfs        40M  128K   40M   1% /meuPool
    meuPool/planilhas zfs        40M  128K   40M   1% /documentos/planilhas
    meuPool/contratos zfs        40M  128K   40M   1% /documentos/contratos
    

Agora podemos guardar nossos arquivos dentro dos volumes montados.

 

Conclusão

Aqui vimos o básico de como criar pools e volumes dentro desse. Iremos prosseguir com demais etapas. Uma delas é o snapshot. Snapshot é um dos fatores principais que levam os usuário a mudarem para sistemas com ZFS nativo, como é o FreeBSD.

É bom frisar que o pool criado acima não possui permissão acl ativada. Para ativar pasta executar:

 zfs set xattr=sa meuPool

 zfs set acltype=posixacl meuPool

 

Fontes: pthree.org,

Leitor voraz e um dos administradores do GNU/Linux Brasil no Whatsapp, facebook, youtube e nesse dito site: www.gnulinuxbrasil.com.br

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *