Thin provisioning é um conceito relativo à alocação de dados, presente nos principais hypervisors e gerenciadores de volumes. Ele possibilita supra dimensionamento de espaço e alocação dinâmica de um disco virtual (até atingir sua capacidade pré estabelecida). Constam mais detalhes no artigo sobre overbooking de storage.
ZFS é um poderoso sistema de arquivos e gestor de volumes lançado, em 2005, pela Sun Microsystems. Ele proporciona resiliência e alta disponibilidade, sendo muito usado em grandes storages e plataformas high-end (Oracle ZS3, ZS5, etc.). Diversos sistemas operacionais possuem suporte nativo a ZFS, como Solaris, FreeNAS e XigmaNAS. Mais informações podem ser encontradas na página sobre recuperação de dados em ZFS.
O objetivo deste documento é descrever e demonstrar o uso combinado dessas duas tecnologias.
Pool é composto de um ou mais dispositivos vdev. Nesse exemplo usamos os HDs /dev/hd5 /dev/hd6 /dev/hd7 /dev/hd8 e /dev/hd9 para criar o pool denominado ThinProv.
Para melhor ilustrar este artigo, foi escolhido um volume do tipo RAID-Z - que é muito usado em appliances (Oracle ZS3, ZS5, etc.) e servidores NAS (FreeNAS, dentre outros) com ambientes pré-configurados. A operação foi efetuada com o comando zpool create ThinProv raidz /dev/hd[5-9].
Cada um dos 5 discos rígidos utilizados nessa demonstração têm 1 terabyte de capacidade. Portanto o RAID criado abrange, aproximadamente, 4 terabytes.
Nesse primeiro exemplo, foi provisionado dentro do pool ThinProv o volume thinvol. O comando executado nesse procedimento é zfs create -s -V 20TB ThinProv/thinvol. Deve-se reparar que a capacidade (20 TB) do volume recém criado excede, deliberadamente, o tamanho (4 TB) do pool a qual ele pertence.
A propriedade de criar um disco virtual acima da capacidade real dos seus dispositvos de armazenamento é atrativa, mas deve ser usada com devida cautela. Esse assunto é discutido com mais profundidade no artigo sobre overbooking de storage.
Após criação do volume é possível usar o comando zfs get para exibir as características do provisionamento. Na propriedade volsize observa-se capacidade muito além daquela disponível pelo conjunto de discos; em available aparece a capacidade real de armazenamento. A configuração de thin provisioning adicionou ao volume um potencial de armazenamento superestimado.
Nesse segundo exemplo, foi provisionado outro dispositivo de bloco virtual, chamado thinvol2, com objetivo de apenas ilustrar a alocação progressiva de espaço.
O comando empregado nesse procedimento é zfs create -s -V [tamanho_do_volume] ThinProv/thinvol2, sendo que o tamanho indicado deverá ser menor ou igual ao tamanho do pool. Esse é um modelo comum em implementações de iSCSI para ambientes com ZFS.
Logo quando um disco virtual convencional (thick provisioning) é criado, ele aloca 100% de seu tamanho em storage. Quando usamos thin provisioning, o espaço usado em storage só aumenta quando dados são inseridos no dispositivo virtual. Podemos reparar que o zvol thinvol2, usado como exemplo, tem capacidade de 100GB mas ocupa apenas 19,2K em disco.
Para entender melhor a alocação dinâmica é recomendado formatar o volume e inserir dados na partição. Assim, pode-se observar o aumento gradativo do disco virtual.
O uso de provisionamento não programado pode ocasionar danos em discos ou máquinas virtuais por exceder a capacidade real de armazenamento do ambiente. Os recursos de storage devem sempre atender, com folga, as demandas exigidas pelos ambientes de produção.
O ambiente deve conter equipamentos que permitem adequada escalabilidade de armazenamento. Devem ser usadas tecnologias de volumes (RAID MD, LVM, Bioctl, etc.) e sistemas de arquivos (ZFS, BTRFS, z/FS, etc.) que suportam adição online de drives, assim como expansão de particionamento em tempo real (Ext4, JFS, XFS, entre outros.).
Ambientes com informações críticas devem ter uma estrutura eficiente de backup e planos de data restore.