Bom, este é o começo da utilização do ZFS, saber criar os POOLs, ou seja, os grupos de discos (ou o disco) para abrigar os sistemas de arquivos ZFS. É meio complicado entender de cara isso, mas no decorrer deste primeiro artigo garanto que isso ficará claro.
Para o melhor entendimento, vamos simular uma situação comum de hoje. Possuímos 4 discos rígidos (Hds) de 750Gb cada, e desejamos criar um sistema RAID e tornar destes 4 discos um só volume possuindo a soma do espaço em disco dos 4. Neste nosso caso teríamos 4 x 750, que seria aproximadamente 3Tb de espaço em disco, legal isso né?
Para realizar este feito nos dias de hoje, sem utilizar ZFS, precisaríamos dos 4 discos (obvio), uma controladora RAID SATA ou SCSI (dependendo dos discos), uma regra para criação do volume de 3Tb, o particionamento do volume de 3Tb e a formatação do mesmo. Trabalhoso e demorado isso não? Poise, com o ZFS a coisa é um pouco diferente, pois o mesmo cria o POOL e automaticamente torna o volume total de 3Tb como um sistema de arquivos ZFS. Isso mesmo, não precisamos particionar, nem formatar, montar, etc, basta criar o POOL ZFS com a ferramenta baseada em linha de comando ZPOOL. Para satisfazer nossa situação, passarei os comandos abaixo, tendo como discos 4 arquivos previamente criados em nosso Linux (pra que ter 4 Discos de 750Gb se podemos aprender sem gastar nada =D ), onde cada arquivo possuirá 750Mb (imagine Gb, hehe).Vamos a criação dos arquivos:
Crie um diretório no seu HD para criar os arquivos, vou usar /dsk como exemplo OK?
[root@localhost /]# mkdir /dsk
[root@localhost /]# dd if=/dev/zero of=/dsk/disco1 bs=1M count=750
[root@localhost /]# dd if=/dev/zero of=/dsk/disco2 bs=1M count=750
[root@localhost /]# dd if=/dev/zero of=/dsk/disco3 bs=1M count=750
[root@localhost /]# dd if=/dev/zero of=/dsk/disco4 bs=1M count=750
Feito isso, já teremos nossos discos e então vamos à criação do POOL ZFS..!
[root@localhost /]# zpool create CIALINUX /dsk/disco{1,2,3,4}
Ao conferir “o estrago feito”, podemos ver que temos um volume denominado CIALINUX, montado automaticamente em nosso diretório raiz, na pasta CIALINUX ( /CIALINUX ).
[root@localhost /]# df -h |grep CIALINUX
CIALINUX 2,9G 18K 2,9G 1% /CIALINUX
A ferramenta ZPOOL é bem simples de se utilizar, e bem intuitiva, e logo podemos compreender que o comando segue a sintaxe:
zpool [ação] [pool] [argumentos] ou em alguns casos zpool [ação] [pool]
Continuando em nosso mais novo POOL, vale salientar que este volume de discos não possui nenhum recurso de ganho de desempenho ou segurança nos dados, pois nada mais é que a união de 4 discos formando um único volume, onde o I/O e escrita nos discos é conforme disponibilidade (o que tiver sem requisição de I/O é escrito/lido). Este método é muito semelhante ao método JBOD³ de concatenação de discos, realizado em algumas situações de “RAID” via software ou hardware. Bom, temos um volume de discos totalizando 2,91Gb (em nosso sonho seria Tb 🙂 ), e basta utilizá-lo através do ponto de montagem /CIALINUX, realizando alguns testes de escrita de dados para validarmos a funcionalidade da ferramenta ZPOOL para monitorar-mos a utilização do espaço em disco, disponibilidade do grupo de discos, enfim, ter um parecer de nosso “filhote”. Para estes fins, devemos utilizar as opções list, status ou status -x, onde:
list Lista de forma clara os POOLs de discos existentes, informando como saída padrão informações, tais como o nome, tamanho total, espaço usado, espaço disponível e raiz alternativa para o POOL se existir. Segue um exemplo:
[root@localhost /]# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
CIALINUX 2,91G 76,5K 2,91G 0% ONLINE –
status Lista de forma mais detalhada informações sobre um POOL em específico, dando noção do estado “de vida” do conjunto de discos, os discos utilizados, se há erros de check-sum em arquivos, etc. Exemplo:
[root@localhost /]# zpool status
pool: CIALINUX
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
CIALINUX ONLINE 0 0 0
/dsk/disco1 ONLINE 0 0 0
/dsk/disco2 ONLINE 0 0 0
/dsk/disco3 ONLINE 0 0 0
/dsk/disco4 ONLINE 0 0 0
errors: No known data errors
status -x Lista de forma realmente básica a situação de vida de um POOL, informando somente se o mesmo está ativo, funcional, etc. Exemplo:
[root@localhost /]# zpool status -x
all pools are healthy
Para eliminarmos (destruir) um POOL e todo o seu conteúdo, o comando é ainda mais excitante 🙂 :
[root@localhost /]# zpool destroy CIALINUX
Pronto, o POOL de discos e seus respectivos dados foram para o espaço. Não se alarmem, mais adiante será mostrado como recuperar POOLs de discos e seus dados em caso de um destroy acidental, afinal, um comando destrutivo destes não pode ser tão precário assim…
Este é o funcionamento básico da ferramenta ZPOOL, que possibilita de forma rápida e fácil criar, destruir e monitorar os grupos de discos denominados POOLs. Abaixo, podemos conferir um vídeo criado especialmente para complementar o conteúdo acima, e ver a coisa realmente funcionando.
<iframe width=”560″ height=”315″ src=”https://www.youtube.com/embed/Tof7MAhBt8k” frameborder=”0″ allowfullscreen></iframe>
Nos próximos posts, a coisa vai começar a ficar ainda melhor… =D
Abraços e até a próxima.
Por: Franklin Moretti
Discordo do ZFS ser igual a um JBOD. é um sistema muito superior pois utiliza Dynamic striping para dividir os blocos em todos os vdevs, assim consegue atingir a maior performance de transferência de I/O , e também balanceia a carga de gravação entre todos os vdevs.
ele utiliza o método de gravação nos vdevs chamado Copy-on-write que é evolução do método de gravação utilizado no sistema RAID5 assim eliminando o bug chamado buraco de gravação que existe no raid5.
mais informações.
http://en.wikipedia.org/wiki/ZFS
o JBOD consiste em juntar os discos e ir gravando neles de forma linear, ou seja enchendo 1 depois o outro e depois o outro.
mais informações sobre JBOD
http://en.wikipedia.org/wiki/JBOD#Concatenation_.28SPAN.29
Olá William, muito obrigado por contribuir comentando nosso artigo. Entendi perfeitamente suas colocações e concordo plenamente, porém, citei o JBOD apenas como referência para entender que no artigo não utilizei nenhum recurso de desempenho extra ou segurança, pois não fiz uso do método RAIDZ e MIRROR, compreende? os método de RAIDZ e MIRROR mostrarei nos artigos futuros. Em resumo a idéia é que sem a especificação do método de RAIDZ ou MIRROR é apenas a união de discos. Caso eu esteja errado, por favor me corrija, pois estou contribuindo enquanto ainda estou apresendendo.
Conto com você para nos ajudar sempre…
Abraços..
MIRROR é RAID 1 ( espelhamento )
utiliza a técnica de gravação copy-onw-rite para melhorar a performance de gravação no disco basicamente 2 Discos = 1 Disco.
RAIDz é o famoso RAID5 ( N-1 )
Utilizando a tecnologia copy-on-write que elimina o bug do write hole que existe no RAID5.
RAIDz2 é o RAID6 ( N-2 )
Utiliza 2 discos de paridade. ideal para Zpool com mais de 10 Discos.
Acredito que você ira falar sobre os hot-spare futuramente em um outro post deixo este comentário para o post
Ok, muito obrigado..!
Abraços..!
Olá Franklin! Parabéns pelo post, ficou nota 10!
Você vai divulgar mais artigos sobre ZFS? Tenho tido um pouco de dificuldades para encontrar artigos e tutoriais PRÁTICOS sobre o uso do ZFS. Veja se pode me ajudar!
Tenho um servidor com 3 HDs. Um dos HDs está instalado o Freebsd8 e todas as aplicações necessárias. Os outros dois HDs encontram-se vazios. Eu pensei em fazer um RAID-1 (espelhamento) com esses dois HDs vazios e usar para armazenar alguns documentos específicos, afim de garantir que, caso um HD queimar esses arquivos estarão 100% íntegros e disponíveis, sem interrupção. Dei uma olhada em RAID-Z e em ZFS e pensei em utiliza-los para isso. Tem aguma sugestão? Conhece algum tutorial que explique como fazer isso?
Tenho outra dúvida também. Eu gostei do fato de poder gerar snapshots usando o ZFS. Como isso funciona? Onde ele armazena esse snapshot? Como faço para gerar? E para recuperar? E para listar?
Espero que possa me ajudar com seus conhecimentos! Um abraço!
Paulo