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:
- disco: é o padrão. São os dispositivos físicos(HDs….)
- arquivo: Caminho absoluto para um arquivo de imagem(.ISO por exemplo)
- 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.
- 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.
- raid1, raid2, raid: raid com tolerância a falhas e com distribuição baseada em paridade.
- cache: dispositivo usado como L2ARC(Level 2 Adaptative Read Cache). Se trata de um dispositivo que podemos adicionar e será usado para cache.
- 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.
- 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!
- 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
- Destruindo o pool
elder@server02:~$ sudo zpool destroy meuPool
- Um pool espelhado(mirror)
elder@server02:~$ sudo zpool create meuPool mirror sdb sdc
- 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
- 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
- Criando o volume “planilhas” e montaremos em /documentos/planilhas
elder@server02:~$ sudo zfs create -o mountpoint=/documentos/planilhas meuPool/planilhas
- Criando o volume “contrados” e montaremos em /documentos/contratos
elder@server02:~$ sudo zfs create -o mountpoint=/documentos/contratos meuPool/contratos
- 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,