b'\n_START_ARTICLE_\nZFS\n_START_SECTION_\nHist\xc3\xb3ria\n_START_PARAGRAPH_\nO ZFS foi projetado e implementado por uma equipe na Sun Microsystems (atual Oracle Corporation) liderada por Jeff Bonwick, Bill Moore e Matthew Ahrens. Foi anunciado em 14 de setembro de 2004, mas o desenvolvimento come\xc3\xa7ou em 2001. O c\xc3\xb3digo-fonte do ZFS foi integrado no tronco principal do desenvolvimento do Solaris em 31 de outubro de 2005 e lan\xc3\xa7ado como parte da compila\xc3\xa7\xc3\xa3o 27 do OpenSolaris em 16 de novembro de 2005. A Sun anunciou que o ZFS foi inclu\xc3\xaddo na atualiza\xc3\xa7\xc3\xa3o 6/06 do Solaris 10 em junho de 2006, um ano ap\xc3\xb3s a abertura da comunidade OpenSolaris._NEWLINE_O nome at\xc3\xa9 certo momento significava "Zettabyte File System", mas em 2006 j\xc3\xa1 n\xc3\xa3o era considerado uma abreviatura. Um sistema de arquivos ZFS pode armazenar at\xc3\xa9 256 quadrilh\xc3\xb5es de zettabytes (ZB)._NEWLINE_Em setembro de 2007, a NetApp processou a Sun alegando que o ZFS infringiu algumas das patentes da NetApp do sistema de arquivos Write Anywhere File Layout. A Sun respondeu em ju\xc3\xadzo em outubro do mesmo ano, alegando o contr\xc3\xa1rio. Os processos judiciais foram encerrados em 2010 com um acordo judicial n\xc3\xa3o divulgado.\n_START_SECTION_\nIntegridade de dados\n_START_PARAGRAPH_\nUma das principais caracter\xc3\xadsticas que distingue o ZFS de outros sistemas de arquivos \xc3\xa9 que ele foi projetado com foco na integridade dos dados, protegendo os dados do usu\xc3\xa1rio no disco contra corrup\xc3\xa7\xc3\xa3o de dados silenciosa causada pela degrada\xc3\xa7\xc3\xa3o de dados, surtos de energia, erros no firmware de disco, grava\xc3\xa7\xc3\xb5es fantasmas (a escrita anterior n\xc3\xa3o chegou ao disco), leitura/escrita incorretas (o disco acessa o bloco errado), erros de paridade do DMA entre o conjunto de discos e a mem\xc3\xb3ria do servidor ou do controlador do dispositivo (uma vez que a soma de verifica\xc3\xa7\xc3\xa3o valida os dados dentro do conjunto), erros do driver (dados acabam no buffer errado dentro do kernel), sobrescrita acidental, etc.\n_START_SECTION_\nIntegridade de dados do ZFS\n_START_PARAGRAPH_\nPara o ZFS, a integridade dos dados \xc3\xa9 obtida usando uma soma de verifica\xc3\xa7\xc3\xa3o baseada em Fletcher ou um hash SHA-256 em toda a \xc3\xa1rvore do sistema de arquivos. Cada bloco de dados t\xc3\xaam o valor da soma de verifica\xc3\xa7\xc3\xa3o computado e este valor \xc3\xa9 salvo no ponteiro desse bloco, e n\xc3\xa3o no pr\xc3\xb3prio bloco. Em seguida, o ponteiro do bloco tem o valor computado, com o valor sendo salvo no ponteiro dele. Essa soma de verifica\xc3\xa7\xc3\xa3o \xc3\xa9 feita em toda a hierarquia da \xc3\xa1rvore do sistema de arquivos at\xc3\xa9 chegar ao n\xc3\xb3 raiz que tamb\xc3\xa9m \xc3\xa9 verificado, criando assim uma \xc3\xa1rvore de Merkle. A corrup\xc3\xa7\xc3\xa3o de dados em v\xc3\xb4o ou leituras/escritas fantasmas (os dados lidos/escritos parecem ser corretamente validados, mas na verdade est\xc3\xa3o incorretos) s\xc3\xa3o indetect\xc3\xa1veis pela maioria dos sistemas de arquivos, pois eles armazenam a soma de verifica\xc3\xa7\xc3\xa3o junto com os dados. O ZFS armazena a soma de verifica\xc3\xa7\xc3\xa3o de cada bloco em seu ponteiro de bloco pai, com isso o pool inteiro se auto-valida._NEWLINE_Quando um bloco \xc3\xa9 acessado, independentemente de ser dados ou meta-dados, sua soma de verifica\xc3\xa7\xc3\xa3o \xc3\xa9 calculada e comparada com o valor de soma de verifica\xc3\xa7\xc3\xa3o armazenada do que "deve" ser. Se o checksum corresponder, os dados s\xc3\xa3o passados pela pilha de programa\xc3\xa7\xc3\xa3o para o processo que o pediu; se os valores n\xc3\xa3o coincidirem, o ZFS pode corrigir os dados se o pool de armazenamento fornecer redund\xc3\xa2ncia de dados (como com o espelhamento interno), assumindo que a c\xc3\xb3pia dos dados n\xc3\xa3o est\xc3\xa1 danificada e com checksums correspondentes. \xc3\x89 opcionalmente poss\xc3\xadvel fornecer redund\xc3\xa2ncia adicional no pool, especificando o par\xc3\xa2metro copies = 2 (ou copies = 3 ou mais), o que significa que os dados ser\xc3\xa3o armazenados duas vezes (ou tr\xc3\xaas vezes) no disco, diminuindo de forma efetiva (ou, para copies = 3, reduzindo para um ter\xc3\xa7o) a capacidade de armazenamento do disco. Al\xc3\xa9m disso, alguns tipos de dados usados pelo ZFS para gerenciar o pool s\xc3\xa3o armazenados v\xc3\xa1rias vezes por padr\xc3\xa3o para seguran\xc3\xa7a, mesmo com a configura\xc3\xa7\xc3\xa3o padr\xc3\xa3o copies = 1._NEWLINE_Se outras c\xc3\xb3pias dos dados danificados existem ou podem ser reconstru\xc3\xaddas a partir de checksums e bits de paridade, o ZFS usar\xc3\xa1 uma c\xc3\xb3pia dos dados (ou recri\xc3\xa1-lo atrav\xc3\xa9s de um mecanismo de recupera\xc3\xa7\xc3\xa3o RAID) e recalcular\xc3\xa1 a soma de verifica\xc3\xa7\xc3\xa3o, idealmente resultando na reprodu\xc3\xa7\xc3\xa3o do valor inicialmente esperado. Se os dados passarem nessa verifica\xc3\xa7\xc3\xa3o de integridade, o sistema pode substituir todas as c\xc3\xb3pias com defeito pelas c\xc3\xb3pias com dados corretos e a redund\xc3\xa2ncia ser\xc3\xa1 restaurada.\n_START_SECTION_\nZFS e RAID de hardware\n_START_PARAGRAPH_\nSe os discos estiverem conectados a um controlador RAID, \xc3\xa9 mais eficiente configur\xc3\xa1-lo como um adaptador de host em modo JBOD (ou seja, desativar a fun\xc3\xa7\xc3\xa3o RAID). Se uma placa de RAID de hardware for usada, o ZFS sempre detecta toda a corrup\xc3\xa7\xc3\xa3o de dados, mas nem sempre pode reparar a corrup\xc3\xa7\xc3\xa3o de dados porque a placa de RAID de hardware ir\xc3\xa1 interferir. Portanto, a recomenda\xc3\xa7\xc3\xa3o \xc3\xa9 n\xc3\xa3o usar uma placa de RAID de hardware, ou colocar uma placa de RAID de hardware no modo JBOD/IT. Para que o ZFS possa garantir a integridade dos dados, ele precisa ter acesso a um conjunto RAID (para que todos os dados sejam copiados para pelo menos dois discos), ou se um \xc3\xbanico disco \xc3\xa9 usado, o ZFS precisa ativar a redund\xc3\xa2ncia (c\xc3\xb3pias) que duplica os dados na mesma unidade l\xc3\xb3gica. O uso de c\xc3\xb3pias do ZFS \xc3\xa9 um bom recurso para ser usado em notebooks e computadores de mesa, uma vez que os discos s\xc3\xa3o grandes e, pelo menos, fornece alguma redund\xc3\xa2ncia limitada com apenas uma \xc3\xbanica unidade._NEWLINE_Existem v\xc3\xa1rias raz\xc3\xb5es para o porqu\xc3\xaa \xc3\xa9 melhor confiar exclusivamente no ZFS usando v\xc3\xa1rios discos independentes e RAID-Z ou espelhamento._NEWLINE_Ao usar RAID de hardware, o controlador geralmente adiciona dados dependentes do controlador \xc3\xa0s unidades que impedem o software de RAID de acessar os dados do usu\xc3\xa1rio. Embora seja poss\xc3\xadvel ler os dados com um controlador de RAID de hardware compat\xc3\xadvel, isso causa inconveni\xc3\xaancia aos consumidores, porque um controlador compat\xc3\xadvel usualmente n\xc3\xa3o est\xc3\xa1 prontamente dispon\xc3\xadvel. Usando a combina\xc3\xa7\xc3\xa3o JBOD/RAID-Z, qualquer controlador de disco pode ser usado para retomar a opera\xc3\xa7\xc3\xa3o ap\xc3\xb3s uma falha do controlador._NEWLINE_Observe que o RAID de hardware configurado como JBOD ainda pode separar unidades que n\xc3\xa3o respondem em tempo (como j\xc3\xa1 foi visto com muitos discos r\xc3\xadgidos de classe de consumidor de alta efici\xc3\xaancia energ\xc3\xa9tica), e, nesse caso, pode exigir o uso de discos com suporte a TLER/CCTL/ERC (error recovery control) para evitar o abandono da unidade.\n_START_SECTION_\nRAID de software usando o ZFS\n_START_PARAGRAPH_\nO ZFS oferece software RAID atrav\xc3\xa9s de seus esquemas de organiza\xc3\xa7\xc3\xa3o:  RAID-Z  e espelhamento._NEWLINE_RAID-Z \xc3\xa9 um esquema de distribui\xc3\xa7\xc3\xa3o de dados/paridade como o RAID-5, mas usa comprimento de stripe din\xc3\xa2mico: cada bloco tem seu pr\xc3\xb3prio stripe de RAID, independentemente do tamanho do bloco, resultando em cada grava\xc3\xa7\xc3\xa3o RAID-Z sendo uma grava\xc3\xa7\xc3\xa3o no stripe inteiro. Isso, quando combinado com a sem\xc3\xa2ntica transacional de c\xc3\xb3pia-em-grava\xc3\xa7\xc3\xa3o do ZFS, elimina o erro de buraco de escrita (do ingl\xc3\xaas: write hole error), que acontece se os dados de paridade n\xc3\xa3o corresponderem mais aos dados do disco caso aconte\xc3\xa7a um erro de escrita devido \xc3\xa0 n\xc3\xa3o atomicidade do processo de escrita. RAID-Z tamb\xc3\xa9m \xc3\xa9 mais r\xc3\xa1pido do que o RAID-5 tradicional porque n\xc3\xa3o precisa executar a seq\xc3\xbc\xc3\xaancia usual de leitura-modifica\xc3\xa7\xc3\xa3o-grava\xc3\xa7\xc3\xa3o._NEWLINE_Como todos os stripes s\xc3\xa3o de tamanhos diferentes, a reconstru\xc3\xa7\xc3\xa3o do RAID-Z deve percorrer os metadados do sistema de arquivos para determinar a geometria real do RAID-Z. Isso seria imposs\xc3\xadvel se o sistema de arquivos e o arranjo do RAID fossem produtos separados, enquanto se torna vi\xc3\xa1vel quando h\xc3\xa1 uma vis\xc3\xa3o integrada da estrutura l\xc3\xb3gica e f\xc3\xadsica dos dados. Ao percorrer os metadados, o ZFS pode validar cada bloco em rela\xc3\xa7\xc3\xa3o \xc3\xa0 sua soma de verifica\xc3\xa7\xc3\xa3o de 256 bits, enquanto os produtos de RAID tradicionais normalmente n\xc3\xa3o podem fazer isso._NEWLINE_Al\xc3\xa9m de lidar com falhas de disco inteiro, o RAID-Z tamb\xc3\xa9m pode detectar e corrigir a corrup\xc3\xa7\xc3\xa3o silenciosa de dados, oferecendo "dados que se auto-curam": Ao ler um bloco RAID-Z, o ZFS o compara com a soma de verifica\xc3\xa7\xc3\xa3o dele e, se os discos de dados n\xc3\xa3o retornarem a resposta correta, o ZFS l\xc3\xaa a paridade e depois descobre qual disco retornou dados incorretos. Em seguida, ele repara os dados danificados e retorna os dados corrigidos para o solicitante._NEWLINE_O RAID-Z n\xc3\xa3o requer nenhum hardware especial: n\xc3\xa3o precisa de NVRAM para confiabilidade e n\xc3\xa3o precisa de buffer de grava\xc3\xa7\xc3\xa3o para ter bom desempenho. Com o RAID-Z, o ZFS fornece um armazenamento r\xc3\xa1pido e confi\xc3\xa1vel usando discos de classe de consumidor baratos._NEWLINE_Existem tr\xc3\xaas modos de RAID-Z diferentes: RAID-Z1 (similar ao RAID-5, permite que um disco falhe), RAID-Z2 (similar ao RAID-6, permite que dois discos falhem), e RAID-Z3 (Tamb\xc3\xa9m referido como RAID-7, permite que tr\xc3\xaas discos falhem). A necessidade do RAID-Z3 surgiu recentemente porque as configura\xc3\xa7\xc3\xb5es RAID com futuros discos (por exemplo: 6\xe2\x80\x9310 TB) podem demorar muito para reparar, o pior caso sendo semanas. Durante essas semanas, o restante dos discos no RAID s\xc3\xa3o mais estressados devido ao processo de reparo intensivo adicional e, posteriormente, podem falhar tamb\xc3\xa9m. Ao usar o RAID-Z3, o risco envolvido com a substitui\xc3\xa7\xc3\xa3o do disco \xc3\xa9 reduzido._NEWLINE_Espelhamento, a outra op\xc3\xa7\xc3\xa3o ZFS RAID, \xc3\xa9 essencialmente o mesmo que o RAID-1, permitindo que qualquer n\xc3\xbamero de discos seja espelhado. Como o RAID 1, ele tamb\xc3\xa9m permite velocidades de leitura e reconstru\xc3\xa7\xc3\xa3o mais r\xc3\xa1pidas, pois todas as unidades podem ser usadas simultaneamente e os dados de paridade n\xc3\xa3o s\xc3\xa3o calculados separadamente, e os vdevs espelhados podem ser divididos para criar c\xc3\xb3pias id\xc3\xaanticas do pool.\n_START_SECTION_\nCriptografia\n_START_PARAGRAPH_\nCom o Oracle Solaris, o recurso de criptografia no ZFS est\xc3\xa1 incorporado na pipeline de E/S. Durante as grava\xc3\xa7\xc3\xb5es, um bloco pode ser comprimido, criptografado, verificado e depois deduplicado, nessa ordem. A pol\xc3\xadtica de criptografia \xc3\xa9 definida no n\xc3\xadvel do conjunto de dados quando esses conjuntos de dados (sistemas de arquivos ou ZVOLs) s\xc3\xa3o criados. As chaves fornecidas pelo usu\xc3\xa1rio/administrador podem ser alteradas a qualquer momento sem desligar o sistema de arquivos. O comportamento padr\xc3\xa3o \xc3\xa9 que a chave seja herdada por qualquer conjunto de dados filho. As chaves de criptografia de dados s\xc3\xa3o geradas aleatoriamente na hora da cria\xc3\xa7\xc3\xa3o do conjunto de dados. Somente conjuntos de dados descendentes (instant\xc3\xa2neos e clones) compartilham chaves de criptografia de dados. \xc3\x89 fornecido um comando para trocar a chave de criptografia de dados na hora da cria\xc3\xa7\xc3\xa3o do clone, ou a qualquer momento \xe2\x80\x94 isso n\xc3\xa3o recriptografa os dados j\xc3\xa1 existentes, porque nesses dados \xc3\xa9 usado um mecanismo de criptografia de chave mestra.\n_START_SECTION_\nTanques de armazenamento\n_START_PARAGRAPH_\nAo contr\xc3\xa1rio dos sistemas de arquivos tradicionais que residem em dispositivos \xc3\xbanicos e, portanto, exigem que um gerenciador de volume l\xc3\xb3gico seja usado para poder usar mais de um dispositivo, os sistemas de arquivos ZFS s\xc3\xa3o criados no topo de tanques de armazenamentos virtuais chamados zpools. Um zpool \xc3\xa9 constru\xc3\xaddo de dispositivos virtuais (vdevs), eles pr\xc3\xb3prios sendo constru\xc3\xaddos com dispositivos de bloco: arquivos, parti\xc3\xa7\xc3\xb5es de disco r\xc3\xadgido ou unidades inteiras, sendo este o uso recomendado. Os dispositivos de bloco dentro de um vdev podem ser configurados de maneiras diferentes, dependendo das necessidades e do espa\xc3\xa7o dispon\xc3\xadvel: n\xc3\xa3o redundante (semelhante ao RAID 0), como um espelho (RAID 1) de dois ou mais dispositivos, como um grupo RAID-Z de tr\xc3\xaas ou mais dispositivos, ou como um grupo RAID-Z2 (semelhante ao RAID-6) de quatro ou mais dispositivos. Em julho de 2009, o RAID-Z3 de paridade tripla foi adicionado ao OpenSolaris. RAID-Z \xc3\xa9 uma tecnologia de prote\xc3\xa7\xc3\xa3o de dados oferecida pelo ZFS, a fim de reduzir a sobrecarga do bloco na hora do espelhamento._NEWLINE_Assim, um zpool (tanque de armazenamento ZFS) \xc3\xa9 vagamente parecido com a mem\xc3\xb3ria RAM de um computador. A capacidade total da mem\xc3\xb3ria RAM depende do n\xc3\xbamero de pentes de mem\xc3\xb3ria RAM e do tamanho de cada pente. Da mesma forma, um zpool consiste em um ou mais vdevs. Cada vdev pode ser visto como um grupo de discos r\xc3\xadgidos (ou parti\xc3\xa7\xc3\xb5es, arquivos, etc.). Cada vdev deve ter redund\xc3\xa2ncia, caso contr\xc3\xa1rio, se um vdev for perdido, ent\xc3\xa3o o zpool inteiro ser\xc3\xa1 perdido. Assim, cada vdev deve ser configurado como RAID-Z1, RAID-Z2, espelho, etc. N\xc3\xa3o \xc3\xa9 poss\xc3\xadvel alterar o n\xc3\xbamero de unidades em um vdev existente (o recurso de reescrita do ponteiro de bloco permitir\xc3\xa1 isso e tamb\xc3\xa9m permite a desfragmenta\xc3\xa7\xc3\xa3o), mas sempre \xc3\xa9 poss\xc3\xadvel aumentar a capacidade de armazenamento adicionando um novo vdev a um zpool. \xc3\x89 poss\xc3\xadvel trocar uma unidade por uma maior e reconstruir o zpool. Se este procedimento for repetido para cada disco em um vdev, o zpool aumentar\xc3\xa1 em capacidade quando o \xc3\xbaltimo dispositivo for sincronizado. Um vdev ter\xc3\xa1 a mesma capacidade de base que o menor dispositivo do grupo. Por exemplo, um vdev composto por tr\xc3\xaas unidades de 500 GB e uma unidade de 700 GB, ter\xc3\xa1 uma capacidade de 4 \xc3\x97 500 GB._NEWLINE_Al\xc3\xa9m disso, as zpools podem ter unidades de reserva ligadas para substituir as unidades que falharem. Na hora do espelhamento, os dispositivos de bloco podem ser agrupados de acordo com o chassi f\xc3\xadsico, de modo que o sistema de arquivos possa continuar funcionando em caso de falha de um chassi inteiro._NEWLINE_A composi\xc3\xa7\xc3\xa3o do pool de armazenamento n\xc3\xa3o se limita a dispositivos semelhantes, mas podem consistir em cole\xc3\xa7\xc3\xb5es de dispositivos heterog\xc3\xaaneas, pois o ZFS pode combin\xc3\xa1-los de forma transparente, distribuindo espa\xc3\xa7o para diversos sistemas de arquivos conforme necess\xc3\xa1rio. Dispositivos de armazenamento podem ser adicionados de forma arbitr\xc3\xa1ria aos pools existentes para expandir seu tamanho._NEWLINE_A capacidade de armazenamento de todos os vdevs est\xc3\xa1 dispon\xc3\xadvel para todas as inst\xc3\xa2ncias do sistema de arquivos no zpool. Uma cota pode ser definida para limitar a quantidade de espa\xc3\xa7o que uma inst\xc3\xa2ncia do sistema de arquivos pode ocupar, e uma reserva pode ser configurada para garantir que o espa\xc3\xa7o estar\xc3\xa1 dispon\xc3\xadvel para uma inst\xc3\xa2ncia do sistema de arquivos.\n_START_SECTION_\nModelo transacional de c\xc3\xb3pia em grava\xc3\xa7\xc3\xa3o\n_START_PARAGRAPH_\nO ZFS usa um modelo de objeto transacional de c\xc3\xb3pia em grava\xc3\xa7\xc3\xa3o. Todos os ponteiros de bloco dentro do sistema de arquivos cont\xc3\xaam uma soma de verifica\xc3\xa7\xc3\xa3o de 256 bits ou uma fun\xc3\xa7\xc3\xa3o de hash criptogr\xc3\xa1fico de 256 bits (atualmente uma escolha entre Fletcher-2, Fletcher-4 ou SHA-256 ) do bloco de destino, que \xc3\xa9 verificado quando o bloco \xc3\xa9 lido. Blocos contendo dados ativos nunca s\xc3\xa3o sobrescritos no lugar; em vez disso, um novo bloco \xc3\xa9 alocado, os dados modificados s\xc3\xa3o escritos nele, ent\xc3\xa3o quaisquer blocos de metadados referentes ao mesmo s\xc3\xa3o similarmente lidos, realocados e escritos. Para reduzir a sobrecarga deste processo, m\xc3\xbaltiplas atualiza\xc3\xa7\xc3\xb5es s\xc3\xa3o agrupadas em grupos transacionais, e o cache de escrita ZIL (log de inten\xc3\xa7\xc3\xa3o) \xc3\xa9 usado quando uma sem\xc3\xa2ntica de grava\xc3\xa7\xc3\xa3o s\xc3\xadncrona \xc3\xa9 necess\xc3\xa1ria. Os blocos s\xc3\xa3o organizados em uma \xc3\xa1rvore, assim como suas somas de verifica\xc3\xa7\xc3\xa3o (veja esquema de assinatura de Merkle).\n_START_SECTION_\nInstant\xc3\xa2neos e clones\n_START_PARAGRAPH_\nUma vantagem do sistema de c\xc3\xb3pia em grava\xc3\xa7\xc3\xa3o \xc3\xa9 que, quando o ZFS escreve novos dados, os blocos contendo os dados antigos podem ser mantidos, permitindo que uma vers\xc3\xa3o instant\xc3\xa2nea do sistema de arquivos seja mantida. Os instant\xc3\xa2neos do ZFS s\xc3\xa3o consistentes (eles refletem todos os dados como existiram em um \xc3\xbanico ponto no tempo) e podem ser criados de forma extremamente rapida, j\xc3\xa1 que todos os dados que comp\xc3\xb5em o instant\xc3\xa2neo j\xc3\xa1 est\xc3\xa3o armazenados, com todo o pool de armazenamento muitas vezes capturado v\xc3\xa1rias vezes por hora. Eles tamb\xc3\xa9m s\xc3\xa3o eficientes em termos de espa\xc3\xa7o, pois todos os dados inalterados s\xc3\xa3o compartilhados entre o sistema de arquivos e seus instant\xc3\xa2neos. Os instant\xc3\xa2neos s\xc3\xa3o inerentemente somente leitura, garantindo que n\xc3\xa3o ser\xc3\xa3o modificados ap\xc3\xb3s a cria\xc3\xa7\xc3\xa3o, embora n\xc3\xa3o devam ser usados como um \xc3\xbanico meio de backup. Instant\xc3\xa2neos inteiros podem ser restaurados e tamb\xc3\xa9m arquivos e diret\xc3\xb3rios dentro de instant\xc3\xa2neos._NEWLINE_Instant\xc3\xa2neos grav\xc3\xa1veis ("clones") tamb\xc3\xa9m podem ser criados, resultando em dois sistemas de arquivos independentes que compartilham um conjunto de blocos. \xc3\x80 medida que as mudan\xc3\xa7as s\xc3\xa3o feitas em qualquer um dos clones de sistemas de arquivos, novos blocos de dados s\xc3\xa3o criados para refletir essas altera\xc3\xa7\xc3\xb5es, mas todos os blocos inalterados continuam a ser compartilhados, independentemente da quantidade de clones existentes. Esta \xc3\xa9 uma implementa\xc3\xa7\xc3\xa3o do princ\xc3\xadpio copia em grava\xc3\xa7\xc3\xa3o.\n_START_SECTION_\nEnviando e recebendo instant\xc3\xa2neos\n_START_PARAGRAPH_\nOs sistemas de arquivos ZFS podem ser movidos para outros pools, tamb\xc3\xa9m em hosts remotos atrav\xc3\xa9s da rede, pois o comando send cria uma representa\xc3\xa7\xc3\xa3o de fluxo do estado do sistema de arquivos. Esse fluxo pode descrever o conte\xc3\xbado completo do sistema de arquivos em um instant\xc3\xa2neo, ou pode ser um delta entre instant\xc3\xa2neos. A computa\xc3\xa7\xc3\xa3o do fluxo delta \xc3\xa9 muito eficiente e seu tamanho depende do n\xc3\xbamero de blocos alterados entre os instant\xc3\xa2neos. Isso fornece uma estrat\xc3\xa9gia eficiente, por exemplo, para sincronizar backups externos ou espelhos de alta disponibilidade de um pool.\n_START_SECTION_\nStriping din\xc3\xa2mico\n_START_PARAGRAPH_\nO striping din\xc3\xa2mico em todos os dispositivos para maximizar largura de banda significa que quando dispositivos adicionais s\xc3\xa3o adicionados ao zpool, a largura do stripe se expande automaticamente para inclu\xc3\xad-los; assim, todos os discos em um pool s\xc3\xa3o usados, o que equilibra a carga de escrita em todos eles.\n_START_SECTION_\nBlocos de tamanho vari\xc3\xa1vel\n_START_PARAGRAPH_\nO ZFS usa blocos de tamanho vari\xc3\xa1vel, com 128 KB como o tamanho padr\xc3\xa3o. Os recursos dispon\xc3\xadveis permitem que o administrador ajuste o tamanho de bloco m\xc3\xa1ximo que \xc3\xa9 usado, uma vez que determinadas cargas de trabalho n\xc3\xa3o t\xc3\xaam bom desempenho com blocos grandes. Se a compress\xc3\xa3o de dados estiver ativada, s\xc3\xa3o usados tamanhos de blocos vari\xc3\xa1veis. Se um bloco pode ser comprimido para se ajustar a um tamanho de bloco menor, o tamanho menor \xc3\xa9 usado no disco para usar menos armazenamento e melhorar a taxa de transfer\xc3\xaancia de E/S (embora ao custo de uso da CPU aumentada para as opera\xc3\xa7\xc3\xb5es de compress\xc3\xa3o e descompress\xc3\xa3o).\n_START_SECTION_\nCria\xc3\xa7\xc3\xa3o de sistema de arquivos leve\n_START_PARAGRAPH_\nNo ZFS, a manipula\xc3\xa7\xc3\xa3o do sistema de arquivos dentro de um pool de armazenamento \xc3\xa9 mais f\xc3\xa1cil do que a manipula\xc3\xa7\xc3\xa3o de volume dentro de um sistema de arquivos tradicional; O tempo e o esfor\xc3\xa7o necess\xc3\xa1rios para criar ou expandir um sistema de arquivos ZFS est\xc3\xa3o mais pr\xc3\xb3ximos do de criar um novo diret\xc3\xb3rio do que a manipula\xc3\xa7\xc3\xa3o de volume em outros sistemas.\n_START_SECTION_\nEndianness adaptativa\n_START_PARAGRAPH_\nPools e seus sistemas de arquivos ZFS associados podem ser movidos entre diferentes arquiteturas de plataforma, incluindo sistemas que implementam diferentes ordens de bytes. O formato do ponteiro do bloco do ZFS armazena metadados do sistema de arquivos de maneira adaptativa; blocos de metadados individuais s\xc3\xa3o escritos com a ordem do byte nativo do sistema que escreve o bloco. Quando fazendo a leitura, se o endianness armazenado n\xc3\xa3o coincide com a endianness do sistema, o metadado t\xc3\xaam a ordem dos bytes trocada na mem\xc3\xb3ria._NEWLINE_Isso n\xc3\xa3o afeta os dados armazenados; como \xc3\xa9 usual nos sistemas POSIX, os arquivos aparecem em aplicativos como matrizes simples de bytes, de modo que os aplicativos criando e lendo dados continuam a ser respons\xc3\xa1veis por faz\xc3\xaa-lo de forma independente da endianness do sistema subjacente.\n_START_SECTION_\nDesduplica\xc3\xa7\xc3\xa3o\n_START_PARAGRAPH_\nA capacidade de desduplica\xc3\xa7\xc3\xa3o de dados foi adicionada ao reposit\xc3\xb3rio de fontes do ZFS no final de outubro de 2009, e os pacotes de desenvolvimento do ZFS do OpenSolaris relevantes est\xc3\xa3o dispon\xc3\xadveis desde 3 de dezembro de 2009 (compila\xc3\xa7\xc3\xa3o 128)._NEWLINE_O uso efetivo da desduplica\xc3\xa7\xc3\xa3o pode exigir grande capacidade de RAM; As recomenda\xc3\xa7\xc3\xb5es variam entre 1 e 5 GB de RAM para cada TB de armazenamento. A mem\xc3\xb3ria f\xc3\xadsica insuficiente ou a falta de cache do ZFS podem resultar em uma thrashing de mem\xc3\xb3ria virtual ao usar a desduplica\xc3\xa7\xc3\xa3o, o que pode diminuir o desempenho ou resultar na completa inani\xc3\xa7\xc3\xa3o de mem\xc3\xb3ria. Unidades de estado s\xc3\xb3lido (SSDs) podem ser usadas para armazenar tabelas de desduplica\xc3\xa7\xc3\xa3o, melhorando assim o desempenho da desduplica\xc3\xa7\xc3\xa3o._NEWLINE_Outros fornecedores de armazenamento usam vers\xc3\xb5es modificadas do ZFS para obter taxas de compress\xc3\xa3o de dados muito altas. Dois exemplos em 2012 foram GreenBytes e Tegile. Em maio de 2014, a Oracle comprou a GreenBytes por causa da sua tecnologia de duplica\xc3\xa7\xc3\xa3o e replica\xc3\xa7\xc3\xa3o do ZFS.\n_START_SECTION_\nSolaris 10 update 2 e superior\n_START_PARAGRAPH_\nO ZFS faz parte do pr\xc3\xb3prio sistema operacional Solaris da Sun e, portanto, est\xc3\xa1 dispon\xc3\xadvel nos sistemas SPARC e x86.\n_START_SECTION_\nSolaris 11\n_START_PARAGRAPH_\nDepois do lan\xc3\xa7amento do Solaris 11 Express feito pela Oracle, a consolida\xc3\xa7\xc3\xa3o OS/Net (o c\xc3\xb3digo principal do SO) se tornou propriet\xc3\xa1rio e de c\xc3\xb3digo fonte fechado, e v\xc3\xa1rias melhorias e implementa\xc3\xa7\xc3\xb5es do ZFS no Solaris (como a encripta\xc3\xa7\xc3\xa3o) n\xc3\xa3o s\xc3\xa3o compat\xc3\xadveis com outras implementa\xc3\xa7\xc3\xb5es n\xc3\xa3o-propriet\xc3\xa1rias que usam vers\xc3\xb5es anteriores do ZFS._NEWLINE_Ao criar um novo pool do ZFS, para manter a capacidade de usar o acesso ao pool de outras distribui\xc3\xa7\xc3\xb5es baseadas em Solaris n\xc3\xa3o propriet\xc3\xa1rias, recomenda-se atualizar para o Solaris 11 Express a partir do OpenSolaris (snv_134b) e, assim, permanecer no ZFS vers\xc3\xa3o 28.\n_START_SECTION_\nOpenSolaris\n_START_PARAGRAPH_\nOpenSolaris 2008.05, 2008.11 e 2009.06 usam o ZFS como seu sistema de arquivos padr\xc3\xa3o. Existem mais de uma d\xc3\xbazia de distribui\xc3\xa7\xc3\xb5es de terceiros, das quais cerca de uma d\xc3\xbazia s\xc3\xa3o mencionadas aqui. (OpenIndiana e illumos s\xc3\xa3o duas novas distribui\xc3\xa7\xc3\xb5es n\xc3\xa3o inclu\xc3\xaddas na p\xc3\xa1gina de refer\xc3\xaancia de distribui\xc3\xa7\xc3\xa3o do OpenSolaris).\n_START_SECTION_\nOpenIndiana\n_START_PARAGRAPH_\nOpenIndiana usa OpenZFS com flags de recursos como implementado no Illumos. ZFS vers\xc3\xa3o 28 foi usado na vers\xc3\xa3o 151a3._NEWLINE_Ao atualizar do OpenSolaris snv_134 para o OpenIndiana e o Solaris 11 Express, tamb\xc3\xa9m \xc3\xa9 poss\xc3\xadvel atualizar e inicializar separadamente o Solaris 11 Express no mesmo pool do ZFS, mas n\xc3\xa3o se deve instalar o Solaris 11 Express primeiro devido \xc3\xa0s incompatibilidades do ZFS introduzidas pela Oracle ap\xc3\xb3s a vers\xc3\xa3o 28 do ZFS.\n_START_SECTION_\nmacOS\n_START_PARAGRAPH_\nOpenZFS no OSX (abreviado para O3X) \xc3\xa9 uma implementa\xc3\xa7\xc3\xa3o do ZFS para macOS. O3X est\xc3\xa1 em desenvolvimento ativo, com estreita rela\xc3\xa7\xc3\xa3o com o ZFS no Linux e a implementa\xc3\xa7\xc3\xa3o do ZFS no Illumos, mantendo a compatibilidade de bandeira de recursos com o ZFS no Linux. O3X implementa a zpool vers\xc3\xa3o 5000 e inclui o Solaris Porting Layer (SPL) originalmente criado para MacZFS, que foi aprimorado para incluir uma camada de gerenciamento de mem\xc3\xb3ria com base nos alocadores do illumos kmem e vmem. O3X \xc3\xa9 totalmente funcional, suportando a compress\xc3\xa3o LZ4, desduplica\xc3\xa7\xc3\xa3o, ARC, L2ARC e SLOG._NEWLINE_O MacZFS \xc3\xa9 um software livre que oferece suporte para o ZFS no macOS. O ramo est\xc3\xa1vel legado fornece o pool de ZFS at\xc3\xa9 vers\xc3\xa3o 8 e o sistema de arquivos ZFS vers\xc3\xa3o 2. O ramo de desenvolvimento, baseado em ZFS no Linux e OpenZFS, fornece funcionalidade ZFS atualizada, como a zpool ZFS vers\xc3\xa3o 5000 e os sinalizadores de recursos._NEWLINE_Uma implementa\xc3\xa7\xc3\xa3o propriet\xc3\xa1ria do ZFS (Zevo) estava dispon\xc3\xadvel sem custo da GreenBytes, Inc., implementando sistema de arquivos ZFS at\xc3\xa9 a vers\xc3\xa3o 5 e o pool ZFS vers\xc3\xa3o 28. O Zevo ofereceu um conjunto de recursos limitado do ZFS, com desenvolvimento comercial adicional pendente; foi vendido \xc3\xa0 Oracle em 2014, com planos futuros desconhecidos.\n_START_SECTION_\nDragonFly BSD\n_START_PARAGRAPH_\nEdward O\'Callaghan iniciou um port inicial do ZFS para o DragonFly BSD.\n_START_SECTION_\nNetBSD\n_START_PARAGRAPH_\nO port do ZFS no NetBSD foi iniciado como parte do Google Summer of Code 2007 e em agosto de 2009, o c\xc3\xb3digo foi incorporado na \xc3\xa1rvore de c\xc3\xb3digo fonte do NetBSD.\n_START_SECTION_\nFreeBSD\n_START_PARAGRAPH_\nPawe\xc5\x82 Jakub Dawidek portou o ZFS para o FreeBSD, e ele passou a fazer parte do FreeBSD desde a vers\xc3\xa3o 7.0. Isso inclui zfsboot, que permite inicializar o FreeBSD diretamente a partir de um volume ZFS._NEWLINE_A implementa\xc3\xa7\xc3\xa3o do ZFS no FreeBSD \xc3\xa9 totalmente funcional; os \xc3\xbanicos recursos faltantes s\xc3\xa3o o servidor kernel CIFS e iSCSI, mas esses \xc3\xbaltimos podem ser adicionados usando pacotes dispon\xc3\xadveis externamente. O Samba pode ser usado para fornecer um servidor CIFS em espa\xc3\xa7o do usu\xc3\xa1rio._NEWLINE_FreeBSD 7-STABLE (onde as atualiza\xc3\xa7\xc3\xb5es da s\xc3\xa9rie de vers\xc3\xb5es 7.x s\xc3\xa3o feitas) usa o zpool vers\xc3\xa3o 6._NEWLINE_O FreeBSD 8 inclui uma implementa\xc3\xa7\xc3\xa3o muito atualizada do ZFS e o zpool vers\xc3\xa3o 13 \xc3\xa9 suportado. O suporte ao zpool vers\xc3\xa3o 14 foi adicionado ao ramo 8-STABLE em 11 de janeiro de 2010 e est\xc3\xa1 inclu\xc3\xaddo no FreeBSD vers\xc3\xa3o 8.1. O zpool vers\xc3\xa3o 15 \xc3\xa9 suportado na vers\xc3\xa3o 8.2. O ramo 8-STABLE ganhou suporte para zpool vers\xc3\xa3o v28 e o ZFS vers\xc3\xa3o 5 no in\xc3\xadcio de junho de 2011. Essas mudan\xc3\xa7as foram lan\xc3\xa7adas em meados de abril de 2012 com o FreeBSD 8.3._NEWLINE_FreeBSD 9.0-RELEASE usa o Pool ZFS vers\xc3\xa3o 28._NEWLINE_FreeBSD 9.2-RELEASE \xc3\xa9 a primeira vers\xc3\xa3o do FreeBSD que usa a nova implementa\xc3\xa7\xc3\xa3o baseada em "flags de recursos" na Pool vers\xc3\xa3o 5000.\n_START_SECTION_\nMidnightBSD\n_START_PARAGRAPH_\nMidnightBSD, um sistema operacional de desktop derivado do FreeBSD, suporta o pool de armazenamento ZFS vers\xc3\xa3o 6 a partir de 0.3-RELEASE. Isso foi derivado do c\xc3\xb3digo inclu\xc3\xaddo no FreeBSD 7.0-RELEASE. Uma atualiza\xc3\xa7\xc3\xa3o para o pool de armazenamento 28 est\xc3\xa1 em progresso em 0.4-CURRENT e \xc3\xa9 baseado no c\xc3\xb3digo fonte do FreeBSD 9.1-RELEASE.\n_START_SECTION_\nTrueOS\n_START_PARAGRAPH_\nTrueOS (anteriormente conhecido como PC-BSD) \xc3\xa9 uma distribui\xc3\xa7\xc3\xa3o orientada para desktop do FreeBSD, que herda o suporte ao ZFS.\n_START_SECTION_\nFreeNAS\n_START_PARAGRAPH_\nFreeNAS, uma distribui\xc3\xa7\xc3\xa3o de c\xc3\xb3digo aberto baseada no FreeBSD para dispositivos dedicados ao armazenamento de dados em rede, tem o mesmo suporte do ZFS que o FreeBSD e o PC-BSD.\n_START_SECTION_\nZFS Guru\n_START_PARAGRAPH_\nZFS Guru, uma distribui\xc3\xa7\xc3\xa3o de c\xc3\xb3digo aberto baseada no FreeBSD para dispositivos dedicados ao armazenamento de dados em rede.\n_START_SECTION_\npfSense e PCBSD\n_START_PARAGRAPH_\npfSense, distribui\xc3\xa7\xc3\xa3o para roteador baseado em BSD de c\xc3\xb3digo aberto e PCBSD, uma distribui\xc3\xa7\xc3\xa3o de desktop baseada em BSD, ambos suportam o ZFS (pfSense na vers\xc3\xa3o 2.4).\n_START_SECTION_\nNAS4Free\n_START_PARAGRAPH_\nNAS4Free, uma distribui\xc3\xa7\xc3\xa3o de c\xc3\xb3digo aberto baseada no FreeBSD para dispositivos dedicados ao armazenamento de dados em rede, tem o mesmo suporte a ZFS que o FreeBSD, no pool de armazenamento do ZFS vers\xc3\xa3o 5000. Este projeto \xc3\xa9 uma continua\xc3\xa7\xc3\xa3o do projeto da s\xc3\xa9rie FreeNAS 7.\n_START_SECTION_\nDebian GNU/kFreeBSD\n_START_PARAGRAPH_\nSendo baseado no kernel do FreeBSD, o Debian GNU/kFreeBSD possui suporte para o ZFS no kernel. No entanto, s\xc3\xa3o necess\xc3\xa1rias ferramentas de modo usu\xc3\xa1rio adicionais, enquanto \xc3\xa9 poss\xc3\xadvel ter o ZFS como sistema de arquivos no diret\xc3\xb3rio raiz (/) ou no diret\xc3\xb3rio /boot, nesse caso, a configura\xc3\xa7\xc3\xa3o do gerenciador de inicializa\xc3\xa7\xc3\xa3o GRUB requerida \xc3\xa9 realizada pelo instalador do Debian desde o lan\xc3\xa7amento do Debian Wheezy._NEWLINE_Desde 31 de janeiro de 2013, a vers\xc3\xa3o do ZPool dispon\xc3\xadvel \xc3\xa9 a 14 para o Debian Squeeze e a 28 para o Debian Wheezy.\n_START_SECTION_\nLinux\n_START_PARAGRAPH_\nEmbora o sistema de arquivos ZFS ofere\xc3\xa7a suporte a sistemas operacionais baseados em Linux, surgem dificuldades para os mantenedores de distribui\xc3\xa7\xc3\xb5es Linux que desejam fornecer suporte nativo para o ZFS em seus produtos devido a poss\xc3\xadveis incompatibilidades legais entre a licen\xc3\xa7a CDDL usada pelo c\xc3\xb3digo ZFS e a licen\xc3\xa7a GPL usada pelo n\xc3\xbacleo Linux. Para habilitar o suporte ao ZFS no Linux, um m\xc3\xb3dulo de kernel carreg\xc3\xa1vel que contenha o c\xc3\xb3digo ZFS licenciado com CDDL deve ser compilado e carregado no kernel. De acordo com a Free Software Foundation, a reda\xc3\xa7\xc3\xa3o da licen\xc3\xa7a GPL pro\xc3\xadbe legalmente a redistribui\xc3\xa7\xc3\xa3o do produto resultante como um trabalho derivado, embora este ponto de vista tenha causado controv\xc3\xa9rsia.'