Por que há uma grande diferença entre tamanho e tamanho no disco?
Na maioria das vezes, os valores de 'Tamanho' e 'Tamanho no disco' estarão muito próximos da correspondência ao verificar a pasta ou o tamanho do arquivo, mas e se houver uma enorme discrepância entre os dois? O post de perguntas e respostas do SuperUser de hoje aborda a resposta para esse problema confuso.
A sessão de perguntas e respostas de hoje nos é oferecida por cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas conduzido pela comunidade..
A questão
Leitor de superusuário O thelastblack quer saber por que existe uma diferença tão grande entre 'Tamanho' e 'Tamanho no disco' para uma pasta no cartão SD do telefone:
Como você pode ver abaixo, há muita diferença entre os campos "Tamanho" e "Tamanho no disco" desta pasta. Por que é que?
Eu sei que 'Tamanho no disco' deve ser um pouco mais do que 'Tamanho' por causa das unidades de alocação no Windows, mas por que há tanta diferença? Poderia ser por causa do grande número de arquivos?
BTW, esta pasta está no cartão SD do meu telefone Android. Dentro disso, meu aplicativo de mapas armazena seus mapas em cache, e o aplicativo recebe seus mapas do Google Maps.
Olhando para a imagem, há definitivamente uma enorme discrepância entre 'Tamanho' e 'Tamanho no disco', então o que aconteceu aqui para causar isso?
A resposta
O colaborador do SuperUser Bob tem a resposta para nós:
Eu vou estar assumindo que você está usando o sistema de arquivos FAT / FAT32 aqui, já que você mencionou que este é um cartão SD. O NTFS e o exFAT comportam-se de forma semelhante no que diz respeito às unidades de atribuição. Outros sistemas de arquivos podem ser diferentes, mas eles não são suportados no Windows de qualquer maneira.
Se você tem muitos arquivos pequenos, isso é certamente possível. Considere isto:
- 50.000 arquivos
- Tamanho de cluster de 32 KB (unidades de alocação), que é o máximo para FAT32
Ok, agora o mínimo o espaço ocupado é de 50.000 x 32.000 = 1,6 GB (usando prefixos do SI, não binários, para simplificar as contas). O espaço que cada arquivo ocupa no disco é sempre um múltiplo do tamanho da unidade de alocação - e aqui estamos assumindo que cada arquivo é realmente pequeno o suficiente para caber dentro de uma única unidade, com algum espaço (desperdiçado) sobrando.
Se cada arquivo tiver uma média de 2 KB, você terá cerca de 100 MB no total, mas também está perdendo 15x em média (30 KB por arquivo) devido ao tamanho da unidade de alocação.
Explicação detalhada
Por que isso acontece? Bem, o sistema de arquivos FAT32 precisa manter o controle de onde cada arquivo é armazenado. Se fosse para manter uma lista de cada byte, a tabela (como um catálogo de endereços) cresceria na mesma velocidade dos dados - e gastaria muito espaço. Então, o que eles fazem é usar “unidades de alocação”, também conhecidas como “tamanho do cluster”. O volume é dividido nessas unidades de alocação e, no que diz respeito ao sistema de arquivos, elas não podem ser subdivididas - esses são os menores blocos que podem ser endereçados. Assim como você tem um número de casa, mas seu carteiro não se importa com quantos quartos você tem ou quem mora neles.
Então, o que acontece se você tiver um arquivo muito pequeno? Bem, o sistema de arquivos não se importa se o arquivo é 0 KB, 2 KB ou mesmo 15 KB, ele dará o menor espaço possível - no exemplo acima, são 32 KB. Seu arquivo está usando apenas uma pequena quantidade deste espaço, e o resto é basicamente desperdiçado, mas ainda pertence ao arquivo - muito parecido com um quarto que você deixa desocupado.
Por que existem tamanhos diferentes de unidades de alocação? Bem, torna-se um trade-off entre ter uma mesa maior (livro de endereços, por exemplo, dizer que John é dono de uma casa na 123 Fake Street, 124 Fake Street, 666 Satan Lane, etc.) ou mais espaço desperdiçado em cada unidade . Se você tiver arquivos maiores, faz mais sentido usar unidades de alocação maiores - porque um arquivo não recebe uma nova unidade (house) até que todos os outros sejam preenchidos. Se você tem muitos arquivos pequenos, bem, você vai ter uma grande mesa (lista de endereços) de qualquer maneira, então também pode dar-lhes pequenas unidades (casas).
Grandes unidades de alocação, como regra geral, desperdiçarão muito espaço se você tiver muitos arquivos pequenos. Geralmente, não há um bom motivo para ultrapassar 4 KB para uso geral.
Fragmentação?
Quanto à fragmentação, a fragmentação não deve desperdiçar espaço dessa maneira. Arquivos grandes podem ser fragmentados, isto é, divididos em várias unidades de alocação, mas cada unidade deve ser preenchida antes que a próxima seja iniciada. A desfragmentação pode economizar um pouco de espaço nas tabelas de alocação, mas esse não é seu problema específico.
Soluções possíveis
Como o gladiator2345 sugeriu, suas únicas opções reais neste momento são viver com ele ou reformatar com unidades de alocação menores.
Seu cartão pode ser formatado em FAT16, que tem um limite menor no tamanho da tabela e, portanto, requer unidades de alocação muito maiores para endereçar um volume maior (com um limite superior de 2 GB com unidades de alocação de 32 KB). Fonte cortesia de Braiam. Se for esse o caso, você deve ser capaz de formatar com segurança como FAT32 de qualquer maneira.
Tem algo a acrescentar à explicação? Som desligado nos comentários. Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui.