ZFS é um sistema de arquivos livre, desenvolvido pela Sun Microsystems para seu sistema operacional Solaris. O significado original era Zettabyte File System, porém agora é um pseudoacrônimo. O anuncio oficial de ZFS se deu em Setembro de 2004. O código fonte do produto final se integrou no projeto principal de desenvolvimento do Solaris em 31 de outubro de 2005 e foi lançado em 16 de novembro de 2005 como parte do build 27 do Open Solaris.
ZFS foi desenhado e implementado por uma equipe da Sun liderada por Jeff Bonwick.
ZFS destaca-se pôr sua grande capacidade, de integração dos conceitos anteriormente separados de sistema de arquivos e administrador de volumes em um só produto, nova estrutura sobre o disco, sistemas de arquivos de rápido acesso e uma administração de espaços de armazenamento eficiente.
Tabela de conteúdos do ZFS:
- Capacidades;
- Plataformas;
- Modelo transacional (Copy-on-write);
- Instantâneos (Snapshots);
- Dynamic striping;
- Tamanhos variável de bloco;
- Criação de sistemas de arquivos de acesso rápido;
- Capacidades adicionais;
1. Capacidades
128 bits (1,6 × 1019 vezes a capacidade de um sistema de arquivos de 64 bits). Os limites de ZFS estão desenhados para ser tão grandes que não se encontram nunca na pratica. Sobre a capacidade do sistema, Jeff Bonwick, o arquiteto chefe da Sun para ZFS, disse: "Criar um sistema de arquivos de 128 bits excederia os limites quânticos de armazenamento da terra.".
Alguns limites teóricos do ZFS:
2 elevado a 48 - Número de snapshots em qualquer sistema de arquivos (2 × 1014);
2 elevado a 48 - Número de arquivos em um sistema de arquivos (2 × 1014);
16 exabytes - Tamanho máximo de um sistema de arquivos;
16 exabytes - Tamanho máximo de um arquivo;
16 exabytes - Tamanho máximo de qualquer atributo;
3 × 1023 petabytes - Tamanho máximo de um spool;
2 elevado a 56 - Número de atributos de arquivo (realmente limitado a 248 que é o número de arquivos que pode conter um sistema de arquivos ZFS);
2 elevado a 56 - Número de arquivos em um diretório (realmente limitado a 248 que é o número de arquivos que pode conter um sistema de arquivos ZFS);
2 elevado a 64 - Número de dispositivos em qualquer spool;
2 elevado a 64 - Número de spools em um sistema;
2 elevado a 64 - Número de sistemas de arquivos em um spool;
Como exemplo das capacidades expressadas por estes números, se um criasse 1000 arquivos por segundo, levaria uns 9000 anos para alcançar o limite imposto pelo número de arquivos.
2. Plataformas
ZFS é parte do Solaris para SPARC e Solaris para x86. Os Pools e seus sistemas de arquivos ZFS associados / zvols podem mover-se entre sistemas que utilizem SPARC e x86. O complexo formato de ponteiros de bloco também proporciona que os metadados do sistema de arquivos se armazenem de maneira adaptada ao Endianness da máquina, permitindo em um armazenamento que contém um pool ZFS se mova entre sistemas que utilizam diferente ordem para os bytes.
Os blocos individuais de metadados se escrevem com a ordem de bytes nativo do sistema que escreve o bloco. Quando se lê, sim o endianness não coincide, os bytes do metadado se alternam na memória. Como cabe esperar nos sistemas POSIX, desde ao ponto de vista das aplicações, os arquivos são arrays de bytes, de maneira que as aplicações seguem sendo responsáveis de copiar os dados dos arquivos com qualquer intercâmbio de bytes que seja necessário.
Sun informou que está investigando o port do produto para
Linux, uma vez que não há planos para leva-lo a HP-UX ou AIX.
3. Modelo transacional (Copy-on-write)
ZFS utiliza um modelo transacional copy-on-write. Todos os ponteiros com blocos de um sistema de arquivos contém um checksum de 256 bits sobre o bloco apontado, que se comprova ao ler o bloco. Os blocos que contém dados ativos não se sobrescrevem nunca; em seu lugar, se reserva um novo bloco, e os dados modificados se escrevem nele, então qualquer bloco de metadados que o referencie é, de modo similar, recuperado e escrito. Para reduzir a sobrecarga deste processo, se agregam varias atualizações em grupos de transações, e se utiliza um log de eventos quando se necessitam escrituras síncronas.
4. Instantâneos (Snapshots)
Como ZFS não sobrescreve dados, tomar um instantâneo simplesmente significa não liberar os blocos utilizados por versões antigas de dados. A vantagem é que os instantâneos se tomam rapidamente e também são eficientes desde o ponto de vista do espaço, pois compartilham os dados sem modificar com o sistema de arquivos.
Podem ser criados instantâneos modificáveis (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ém os blocos comuns se manterão independentemente de quantos clones existam.
5. Dynamic striping
A medida que se anexem dispositivos ao spool, a largura das bandas se expande de forma automática para inclui-los, de maneira que se utilizam todos os discos no pool para balancear a carga de escritas entre todos os dispositivos.
6. Tamanhos de bloco variável
ZFS utiliza blocos de tamanho variável até 128K. O código disponível atualmente permite ao administrador ajustar o tamanho máximo de blocos utilizados, pois certas cargas não rendem bem com blocos grandes. Também está contemplado um ajuste automático para adequar-se as características da carga de trabalho.
Se ativar-se a compressão se utilizam de tamanhos de bloco variáveis, um bloco pode comprimir para que resulte em um bloco de tamanho menor, então utiliza o bloco pequeno no disco, de maneira que não utilize menos capacidade, senão pode aumentar o throughput de entrada/saída (com isso aumentar a sobrecarga da CPU).
7. Espaços de armazenamento (Storage pools)
A diferença dos sistemas de arquivos tradicionais que residem sobre um só dispositivo subjacente e portanto requerem um gestor de volumes separado quando se precisa um sistema de arquivos maior que o dispositivo, ZFS se apóia em espaços de armazenamento virtuais (virtual storage pools).
Os espaços se constroem a partir de um ou mais dispositivos virtuais (vdevs), de que cada um é 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á disponível para todos os sistemas de arquivos do spool.
Para limitar a quantidade de espaço que um sistema de arquivos pode ocupar, se podem aplicar cotas de disco, e garantir que haverá espaço disponível para determinado sistema de arquivos. Pode-se fixar uma reserva de disco.
8. Criação de sistemas de arquivos de rápido acesso
A criação de um novo sistema de arquivos no interior de um espaço de armazenamento ZFS e extremamente rápida e fácil, muito mais parecida em tempo e esforço a criar um novo diretório em sistema de arquivos tradicional que ao tempo e esforço necessário para criar um novo sistema de arquivos em qualquer outro SO tradicional.
Estes sistemas de arquivos podem ter cotas reservadas e outras capacidades de administração úteis. Entre os usos possíveis se encontra a criação de um sistema de arquivos separado, não só um diretório, para cada usuário do sistema.
9. Capacidades adicionais
- Prioridade I/O explícita com deadline scheduling;
- Ordenação e agregação de I/O globalmente ótima;
- Múltipla e independente prefetch streams com tamanho automático e detecção de passos;
- Operações de Diretório de tempo constante e Paralelo;
- Striping dinâmico de discos entre devices;
- Tamanho múltiplo de blocos de disco escolhidos dinamicamente de acordo com os dados e carga de armazenamento;
- Escalonamento explícito de prioridade de operações de E/S;
- Ordenação de operações de E/S em disco agregada e global;
- Streams múltiplos de independentes de pré-aquisição de dados com detecção automática de demanda;
- Snapshots lógicos instantâneos e limitados, segundo padrão de McKusick, implementado no UFS2 do FreeBSD pela primeira vez;
- Operações de diretório em tempo constante e paralelas;
- COW (Copy-On-Write), técnica criada no FreeBSD que aumenta performance e segurança nas operações de escrita de dados entre áreas física ou logicamente distintas.