{"id":4136,"date":"2015-08-19T15:40:06","date_gmt":"2015-08-19T18:40:06","guid":{"rendered":"https:\/\/www.viazap.com.br\/?p=4136"},"modified":"2015-08-29T21:26:12","modified_gmt":"2015-08-30T00:26:12","slug":"zfs-no-gnulinux","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=4136","title":{"rendered":"ZFS NO GNU\/LINUX"},"content":{"rendered":"<h1>INTRODU\u00c7\u00c3O<\/h1>\n<p>&nbsp;<\/p>\n<div>\n<p><em>ZFS<\/em> \u00e9 um sistema de arquivos livre, desenvolvido pela <em>Sun Microsystems<\/em> (atualmente Oracle) para seu sistema operacional Solaris. O significado original era Zettabyte File System, por\u00e9m agora \u00e9 um pseudo-acr\u00f4nimo.<\/p>\n<p>As caracter\u00edsticas do ZFS incluem grande capacidade de armazenamento, integra\u00e7\u00e3o de conceitos de sistema de arquivos e administra\u00e7\u00e3o de volumes (LLVM), RAID via software, nova estrutura de dados no disco, sistema de arquivos de r\u00e1pido acesso, administra\u00e7\u00e3o de espa\u00e7os de armazenamento eficiente, compress\u00e3o dos dados eficiente (LZMA ou GZIP), seguran\u00e7a e prote\u00e7\u00e3o contra corrup\u00e7\u00e3o dos dados, checagem cont\u00ednua da integridade dos dados com repara\u00e7\u00e3o autom\u00e1tica, instant\u00e2neos (snapshots), implementa\u00e7\u00e3o nativa NFSv4 ACLs.<\/p>\n<p>Tudo isso de forma f\u00e1cil e com a mesma ferramenta de administra\u00e7\u00e3o do sistema de arquivos.<\/p>\n<\/div>\n<div>\n<p><!--more--><\/p>\n<h1>CARACTER\u00cdSTICAS DO ZFS<\/h1>\n<p><strong>1. Integridade dos dados<\/strong><\/p>\n<p>Uma das principais caracter\u00edsticas que distingue ZFS dos demais sistemas de arquivos \u00e9 seu foco na integridade dos dados.<\/p>\n<p>Todos os ponteiros com blocos de um sistema de arquivos cont\u00e9m um checksum (fletcher4 ou SHA-256) sobre o bloco apontado, que \u00e9 checado ao se ler o bloco. Se houver diverg\u00eancia com o checksum, o sistema de arquivos consegue corrigir os dados automaticamente se houver outra c\u00f3pia dispon\u00edvel (Mirror, RAID-Z, journal\/ZIL ou ent\u00e3o redund\u00e2ncia no mesmo volume). Tudo isso de forma autom\u00e1tica e online, sem necessitar desmontar o volume como nos sistemas que utilizam-se da ferramente fsck (etx3, etx4 etc.).<\/p>\n<p>Isso torna o sistema de arquivos extremamente eficiente contra a bad blocks e dados corrompidos.<\/p>\n<p><strong>2. Capacidade de armazenamento<\/strong><\/p>\n<p>ZFS \u00e9 um sistema de arquivos de 128 bits, ou seja, suporta 1,84 \u00d7 10^19 vezes a capacidade de um sistema de arquivos de 64 bits como o BTRFS. Os limites de ZFS est\u00e3o desenhados para ser t\u00e3o grandes que n\u00e3o se encontram nunca na pratica. Sobre a capacidade do sistema, Jeff Bonwick, o arquiteto chefe da Sun para ZFS, disse: &#8220;Criar um sistema de arquivos de 128 bits excederia os limites qu\u00e2nticos de armazenamento da terra.&#8221;<\/p>\n<p>Alguns limites te\u00f3ricos do ZFS:<\/p>\n<ul>\n<li>2^48 &#8211; n\u00famero de entradas em um diret\u00f3rio individual<\/li>\n<li>2^64 bytes &#8211; tamanho m\u00e1ximo de um arquivo<\/li>\n<li>2^64 bytes &#8211; tamanho m\u00e1ximo de qualquer atributo<\/li>\n<li>2^78 bytes &#8211; tamanho m\u00e1ximo de um pool<\/li>\n<li>2^56 &#8211; n\u00famero de atributos de um arquivo<\/li>\n<li>2^64 &#8211; n\u00famero de dispositivos em qualquer pool<\/li>\n<li>2^64 &#8211; n\u00famero de pools em um sistema<\/li>\n<li>2^64 &#8211; n\u00famero de sistemas de arquivos em um pool<\/li>\n<li>2^128 bytes (340,282,366,920,938,463,463,374,607,431,768,211,456 bytes) &#8211; capacidade m\u00e1xima de armazenamento<\/li>\n<\/ul>\n<p>Como exemplo das capacidades expressadas por estes n\u00fameros, se um indiv\u00edduo criasse 1000 arquivos por segundo, levaria 8925,51 anos para alcan\u00e7ar o limite imposto pelo n\u00famero de arquivos (2^48) em um diret\u00f3rio.<\/p>\n<p><strong>3. Modelo transacional (Copy-on-write)<\/strong><\/p>\n<p>ZFS utiliza um modelo transacional copy-on-write. Todos os ponteiros com blocos de um sistema de arquivos cont\u00e9m um checksum (fletcher ou SHA-256) sobre o bloco apontado, que se comprova ao ler o bloco. Os blocos que cont\u00e9m dados ativos n\u00e3o se sobrescrevem nunca; em seu lugar, se reserva um novo bloco, e os dados modificados se escrevem nele, ent\u00e3o qualquer bloco de metadados que o referencie \u00e9, de modo similar, recuperado e escrito. Para reduzir a sobrecarga deste processo, se agregam varias atualiza\u00e7\u00f5es em grupos de transa\u00e7\u00f5es, e se utiliza um log de eventos quando se necessitam escrituras s\u00edncronas.<\/p>\n<p><strong>4. Snapshots<\/strong><\/p>\n<p>Como ZFS n\u00e3o sobrescreve dados, tomar um instant\u00e2neo (snapshot) simplesmente significa n\u00e3o liberar os blocos utilizados por vers\u00f5es antigas de dados. A vantagem \u00e9 que os instant\u00e2neos se tomam rapidamente e tamb\u00e9m s\u00e3o eficientes desde o ponto de vista do espa\u00e7o, pois compartilham os dados sem modificar com o sistema de arquivos.<\/p>\n<p>Podem ser criados instant\u00e2neos modific\u00e1veis (chamados clones), o que resulta em dois sistemas de arquivos independentes que se criam compartilhando um conjunto comum de blocos. A medida que se realizam trocas os blocos do sistema de arquivos divergem, por\u00e9m os blocos comuns se manter\u00e3o independentemente de quantos clones existam.<\/p>\n<p>\u00c9 poss\u00edvel voltar o sistema de arquivos a um snapshot anterior ap\u00f3s alguma mudan\u00e7a indesejada, o que funciona parecido com pontos de restaura\u00e7\u00e3o do sistema no Windows.<\/p>\n<p><strong>4. Dynamic striping<\/strong><\/p>\n<p>A medida que se anexem dispositivos de armazenamento ao pool, a largura das bandas se expande de forma autom\u00e1tica para inclui-los, de maneira que se utilizam todos os discos no pool para balancear a carga de escritas entre todos os dispositivos.<\/p>\n<p><strong>5. Tamanhos de bloco vari\u00e1vel<\/strong><\/p>\n<p>ZFS utiliza blocos de tamanho vari\u00e1vel at\u00e9 128K. O c\u00f3digo dispon\u00edvel atualmente permite ao administrador ajustar o tamanho m\u00e1ximo de blocos utilizados, pois certas cargas n\u00e3o rendem bem com blocos grandes. Tamb\u00e9m est\u00e1 contemplado um ajuste autom\u00e1tico para adequar-se as caracter\u00edsticas da carga de trabalho.<\/p>\n<p>Se ativar-se a compress\u00e3o se utilizam de tamanhos de bloco vari\u00e1veis, um bloco pode comprimir para que resulte em um bloco de tamanho menor, ent\u00e3o utiliza o bloco pequeno no disco, de maneira que n\u00e3o utilize menos capacidade, sen\u00e3o pode aumentar o throughput de entrada\/sa\u00edda (com isso aumentar a sobrecarga da CPU).<\/p>\n<p><strong>6. Espa\u00e7os de armazenamento (storage pools)<\/strong><\/p>\n<p>A diferen\u00e7a dos sistemas de arquivos tradicionais que residem sobre um s\u00f3 dispositivo subjacente e portanto requerem um gestor de volumes separado quando se precisa um sistema de arquivos maior que o dispositivo, ZFS se apoia em espa\u00e7os de armazenamento virtuais (virtual storage pools).<\/p>\n<p>Os espa\u00e7os se constroem a partir de um ou mais dispositivos virtuais (vdevs), de que cada um \u00e9 o raw device, um mirror (RAID 1) de um ou mais dispositivos, ou um grupo RAID-Z de dois ou mais dispositivos. A capacidade de armazenamento de todos os vdevs est\u00e1 dispon\u00edvel para todos os sistemas de arquivos do pool.<\/p>\n<p>Para limitar a quantidade de espa\u00e7o que um sistema de arquivos pode ocupar, se podem aplicar cotas de disco, e garantir que haver\u00e1 espa\u00e7o dispon\u00edvel para determinado sistema de arquivos. Pode-se fixar uma reserva de disco.<\/p>\n<p><strong>7. Cria\u00e7\u00e3o de sistemas de arquivos de r\u00e1pido acesso<\/strong><\/p>\n<p>A cria\u00e7\u00e3o de um novo sistema de arquivos no interior de um espa\u00e7o de armazenamento ZFS e extremamente r\u00e1pida e f\u00e1cil, muito mais parecida em tempo e esfor\u00e7o a criar um novo diret\u00f3rio em sistema de arquivos tradicional que ao tempo e esfor\u00e7o necess\u00e1rio para criar um novo sistema de arquivos em qualquer outro S.O. tradicional.<\/p>\n<p>Estes sistemas de arquivos podem ter cotas reservadas e outras capacidades de administra\u00e7\u00e3o \u00fateis. Entre os usos poss\u00edveis se encontra a cria\u00e7\u00e3o de um sistema de arquivos separado, n\u00e3o s\u00f3 um diret\u00f3rio, para cada usu\u00e1rio do sistema.<\/p>\n<p><strong>8. Capacidades adicionais:<\/strong><\/p>\n<ul>\n<li>Prioridade I\/O expl\u00edcita com deadline scheduling.<\/li>\n<li>Ordena\u00e7\u00e3o e agrega\u00e7\u00e3o de I\/O globalmente \u00f3tima.<\/li>\n<li>M\u00faltipla e independente prefetch streams com tamanho autom\u00e1tico e detec\u00e7\u00e3o de passos.<\/li>\n<li>Opera\u00e7\u00f5es de Diret\u00f3rio de tempo constante e Paralelo.<\/li>\n<li>Striping din\u00e2mico de discos entre devices.<\/li>\n<li>Tamanho m\u00faltiplo de blocos de disco escolhidos dinamicamente de acordo com os dados e carga de armazenamento.<\/li>\n<li>Escalonamento expl\u00edcito de prioridade de opera\u00e7\u00f5es de E\/S.<\/li>\n<li>Ordena\u00e7\u00e3o de opera\u00e7\u00f5es de E\/S em disco agregada e global.<\/li>\n<li>Streams m\u00faltiplos de independentes de pr\u00e9-aquisi\u00e7\u00e3o de dados com detec\u00e7\u00e3o autom\u00e1tica de demanda.<\/li>\n<li>Snapshots l\u00f3gicos instant\u00e2neos e limitados, segundo padr\u00e3o de McKusick, implementado no UFS2 do FreeBSD pela primeira vez.<\/li>\n<li>Opera\u00e7\u00f5es de diret\u00f3rio em tempo constante e paralelas.<\/li>\n<li>COW (Copy-On-Write), t\u00e9cnica criada no FreeBSD que aumenta performance e seguran\u00e7a nas opera\u00e7\u00f5es de escrita de dados entre \u00e1reas f\u00edsica ou logicamente distintas.<\/li>\n<li>Capacidade de gerenciar RAID via software e LLVM pelo pr\u00f3prio sistema de arquivos.<\/li>\n<\/ul>\n<p>Introdu\u00e7\u00e3o adaptada de:<\/p>\n<ul>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/ZFS\" target=\"_blank\" rel=\"nofollow\">ZFS &#8211; Wikipedia, the free encyclopedia (tradu\u00e7\u00e3o livre)<\/a><\/li>\n<li><a href=\"http:\/\/www.vivaolinux.com.br\/artigo\/OpenSolaris-Sistema-Operacional-Open-Source?pagina=9\">OpenSolaris &#8211; Sistema Operacional Open Source [Artigo] &#8211; p\u00e1gina 9<\/a><\/li>\n<\/ul>\n<\/div>\n<p>&nbsp;<\/p>\n<h1>INSTALA\u00c7\u00c3O<\/h1>\n<p>&nbsp;<\/p>\n<div>\n<p>Quem utiliza Solaris ou BSD muito provavelmente sabe das in\u00fameras vantagens que este sistema de arquivos pode proporcionar.<\/p>\n<p><em>ZFS<\/em> \u00e9 software livre, por\u00e9m licenciado sob a CDDL (Common Development and Distribution License), o que o torna incompat\u00edvel com a GPL sob a qual \u00e9 licenciado o kernel <a href=\"http:\/\/www.vivaolinux.com.br\/linux\/\">Linux<\/a>.<\/p>\n<p>Desta forma, seria ilegal DISTRIBUIR o c\u00f3digo do ZFS dentro do kernel Linux, mas n\u00e3o UTILIZAR o ZFS como outro software qualquer em separado rodando em sua m\u00e1quina.<\/p>\n<p>Desta forma, foi criada a iniciativa <a href=\"http:\/\/zfsonlinux.org\/\" target=\"_blank\" rel=\"nofollow\">zfsonlinux<\/a> que produziu suporte compat\u00edvel ao kernel Linux, e que \u00e9 considerado est\u00e1vel desde 2013.<\/p>\n<p>Dentre as principais distribui\u00e7\u00f5es Linux, Ubuntu, Gentoo e Arch Linux tem \u00f3timo suporte ao ZFS, permitindo a instala\u00e7\u00e3o \u00e0 partir de seus pr\u00f3prios reposit\u00f3rios. O Slackware tamb\u00e9m tem documenta\u00e7\u00e3o dispon\u00edvel para utilizar ZFS de diversas formas.<\/p>\n<p>Para quem precisa apenas de acessar um sistema de arquivos, existe tamb\u00e9m o ZFS-FUSE, que se utiliza do FUSE (Filesystem in Userspace), por\u00e9m para utilizar o sistema de forma completa com todas suas vantagens \u00e9 necess\u00e1rio habilitar o suporte no kernel, que \u00e9 a finalidade deste artigo.<\/p>\n<h1>INSTALANDO O ZFS<\/h1>\n<p>Para utilizar o ZFS no Linux voc\u00ea deve instalar dois pacotes: SPL e ZFS.<\/p>\n<p>O <em>SPL<\/em> (Solaris Porting Layer) \u00e9 um m\u00f3dulo para o kernel Linux entender a API do kernel Solaris. Essa camada de emula\u00e7\u00e3o torna poss\u00edvel executar c\u00f3digo Solaris no kernel Linux com m\u00ednima modifica\u00e7\u00e3o. O ZFS \u00e9 o m\u00f3dulo do sistema de arquivos.<\/p>\n<p>O ZFS em sua vers\u00e3o 0.6.4 \u00e9 compat\u00edvel com o kernel Linux desde a vers\u00e3o 2.6.32 at\u00e9 a 3.19.<\/p>\n<p>Tamb\u00e9m \u00e9 necess\u00e1rio ter instalado em seu sistema os kernel sources e headers na mesma vers\u00e3o. S\u00e3o recomendados sistemas com processadores x86_64 e com mem\u00f3ria RAM suficiente (&gt;2 GB) para \u00f3tima performance.<\/p>\n<p>Tamb\u00e9m \u00e9 necess\u00e1rio ter os pacotes de desenvolvimento b\u00e1sicos instalados, o que de forma geral, em uma distribui\u00e7\u00e3o Debian-like, seria instalado com algo do tipo:<\/p>\n<p><strong>$ sudo apt-get install build-essential gawk alien fakeroot linux-headers-$(uname -r)<\/strong><br \/>\n<strong>$ sudo apt-get install zlib1g-dev uuid-dev libblkid-dev libselinux-dev parted lsscsi wget<\/strong><\/p>\n<p>Se voc\u00ea utiliza uma distribui\u00e7\u00e3o como Slackware em sua instala\u00e7\u00e3o full, tudo que voc\u00ea precisar j\u00e1 est\u00e1 instalado, por\u00e9m neste caso provavelmente voc\u00ea j\u00e1 deve saber o que fazer.<\/p>\n<p>N\u00f3s vamos fazer uma compila\u00e7\u00e3o b\u00e1sica dos pacotes por\u00e9m tamb\u00e9m h\u00e1 pacotes j\u00e1 dispon\u00edveis em diversas distribui\u00e7\u00f5es e seus respectivos gerenciadores de pacotes:<\/p>\n<ul>\n<li>Arch Linux &#8211; <a href=\"https:\/\/wiki.archlinux.org\/index.php\/ZFS\" target=\"_blank\" rel=\"nofollow\">https:\/\/wiki.archlinux.org\/index.php\/ZFS<\/a><\/li>\n<li>Debian &#8211; <a href=\"http:\/\/zfsonlinux.org\/debian.html\" target=\"_blank\" rel=\"nofollow\">http:\/\/zfsonlinux.org\/debian.html<\/a><\/li>\n<li>Fedora &#8211; <a href=\"http:\/\/zfsonlinux.org\/fedora.html\" target=\"_blank\" rel=\"nofollow\">http:\/\/zfsonlinux.org\/fedora.html<\/a><\/li>\n<li>Funtoo &#8211; <a href=\"http:\/\/www.funtoo.org\/ZFS_Fun\" target=\"_blank\" rel=\"nofollow\">http:\/\/www.funtoo.org\/ZFS_Fun<\/a><\/li>\n<li>Gentoo &#8211; <a href=\"http:\/\/wiki.gentoo.org\/wiki\/ZFS\" target=\"_blank\" rel=\"nofollow\">http:\/\/wiki.gentoo.org\/wiki\/ZFS<\/a><\/li>\n<li>RHEL \/ CentOS \/ SL &#8211; <a href=\"http:\/\/zfsonlinux.org\/epel.html\" target=\"_blank\" rel=\"nofollow\">http:\/\/zfsonlinux.org\/epel.html<\/a><\/li>\n<li>Ubuntu &#8211; <a href=\"https:\/\/launchpad.net\/~zfs-native\/+archive\/stable\" target=\"_blank\" rel=\"nofollow\">https:\/\/launchpad.net\/~zfs-native\/+archive\/stable<\/a><\/li>\n<li>Slackware &#8211; <a href=\"http:\/\/slackbuilds.org\/repository\/14.1\/system\/zfs-on-linux\/\" target=\"_blank\" rel=\"nofollow\">http:\/\/slackbuilds.org\/repository\/14.1\/system\/zfs-on-linux\/<\/a><\/li>\n<\/ul>\n<p>Dito isso, m\u00e3o \u00e0 obra:<\/p>\n<p><strong>$ cd ~<\/strong><br \/>\n<strong>$ wget -c<\/strong> <a href=\"http:\/\/archive.zfsonlinux.org\/downloads\/zfsonlinux\/spl\/spl-0.6.4.tar.gz\" target=\"_blank\" rel=\"nofollow\">http:\/\/archive.zfsonlinux.org\/downloads\/zfsonlinux\/spl\/spl-0.6.4.tar.gz<\/a><br \/>\n<strong>$ wget -c<\/strong> <a href=\"http:\/\/archive.zfsonlinux.org\/downloads\/zfsonlinux\/zfs\/zfs-0.6.4.tar.gz\" target=\"_blank\" rel=\"nofollow\">http:\/\/archive.zfsonlinux.org\/downloads\/zfsonlinux\/zfs\/zfs-0.6.4.tar.gz<\/a><br \/>\n<strong>$ tar -xzvf spl-0.6.4.tar.gz<\/strong><br \/>\n<strong>$ tar -xzvf zfs-0.6.4.tar.gz<\/strong><br \/>\n<strong>$ cd spl-0.6.4<\/strong><br \/>\n<strong>$ .\/configure<\/strong><br \/>\n<strong>$ make<\/strong><br \/>\n<strong># make install<\/strong><br \/>\n<strong>$ cd ..\/zfs-0.6.4<\/strong><br \/>\n<strong>$ .\/configure<\/strong><br \/>\n<strong>$ make<\/strong><br \/>\n<strong># make install<\/strong><\/p>\n<p>That&#8217;s it! Agora voc\u00ea j\u00e1 pode reiniciar o computador e come\u00e7ar a usar ZFS da mesma forma como faria no Solaris ou FreeBSD.<\/p>\n<p>Voc\u00ea ter\u00e1 os execut\u00e1veis:<\/p>\n<ul>\n<li>\/usr\/local\/sbin\/zpool<\/li>\n<li>\/usr\/local\/sbin\/zfs<\/li>\n<\/ul>\n<p>Com os quais far\u00e1 o gerenciamento do ZFS.<\/p>\n<p>Primeiro carregue o m\u00f3dulo:<\/p>\n<p><strong># modprobe zfs<\/strong><\/p>\n<p>E veja se a instala\u00e7\u00e3o est\u00e1 funcionando, com a seguinte sa\u00edda:<\/p>\n<p><strong># zpool status<\/strong><br \/>\n<samp>no pools available <\/samp><\/p>\n<p>Se aparecer algo diferente disso sua instala\u00e7\u00e3o n\u00e3o ocorreu corretamente.<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h1>TUTORIAL B\u00c1SICO<\/h1>\n<p>&nbsp;<\/p>\n<div>\n<p>A seguir est\u00e3o alguns exemplos comandos b\u00e1sicos de gerenciamento do sistema <em>ZFS<\/em>, que \u00e9 feito utilizando as ferramentas zpool e zfs.<\/p>\n<p>Maiores informa\u00e7\u00f5es podem ser encontradas na documenta\u00e7\u00e3o.<\/p>\n<p>Para criar um simples pool sem redund\u00e2ncia em <em>\/dev\/sda1<\/em> e montar em \/example:<\/p>\n<p><strong># mkdir -p \/example<\/strong><br \/>\n<strong># zpool create example \/dev\/sda1<\/strong><\/p>\n<p>Criando um dataset neste pool com compress\u00e3o lzma ativada:<\/p>\n<p><strong># zfs create example\/compressed<\/strong><br \/>\n<strong># zfs set compression=lz4 example\/compressed<\/strong><\/p>\n<p>Desmontar o dataset:<\/p>\n<p><strong># zfs umount example\/compressed<\/strong><\/p>\n<p>Remontar:<\/p>\n<p><strong># zfs mount example\/compressed<\/strong><\/p>\n<p>Criar redund\u00e2ncia de 2 c\u00f3pias neste mesmo dataset:<\/p>\n<p><strong># zfs set copies=2 example\/compressed<\/strong><\/p>\n<p>Destruir tudo o que fizemos:<\/p>\n<p><strong># zfs destroy example\/compressed<\/strong><br \/>\n<strong># zpool destroy example<\/strong><\/p>\n<p>Criar um pool com nome storage que serve como RAID-Z via software com 3 discos:<\/p>\n<p><strong># zpool create storage raidz \/dev\/sda1 \/dev\/sda2 \/dev\/sda3<\/strong><\/p>\n<p>Ou ent\u00e3o um mirror (RAID-1) via software com 2 discos:<\/p>\n<p><strong># zpool create storage mirror \/dev\/sda1 \/dev\/sda2<\/strong><\/p>\n<p>Criar um snapshot do sistema de arquivos para que usemos como ponto de restaura\u00e7\u00e3o:<\/p>\n<p><strong># zfs snapshot storage@15-04-08<\/strong><\/p>\n<p>Reverter para este snapshot:<\/p>\n<p><strong># zfs rollback storage@15-04-08<\/strong><\/p>\n<p>Verificar o status do pool storage:<\/p>\n<p><strong># zpool status storage<\/strong><\/p>\n<pre>pool: storage\r\nstate: ONLINE\r\nscrub: scrub completed with 0 errors on Sat Jan 26 19:57:37 2015\r\nconfig:\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0NAME\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0STATE\u00a0\u00a0\u00a0\u00a0\u00a0READ WRITE CKSUM\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0storage\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ONLINE\u00a0\u00a0\u00a0\u00a0\u00a00\u00a0\u00a0\u00a0\u00a0\u00a00\u00a0\u00a0\u00a0\u00a0\u00a00\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0raidz1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ONLINE\u00a0\u00a0\u00a0\u00a0\u00a00\u00a0\u00a0\u00a0\u00a0\u00a00\u00a0\u00a0\u00a0\u00a0\u00a00\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/dev\/sda1\u00a0\u00a0\u00a0\u00a0ONLINE\u00a0\u00a0\u00a0\u00a0\u00a00\u00a0\u00a0\u00a0\u00a0\u00a00\u00a0\u00a0\u00a0\u00a0\u00a00\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/dev\/sda2\u00a0\u00a0\u00a0\u00a0ONLINE\u00a0\u00a0\u00a0\u00a0\u00a00\u00a0\u00a0\u00a0\u00a0\u00a00\u00a0\u00a0\u00a0\u00a0\u00a00\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/dev\/sda3\u00a0\u00a0\u00a0\u00a0ONLINE\u00a0\u00a0\u00a0\u00a0\u00a00\u00a0\u00a0\u00a0\u00a0\u00a00\u00a0\u00a0\u00a0\u00a0\u00a00\r\n\r\nerrors: No known data errors\r\n\r\n<\/pre>\n<p>Realizar verifica\u00e7\u00e3o dos dados no pool storage:<\/p>\n<p><strong># zpool scrub storage<\/strong><\/p>\n<p>Exportar e importar o pool:<\/p>\n<p><strong># zpool export storage<\/strong><br \/>\n<strong># zpool import storage<\/strong><\/p>\n<p>Para uma lista mais completa das funcionalidades, recomendo o Handbook do FreeBSD sobre o assunto, no qual me baseio para escrever este artigo:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.freebsd.org\/doc\/en_US.ISO8859-1\/books\/handbook\/zfs.html\" target=\"_blank\" rel=\"nofollow\">Chapter\u00a020.\u00a0The Z File System (ZFS) &#8211; freebsd.org<\/a><\/li>\n<\/ul>\n<\/div>\n<p>&nbsp;<\/p>\n<h1>TESTE DO CONCEITO \/ COMPARA\u00c7\u00c3O ENTRE ZFS E BTRFS<\/h1>\n<p>&nbsp;<\/p>\n<div>\n<p>Neste t\u00f3pico vou utilizar uma m\u00e1quina f\u00edsica com Slackware 14.1 e com <em>ZFS<\/em> j\u00e1 instalado. Vou substituir a parti\u00e7\u00e3o home que est\u00e1 em ext4 e colocar em um pool em ZFS com compress\u00e3o ativada e montada automaticamente no boot. \u00c9 apenas um teste das funcionalidades. N\u00e3o me responsabilizo por eventuais perdas de dados. Sempre fa\u00e7a backup.<\/p>\n<p>Inicialmente tenho um disco com duas parti\u00e7\u00f5es em MBR:<\/p>\n<ul>\n<li>\/dev\/sda1 on \/ type ext4 (rw)<\/li>\n<li>\/dev\/sda2 on \/home type ext4 (rw)<\/li>\n<\/ul>\n<p>M\u00e3os \u00e0 obra:<\/p>\n<p><strong># modprobe spl<\/strong><br \/>\n<strong># modprobe zfs<\/strong><br \/>\n<strong># cd \/<\/strong><br \/>\n<strong># umount \/dev\/sda2<\/strong><\/p>\n<p>Se n\u00e3o desmontar sua \/home porque algum programa estiver bloqueando, voc\u00ea pode usar o comando lsof para descobrir qual processo \u00e9 o culpado. Lembro que n\u00e3o poderia estar usando o modo gr\u00e1fico.<\/p>\n<p>Agora a parte que interessa:<\/p>\n<p><strong># dd if=\/dev\/zero of=\/dev\/sda2 bs=1024 count=10<\/strong><br \/>\n<strong># zpool create -o ashift=12 -m legacy myhome \/dev\/sda2<\/strong><br \/>\n<strong># zfs create -o compression=lz4 myhome\/home<\/strong><br \/>\n<strong># zfs set mountpoint=\/home myhome\/home<\/strong><\/p>\n<p>Substitua no seu <em>\/etc\/fstab<\/em> a linha de \/home por:<\/p>\n<div class=\"codigo\">myhome\/home\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/home\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0zfs\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 defaults,noatime\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a02<\/div>\n<p>Monte sua home:<\/p>\n<p><strong># zfs mount -a<\/strong><\/p>\n<p>E coloque para carregar o m\u00f3dulo zfs e spl no boot:<\/p>\n<p><strong># echo &#8220;\/sbin\/modprobe spl&#8221; &gt;&gt; \/etc\/rc.d\/rc.modules<\/strong><br \/>\n<strong># echo &#8220;\/sbin\/modprobe zfs&#8221; &gt;&gt; \/etc\/rc.d\/rc.modules<\/strong><\/p>\n<p>Importar o pool na hora do boot:<\/p>\n<p><strong># echo &#8220;\/usr\/local\/sbin\/zpool import myhome&#8221; &gt;&gt; \/etc\/rc.d\/rc.M<\/strong><\/p>\n<p>E seu Slackware j\u00e1 deve estar funcionando neste momento com o diret\u00f3rio home em ZFS.<\/p>\n<h1>COMPARA\u00c7\u00c3O ENTRE ZFS E BTRFS<\/h1>\n<p>O fato principal que devemos considerar quando comparamos Btrfs com ZFS \u00e9 que o ZFS j\u00e1 \u00e9 um sistema maduro, com uso em produ\u00e7\u00e3o desde 2005 em outras plataformas com sucesso. J\u00e1 Btrfs apesar de estar em estado avan\u00e7ado de desenvolvimento (est\u00e1vel desde 2014), ainda apresenta algumas preocupa\u00e7\u00f5es quando comparado ao ZFS.<\/p>\n<p>ZFS \u00e9 diversas ordens de magnitude mais testado do que Btrfs atualmente.<\/p>\n<p>Eu acredito que o ZFS nunca se tornar\u00e1 o sistema dominante em <a href=\"http:\/\/www.vivaolinux.com.br\/linux\/\">Linux<\/a>, principalmente devido \u00e0 incompatibilidade das licen\u00e7as CDDL e GPL. Este lugar um dia h\u00e1 de ser ocupado pelo Btrfs.<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h1>CONSIDERA\u00c7\u00d5ES FINAIS<\/h1>\n<p>&nbsp;<\/p>\n<div>\n<p>Toda vez que voc\u00ea for instalar um novo kernel, voc\u00ea dever\u00e1 reinstalar os pacotes SPL e ZFS.<\/p>\n<p>Como o suporte ao ZFS n\u00e3o \u00e9 parte do kernel, se voc\u00ea quiser fazer a sua parti\u00e7\u00e3o root no ZFS vai dar um pouco de trabalho. Primeiramente necessitaria de uma parti\u00e7\u00e3o \/boot em um sistema conhecido pelo kernel (ex.: ext4). Da\u00ed, teria que criar um initrd personalizado com o m\u00f3dulo do ZFS para que o kernel possa abrir sua parti\u00e7\u00e3o root e dar o boot. Para os mais interessados esse processo \u00e9 descrito aqui:<\/p>\n<ul>\n<li><a href=\"http:\/\/slackwiki.com\/ZFS_root\" target=\"_blank\" rel=\"nofollow\">ZFS root &#8211; SlackWiki<\/a><\/li>\n<\/ul>\n<p>Se voc\u00ea quiser que todo o disco fique em ZFS, tamb\u00e9m \u00e9 poss\u00edvel compilar um kernel customizado injetando o c\u00f3digo do ZFS no kernel, assim o seu kernel teria suporte nativo ao ZFS. Lembrando que voc\u00ea pode fazer isso, mas n\u00e3o pode criar uma DISTRIBUI\u00c7\u00c3O com isso, porque a licen\u00e7a GPL \u00e9 conflitante com a CDDL. Para os usu\u00e1rios mais familiarizados com compila\u00e7\u00e3o do kernel, esse processo \u00e9 descrito aqui:<\/p>\n<ul>\n<li><a href=\"http:\/\/slackwiki.com\/ZFS_root_%28builtin%29\" target=\"_blank\" rel=\"nofollow\">ZFS root (builtin) &#8211; SlackWiki<\/a><\/li>\n<\/ul>\n<p>ZFS no <a href=\"http:\/\/www.vivaolinux.com.br\/linux\/\">Linux<\/a> \u00e9 est\u00e1vel?<\/p>\n<p>A resposta curta \u00e9 sim. Por\u00e9m depende do que voc\u00ea considera como est\u00e1vel. Se est\u00e1vel significa que o sistema n\u00e3o trava, n\u00e3o perde os dados, substitui com vantagens outros sistemas de arquivos, que tem desenvolvimento ativo e corre\u00e7\u00e3o de falhas no c\u00f3digo, que \u00e9 compat\u00edvel com as outras implementa\u00e7\u00f5es, ent\u00e3o a resposta \u00e9 sim. J\u00e1 se voc\u00ea considerar est\u00e1vel como sin\u00f4nimo de &#8220;exaustivamente testado&#8221;, ent\u00e3o acho que ainda n\u00e3o chegamos l\u00e1. De qualquer forma, ZFS est\u00e1 em uso em produ\u00e7\u00e3o no Solaris e BSD com resultados positivos na \u00faltima d\u00e9cada.<\/p>\n<p>Refer\u00eancias:<\/p>\n<ul>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/ZFS\" target=\"_blank\" rel=\"nofollow\">ZFS &#8211; Wikipedia, the free encyclopedia<\/a><\/li>\n<li><a href=\"http:\/\/www.vivaolinux.com.br\/artigo\/OpenSolaris-Sistema-Operacional-Open-Source?pagina=9\">OpenSolaris &#8211; Sistema Operacional Open Source [Artigo] &#8211; p\u00e1gina 9<\/a><\/li>\n<li><a href=\"http:\/\/zfsonlinux.org\/\" target=\"_blank\" rel=\"nofollow\">ZFS on Linux<\/a><\/li>\n<li><a href=\"https:\/\/www.freebsd.org\/doc\/en_US.ISO8859-1\/books\/handbook\/\" target=\"_blank\" rel=\"nofollow\">FreeBSD Handbook<\/a><\/li>\n<li><a href=\"http:\/\/slackwiki.com\/\" target=\"_blank\" rel=\"nofollow\">SlackWiki<\/a><\/li>\n<li><a href=\"https:\/\/rudd-o.com\/linux-and-free-software\/ways-in-which-zfs-is-better-than-btrfs\" target=\"_blank\" rel=\"nofollow\">How ZFS continues to be better than btrfs \u2014 Rudd-O.com in English<\/a><\/li>\n<li><a href=\"http:\/\/www.vivaolinux.com.br\/artigo\/ZFS-no-GNULinux\/\" target=\"_blank\">Vivaolinux<\/a><\/li>\n<li>Autor: Fernando &lt;phoemur at gmail.com&gt;<\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>INTRODU\u00c7\u00c3O &nbsp; ZFS \u00e9 um sistema de arquivos livre, desenvolvido pela Sun Microsystems (atualmente Oracle) para seu sistema operacional Solaris. O significado original era Zettabyte File System, por\u00e9m agora \u00e9 um pseudo-acr\u00f4nimo. As caracter\u00edsticas do ZFS incluem grande capacidade de armazenamento, integra\u00e7\u00e3o de conceitos de sistema de arquivos e administra\u00e7\u00e3o de volumes (LLVM), RAID via [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[477,91,1,730,830,725,42,51,439,495,68,271,127,548],"tags":[243,361,969],"class_list":["post-4136","post","type-post","status-publish","format-standard","hentry","category-backup-2","category-banco-de-dados","category-viazap","category-clusterweb","category-debian","category-hospedagem","category-leitura-recomendada","category-linux-linuxrs","category-midia","category-profissional-de-ti","category-redes-2","category-seguranca-2","category-sistemas-de-armazenamento","category-ubuntu-2","tag-gnulinux","tag-no","tag-zfs"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4136","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4136"}],"version-history":[{"count":3,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4136\/revisions"}],"predecessor-version":[{"id":4156,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4136\/revisions\/4156"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}