A – ZFS Parte 1

01/07/2015 Marco Carvalho de Oliveira 15 min de leitura

ZFS Imagem retirado de Tweakers

Por que não começar com a introdução da Wikipedia sobre ele

ANTES: VOU REPETIR E DESTACAR, E SALIENTAR 2001 é o ano de origem do ZFS, das ideias e planejamentos qualquer outra coisa que venha depois é mera cópia como produtos chineses !! Ele foi anunciado oficialmente em setembro de 2004, e lançado em novembro de 2005.

ZFS é uma combinação de sistema de arquivos e volume de manipulação lógica desenhado pela Sun Microsystems. As propriedades do ZFS incluem proteção contra corrupção de dados, suporte para altas capacidades de armazenamento, eficiente compressão de dados, integração de conceitos de sistemas de arquivos e volumes lógicos, suporte a snapshots e clones com cópia quando escreve, continua checagem de integração e automática recuperação, RAID-Z e nativo suporte a ACLs em NFSv4.

Masss ohh como assim muito lindo, bonito, mas calma vamos argumentar em Linux termos :P

Digamos assim, ZFS sozinho tem a função do EXT4 + LVM. Só que com uma solução única, logo nada de precisar aprender pvcreate, vgextend, mkfs.ext4, softwares distintos…

A empresa do Sol sempre iluminando as pessoas, apesar de que muitos acreditam que o Java foi uma criação do mal :P huahuah. Pena que o oráculo comprou o sol, e ficamos sem o sol que iluminava nossas comunidades de código aberto, umas das primeiras grandes façanhas do oráculo foi alterar a licença do ZFS, e +- assassinar e restringir suas novas funcionalidades apenas para o Solaris. Nesta brincadeirinha vimos nascer o OpenSolaris, tá mas pq isto .. esta historia .. é só para explicar e contextualizar quem hoje desenvolve o core do ZFS de código aberto, e entender que o ZFS de código aberto é baseado na versão 28 do ZFS, e que o ZFS do Solaris é diferente do ZFS de código aberto. Bom o oráculo, e a própria comunidade matou o projeto +- open Solaris com parceria oráculo, mas alguns dos grandes destemidos guerreiros do código aberto criaram um novo projeto um novo grupo, o OpenInidiana/Illuminis. E dentre dele temos as melhores funcionalidades de código aberto do Solaris, e temos o grupo responsável pelo OpenZFS.

Logo OpenZFS é o cara huahua XP

Ainda em termos de Linux vamos argumentar um pouco aquela pequena frase o seguinte trecho das funcionalidades:

“As propriedades do ZFS incluem proteção contra corrupção de dados e continua checagem de integração e automática recuperação.”

Isto significa não tem fsck, não precisa fazer, isto o sistema é inteligente e executa este processo de forma automática, de acordo com o uso. OHHhhhhh :), claro que nem tudo é a perfeição como se dizem, mas ele já evita vários tipos de erros.

E este tal de snapshot o_o, é uma foto do disco?

SIM!!!!!!!!!!!!!!!!!!!!!! isto mesmo .. algo que outros sistemas de arquivos demoraram tanto para fazer .. é uma forma prática de copiar todos os dados de um disco, e se necessário reutilizar ou fazer um rollback de todo o disco panap punm :P em segundos tá feito :)

Em palavras práticas, temos um backup completo com estado do disco, mais ou menos como snapshots de um ambiente virtualizado como Vmware/XEN/Virtualbox … e podemos transporta este disco para onde acharmos melhor.

Brincado com mitos O_O .. ZFS é um monstro comedor de RAM como o nosso querido café JAVA. FreeNAS mito :P, não .. gostaria que fosse assim, mas certas funcionalidades do ZFS como o copy-write fazem uso de alto consumo de RAM, não temos como evitar isto pois deixamos os dados e informações em RAM e acabamos passando gradativamente para o lento disco. Quanto de RAM preciso .. o_O 4GB é muito mais do que suficiente, e conhecendo os parâmetros conseguimos tirar os melhores benefícios deste filesystem. Lembrando que estamos falando de um filesystem parrudo para storages e NAS, não :P é brincadeira de criança, estamos falando de tecnologias de adulto, daqueles caras que gostam de tunar o carro para pegar 1km/hora a mais, e colocar aqueles xeons no seu SO. Se você não uma pessoa deste tipo :P volte para o seu windows ou para …… :).

Certo, pessoas como eu, quase humanos normais, seja a classe personagem programador, administrador de rede, usuário avançado, nerd, geek, conseguiria tirar melhor proveito disto ou sentiria a diferença no desktop? O_O vou ser prático em desempenho não.. não vamos mentir, qualquer sistema decente rodando programas decentes, acaba utilizando a RAM para tudo, e apenas quando necessário faz acesso ao filesystem. E nossa a RAM é vezes mais rápida mãos ou olhos conseguiriam acompanhar, logo não você não sentira tanta diferença. É sempre bom também explicar, de nada adianta você criar várias formas de tunning e melhora de desempenho no seu SO, se o programa que você roda é tosco e usa muito do disco, toda hora fazendo chamadas de escrita em disco, isto é burrice, isto me lembra o Caetano Veloso falando sobre o sue programa tosco ( https://www.youtube.com/watch?v=rzgQZYO9Lko ), ou se aplicação depender toda hora de rede e de muitos dados da rede e você tem um 3G ou uma ADSL lenta da OI.

Comentário random .. ohhh mas o systemd agora liga 10 segundos mais rápido o meu computador!!! sou foda, :P .. foda é não precisar desligar o computador Xp toda hora para sentir este grande ganho de desempenho hauhuahuahuahuuh --- echo "flamewars" >> /dev/null

Voltando ao foco ZFS, vamos brincar um pouco com ele.

A ideia neste texto é utilizar o Virtualbox para virtualizar(Ohhhh!!! jurava que era para desenhar huahua ) e efetuar os testes, logo não vamos sentir os ganhos de desempenho pois estamos trabalhando com as abstrações de virtualização, logo estamos apenas tomando como referência para o aprendizado, então caros leitores isto não refleti a realidade, e tudo que você ler aqui não poderá ser utilizado em tribunais de discussões de flamewars. Nosso ambiente de teste será utilizado o FreeBSD 10.1 .. a pq não usa o upstream com o 11, o_o como diria o policia militar Bruno “Por que eu quis!!” ( https://www.youtube.com/watch?v=maplYUD9vUc )

Informação interessante a partir do FreeBSD 10 já vem com a opção de utilizar o ZFS como filesystem padrão do seu SO ;) , mas não vamos usar XP para este laboratório, logo tenha uma instalação com UFS ou ZFS, e vamos adicionar novos discos virtuais. Marco, marco, como faço para criar um disco virtual e adicionar no Virtualbox .. simples :) procura no google se ele não souber te responder contrata alguém, menos eu .. XP existem coisas que as pessoas negam a se fazer esta é uma que me nego, já basta as coisas que rotineiramente tenho que fazer no meu trabalho para alguns usuários, é diferente pois recebo para isto. Aqui escrevo para descontrair :), e ajudo as pessoas com software livre pq é divertido :).

Crie uma instalação do FreeBSD 10: Adicione 4 discos virtuais com 2GB de espaço

Agora vamos a grande configuração do serviço no temido BSD modelo de serviço

# echo 'zfs_enable="YES"' >> /etc/rc.conf

Sim é fácil o_o, e indolor, inodoro e tudo mais ..

# service zfs start

Sim vou admitir ;P o comando service foi algo que o FreeBSD copiou do mundo GNU/Linux .. mas convenhamos é muito prático

Agora vamos ver o nosso lindo módulo do kernel zfs carregado :P

# kldstat

root@:/dev # kldstat Id Refs Address Size Name 1 10 0xffffffff80200000 1755658 kernel 2 1 0xffffffff81a11000 16a652 zfs.ko 3 1 0xffffffff81b7c000 398b opensolaris.ko

Se ele está carregado significa que está tudo certo, seu kernel foi compilado com ele como módulo :o .. a ideia foi mais mostrar alguns comandos diferentes do Linux .. para os leitores ;) agora já sabem que é kldstat para mostrar os módulos carregados …

Agora vamos fazer algo mágico :P não se assustem zpool create piscina /dev/ada1

Tananan estamos com nossa piscina com um disco :O Ohhhh

root@:/dev # df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ada0p2 19278236 2944704 14791276 17% / devfs 1 1 0 100% /dev piscina 2015708 19 2015689 0% /piscina

Você vai me dizer que já esta pronto o meu filesystem com ZFS e que já posso criar arquivos e escrever.

SIM O_O, e você que achava que FreeBSD é difícil, faça isto ;P com Linux

Mas não tem que ir no cfdisk, criar uma partição do tipo LVM, criar um pvcreate e associar o disco, depois criar um vggroup, dai no vggroup criar uma partição LVM e então formatar o disco com a o FHS que você vai usar como EXT4 ou XFS.

A resposta é não :)

Mas não tenho nem que montar a partição do disco formatado que eu fiz ?

Não ele monta a piscina sozinho já está pronto para escrita depois do comando zpool. Nada de dar aquele comando mount -t auto /dev/sda1 /disco

Tá mas e aqueles conceitos de partição raiz, que só podia ter quatro, dai partições estendidas e toda aquela ladainha.O_o não precisa estamos em 2015, o mundo mudou gpt, usar o disco todo .. outras maneiras de pensar e agir

Teste você mesmo :P

root@:/ # touch /piscina/meu-primeiro-arquivo-no-zfs root@:/ # ls /piscina/ meu-primeiro-arquivo-no-zfs root@:/ #

Certo agora vem um momento mágico contra insetos, raid moment!! Antes vamos destruir nossa piscina

root@:/ # mount /dev/ada0p2 on / (ufs, local, journaled soft-updates) devfs on /dev (devfs, local, multilabel)

root@:/ # zpool create storage raidz ada1 ada2 ada3 root@:/ # mount /dev/ada0p2 on / (ufs, local, journaled soft-updates) devfs on /dev (devfs, local, multilabel) storage on /storage (zfs, local, nfsv4acls)

Agora vamos ver como esta nossa nova piscina :)

root@:/ # zpool status pool: storage state: ONLINE scan: none requested config:

NAME STATE READ WRITE CKSUM storage ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 ada1 ONLINE 0 0 0 ada2 ONLINE 0 0 0 ada3 ONLINE 0 0 0

errors: No known data errors

Sim um comando, 1 filesystem, um software raid, no modo mirroring 5 simples assim Nada complicado, uma nova abstração um novo mundo uhuulll o/

Calma e se eu quisesse aumentar a performance e fazer um mega storage de alto desempenho para escrita juntando todos IO de disco fazendo stripped o_o como faria

root@:/tmp # zpool create espelho-magico ada1 ada2 ada3 root@:/tmp # zpool status pool: espelho-magico state: ONLINE scan: none requested config:

NAME STATE READ WRITE CKSUM espelho-magico ONLINE 0 0 0 ada1 ONLINE 0 0 0 ada2 ONLINE 0 0 0 ada3 ONLINE 0 0 0

errors: No known data errors

Gostaria eu de ter o hardware para testar a performance dos espelhos .. o_o mas não tenho .. testar em ambiente virtualizado não vai mostrar a realidade visto que discos virtuais e blah blah.

Ainda brincando com espelhos por que não criarmos um mirror original, um reflexo de um disco no outro ;P!

root@:/tmp # zpool destroy espelho-magico root@:/tmp # zpool create espelho mirror ada1 ada2 root@:/tmp # zpool status pool: espelho state: ONLINE scan: none requested config:

NAME STATE READ WRITE CKSUM espelho ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ada1 ONLINE 0 0 0 ada2 ONLINE 0 0 0

errors: No known data errors

Pronto espelho mágico, criado :)

O_O e digamos de uma hora para outra, em um natal divino, qualquer o papai noel deixa uma caixa de presente mais um hd para você :O um hot-swap * - * e vc vai no seu super computador e adiciona ele :P. Como vou fazer para adicionar ele no meu seu nossa piscina e ter um raid com cópia dos nossos dados.Simples como tudo que envolve ZFS.

Primeiro vamos destruir o nosso espelho antigo

root@:/tmp # zpool destroy espelho

Agora vamos criar uma piscina com um disco

root@:/ # zpool create natal ada1 root@:/ # zpool status pool: natal state: ONLINE scan: none requested config:

NAME STATE READ WRITE CKSUM natal ONLINE 0 0 0 ada1 ONLINE 0 0 0

Agora vamos adicionar o nosso novo disco ;)

root@:/ # zpool attach natal ada1 ada2 root@:/ # zpool status pool: natal state: ONLINE scan: resilvered 52K in 0h0m with 0 errors on Sat May 2 21:36:07 2015 config:

NAME STATE READ WRITE CKSUM natal ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ada1 ONLINE 0 0 0 ada2 ONLINE 0 0 0

errors: No known data errors

O_o como viram não precisei desligar nada, foi tudo online :D .. sem paradas tudo no quente. O comando attach fará que o disco1 faça espelho do disco 2. Caso quisesse apenas adicionar ele no modo stripped em vez de attach utilizaríamos o comando zpool add.

Eis que chega o seu aniversário e você ganha mais dois discos . O que fazer? Por que não ter um espelho do seu espelho.

root@:/ # zpool add natal mirror ada3 ada4 root@:/ # zpool status pool: natal state: ONLINE scan: resilvered 52K in 0h0m with 0 errors on Sat May 2 21:46:29 2015 config:

NAME STATE READ WRITE CKSUM natal ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ada1 ONLINE 0 0 0 ada2 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 ada3 ONLINE 0 0 0 ada4 ONLINE 0 0 0

errors: No known data errors

Pronto agora temos um espelho do espelho, criando um ambiente de alta disponibilidade nos discos que ganhamos no natal.

Agora e as grandes e inovadores funcionalidades do ZFS, bom :) vou deixar para uma segunda parte pois este texto já ficou muito grande.

Referências: [1] https://2007.asiabsdcon.org/papers/P16-slides.pdf - Porting ZFS filesystem to Freebsd [2] https://wiki.freebsd.org/ZFSQuickStartGuide ZFSQuickGuide [3] https://www.freebsd.org/doc/handbook/zfs.html - Chapter 20. The Z File System (ZFS) - FreeBSD Handbook :P [4] http://docs.oracle.com/cd/E26505_01/html/E37384/index.html - Oracle Solaris ZFS Administration Guide [5] http://pt.slideshare.net/tchelinux/zfs-4496934 - case bem interessante de um usuário de vários filesystem falando sobre todos e o motivo da adoção do ZFS por ele com o Opensolaris. [6] http://pt.slideshare.net/mewandalmeida/zfs - Ótimo texto da SUN sobre ZFS [7] http://pt.slideshare.net/billhathaway/zfs-in-30-minutes?next_slideshow=3 - ZFS in 30 minutes .. não preciso falar mais nada ;D