ZFS é um sistema de arquivos livre, desenvolvido pela
Sun Microsystems (atualmente Oracle) para seu sistema operacional Solaris. O significado original era Zettabyte File System, porém agora é um pseudo-acrônimo.
As características do ZFS incluem grande capacidade de armazenamento, integração de conceitos de sistema de arquivos e administração de volumes (LLVM), RAID via software, nova estrutura de dados no disco, sistema de arquivos de rápido acesso, administração de espaços de armazenamento eficiente, compressão dos dados eficiente (LZMA ou GZIP), segurança e proteção contra corrupção dos dados, checagem contínua da integridade dos dados com reparação automática, instantâneos (snapshots), implementação nativa NFSv4 ACLs.
Tudo isso de forma fácil e com a mesma ferramenta de administração do sistema de arquivos.
Características do ZFS
1. Integridade dos dados
Uma das principais características que distingue ZFS dos demais sistemas de arquivos é seu foco na integridade dos dados.
Todos os ponteiros com blocos de um sistema de arquivos contém um checksum (fletcher4 ou SHA-256) sobre o bloco apontado, que é checado ao se ler o bloco. Se houver divergência com o checksum, o sistema de arquivos consegue corrigir os dados automaticamente se houver outra cópia disponível (Mirror, RAID-Z, journal/ZIL ou então redundância no mesmo volume). Tudo isso de forma automática e online, sem necessitar desmontar o volume como nos sistemas que utilizam-se da ferramente fsck (etx3, etx4 etc.).
Isso torna o sistema de arquivos extremamente eficiente contra a bad blocks e dados corrompidos.
2. Capacidade de armazenamento
ZFS é um sistema de arquivos de 128 bits, ou seja, suporta 1,84 × 10^19 vezes a capacidade de um sistema de arquivos de 64 bits como o BTRFS. 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^48 - número de entradas em um diretório individual
- 2^64 bytes - tamanho máximo de um arquivo
- 2^64 bytes - tamanho máximo de qualquer atributo
- 2^78 bytes - tamanho máximo de um pool
- 2^56 - número de atributos de um arquivo
- 2^64 - número de dispositivos em qualquer pool
- 2^64 - número de pools em um sistema
- 2^64 - número de sistemas de arquivos em um pool
- 2^128 bytes (340,282,366,920,938,463,463,374,607,431,768,211,456 bytes) - capacidade máxima de armazenamento
Como exemplo das capacidades expressadas por estes números, se um indivíduo criasse 1000 arquivos por segundo, levaria 8925,51 anos para alcançar o limite imposto pelo número de arquivos (2^48) em um diretório.
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 (fletcher ou SHA-256) 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. Snapshots
Como ZFS não sobrescreve dados, tomar um instantâneo (snapshot) 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.
É possível voltar o sistema de arquivos a um snapshot anterior após alguma mudança indesejada, o que funciona parecido com pontos de restauração do sistema no Windows.
4. Dynamic striping
A medida que se anexem dispositivos de armazenamento ao pool, 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.
5. 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).
6. 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 apoia 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 pool.
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.
7. 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 S.O. 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.
8. 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.
- Capacidade de gerenciar RAID via software e LLVM pelo próprio sistema de arquivos.
Introdução adaptada de: