Como o tamanho de um arquivo no disco pode ser 0 bytes quando há dados?

106

Eu tenho um arquivo no Windows 10 com 362 bytes de dados, mas o "tamanho no disco" é de apenas 0 bytes. É um programa simples "Hello world", escrito em assembly e salvo no Notepad ++ .

Como é possível que o tamanho do disco seja zero quando o tamanho do arquivo é 362 bytes?

Eu tenho um SSD, não um disco rígido normal.

Captura de tela da caixa de diálogo Propriedades:

Captura de tela da caixa de diálogo Propriedades

Coder88
fonte
4
Resposta curta: Se não for necessário espaço adicional no disco para armazenar seu conteúdo.
David Schwartz
11
@ Thomas Não é uma duplicata. O nome parece semelhante, mas essa pergunta está perguntando por que o Windows declara um arquivo de zero byte como tamanho zero, apesar de exigir registro em algum lugar. Esta pergunta pergunta por que o tamanho do disco pode ser zero, mesmo se houver dados no arquivo.
Ben N
@BenN Está sinalizando inadequado, porque você está certo, certamente não é uma duplicata.
William
Olá Coder88, acredito que a pessoa que sinalizou sua postagem como duplicada estava enganada - a outra pergunta estava fazendo algo diferente; você realmente fez uma boa pergunta. Se você quis indicar que sua pergunta foi resolvida, clique na marca de seleção ao lado de uma resposta aqui.
Ben N

Respostas:

155

Isso acontece se o arquivo é tão pequeno que seu conteúdo e a contabilidade do sistema de arquivos cabem em 1 KB. Para economizar espaço em disco, o NTFS mantém pequenos arquivos "residentes", armazenando seu conteúdo diretamente no registro do arquivo, para que nenhum cluster precise ser alocado para ele. Portanto, o tamanho do disco é zero, porque não há nada além do registro do arquivo. Depois que o arquivo fica suficientemente grande, o NTFS o torna "não residente", aloca um ou mais clusters para ele (criando um "tamanho em disco" diferente de zero) e cria um "par de mapeamento" no registro do arquivo no lugar dos dados para aponte para o cluster.

Discos rígidos SSD ou Windows 10 não afetam isso; é simplesmente um recurso NTFS. Leitura adicional: Os quatro estágios do crescimento de arquivos NTFS .

Observe que a métrica "tamanho no disco" não está exatamente correta. Por exemplo, nunca inclui a constante 1 KB que o registro de arquivo NTFS ocupa. A métrica foi introduzida no Windows 95, que não usava NTFS e, portanto, não poderia ter sido responsável por esse fenômeno; apenas mostrou o tamanho do arquivo arredondado para o próximo múltiplo do tamanho do cluster. Esse algoritmo de estimativa foi levado ao Windows 7, embora muitas versões do Windows entre eles usassem NTFS e armazenamento residente. Finalmente, foi atualizado no Windows 8 para contar arquivos com apenas dados residentes como tamanho zero no disco. Leitura adicional: O que é 'Tamanho no disco'?

Ben N
fonte
1
Por um momento, pensei que estivéssemos analisando os efeitos da redução de redundância de dados ( blog.fosketts.net/2012/01/03/… ), mas acredito que esse recurso funcione em um nível transparente para algo como a métrica "tamanho em disco".
precisa saber é o seguinte
8
Mas espere ... não consigo replicar o comportamento dos OPs no meu volume NTFS (Windows 7). Independentemente de como eu crio arquivos pequenos (alguns com apenas um byte), cada um deles ocupa "espaço em disco" de 4KB, de acordo com a caixa de diálogo Propriedades do arquivo. Hmm ...
misha256
8
@ misha256 Ah, eu posso reproduzi-lo com um arquivo abaixo de ~ 700 bytes no Windows 8.1. Meu palpite é que o algoritmo se tornou mais inteligente em algum lugar entre o Windows 7 e 8.1, uma vez que, originalmente, ele não conhecia nenhum material NTFS sofisticado ( fonte ). Observe que quando um arquivo passa para o segundo estágio, ele nunca diminui.
Ben N
6
@ Philip Acho que alguém poderia argumentar de qualquer maneira. Tradicionalmente, o "arquivo no disco" era "do tamanho de clusters alocados" (portanto, por exemplo, era possível ver os efeitos da escolha de um tamanho de cluster muito grande). Segundo meu conhecimento, nunca incluiu o espaço de "catálogo" necessário ao sistema de arquivos (por exemplo, o tamanho da "entrada de diretório" ou "o comprimento da cadeia de entradas FAT").
TripeHound
3
@ Philipp: De qualquer forma, incluir a contabilidade no tamanho do arquivo fica cada vez mais rápido: como você descreveria um arquivo de 1 cluster com 3 nomes?
Deduplicator