Ouvi muitas vezes que os instantâneos do ZFS são "gratuitos", que por causa dos instantâneos de design copy-on-write do ZFS não consomem nenhum espaço em disco, a menos que os dados sejam alterados, e só então o uso do espaço é limitado aos blocos que realmente mudado. Muitas respostas no Stack Exchange e postagens na Internet em geral fazem essa afirmação ou dizem que o espaço usado é "insignificante"
Quão precisas são essas declarações? Quanto espaço em disco os instantâneos do ZFS realmente usam?
Eu fiz um teste, na verdade para um problema não relacionado (
zfs send
não conseguir enviar um sistema de arquivos com mais de 42.000 snapshots) e para minha surpresa, descobri que os snapshots do zfs realmente consomem um punhado de megabytes . Nos meus testes, isso foi cerca de 4 MiB/snapshot.Para testar isso, criei um zpool vazio com um único sistema de arquivos sem arquivos, diretórios ou outros dados . Tentei então criar 100.000 snapshots e, para minha surpresa, isso falhou depois de criar apenas 50.698 snapshots:
Com base nesse teste, parece que o ZFS precisa de cerca de 3,9 MiB de espaço para armazenar metadados para cada snapshot em um zpool de 200 GiB. Isso parece variar de acordo com o tamanho do pool; quando testei com um zpool de 20GiB, ele saiu para ~1,8 MiB/snapshot.
Portanto, embora os instantâneos do zfs possam usar uma quantidade "desprezível" de espaço (a definição de "insignificante" pode ser baseada em opinião) esse custo não é zero; há uma pequena sobrecarga de espaço (mensurável em megabytes) para cada instantâneo, mesmo quando não há blocos mudança.