Você deve considerar duas coisas:
- se há ou não espaço alocado para os dados e
- se existem ou não dados realmente gravados.
Se um arquivo não tiver dados e nenhum espaço for alocado para ele, você receberá uma indicação de fim de arquivo se tentar lê-lo. Se você gravar nele, o sistema de arquivos deve alocar espaço no momento da gravação: em outras palavras, a operação de gravação pode falhar com um erro ENOSPC se não houver espaço livre em disco para alocar.
Um buraco em um arquivo esparso não tem espaço alocado para ele, e se você tentar ler essa parte do arquivo, receberá de volta dados que são todos zeros. Se você gravar nessa parte do arquivo, o sistema de arquivos deve alocar espaço novamente para ele no momento da operação de gravação, portanto, a operação de gravação pode falhar com um erro ENOSPC se o disco estiver cheio.
Uma extensão ZFOD é nominalmente alocada para um arquivo, mas ainda não há dados gravados nela. Se você lê, você recebe todos os zeros; se você gravar nele, o espaço já está alocado, portanto, não há risco de uma condição de erro do ENOSPC.
E, finalmente, há uma extensão de dados normal: se você a ler, recuperará os dados reais e, se gravar nela, substituirá os dados existentes por novos dados.
Em outras palavras, a extensão ZFOD é uma otimização para situações em que um aplicativo pode alocar um arquivo grande, não usar tudo isso imediatamente e ainda precisa de uma garantia de que o espaço estará disponível quando necessário. Para armazenamento SSD, apagar dados existentes de um bloco é a operação mais lenta, portanto as extensões ZFOD permitem que o sistema crie rapidamente um grande alocando-o inicialmente como extensões ZFOD: o sistema de arquivos pode fazer o apagamento real & preenchendo com zeros on-demand para cada bloco que é realmente usado.
Se um armazenamento SSD for usado para armazenar algo como imagens de disco para máquinas virtuais, as extensões ZFOD podem ajudar a minimizar o número de vezes que os blocos de disco precisam ser apagados e melhorar a vida útil do SSD.