12Aug

Por que existe uma grande diferença entre 'Tamanho' e 'Tamanho no disco'?

Na maioria das vezes, os valores de 'Tamanho' e 'Tamanho no disco' serão muito próximos de coincidir ao verificar a pasta ou o tamanho do arquivo, mas e se houver uma enorme discrepância entre os dois? O super-usuário Q & A de um post analisa a resposta a este problema confuso.

Today's Question &A sessão de atendimento chega a cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento comunitário de sites Q & A.

A questão

O leitor SuperUser thelastblack quer saber por que existe uma enorme diferença entre 'Tamanho' e 'Tamanho no disco' para uma pasta no cartão SD do seu telefone:

Como você pode ver abaixo, há tanta diferença entre oCampos 'Tamanho' e 'Tamanho no disco' para esta pasta. Por que é que?

Eu sei que 'Tamanho no disco' deve ser um pouco mais do que 'Tamanho' por causa de unidades de alocação no Windows, mas por que há muita diferença? Poderia ser devido à grande quantidade 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 obtém seus mapas do Google Maps.

Olhando para a captura de tela, definitivamente há uma enorme discrepância entre 'Tamanho' e 'Tamanho no disco', então o que aconteceu aqui causa isso?

A resposta

Contribuinte do SuperUser Bob tem a resposta para nós:

Eu assumirei que você está usando o sistema de arquivos FAT / FAT32 aqui, pois você menciona que este é um cartão SD.NTFS e exFAT se comportam de forma semelhante em relação às unidades de alocaçã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 isso:

  • 50,000 arquivos
  • 32 KB tamanho do cluster( unidades de alocação), que é o máximo para FAT32

Ok, agora o mínimo espaço coletado é 50,000 * 32,000 = 1,6 GB( usando prefixos SI, não binário, para simplificar oMatemáticas).O espaço que cada arquivo leva 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) restante.

Se cada arquivo tivesse uma média de 2 KB, você obteria aproximadamente 100 MB de total - mas também está desperdiçando 15x( 30 KB por arquivo), em média, devido ao tamanho da unidade de alocação.

Explicação em profundidade

Por que isso acontece? Bem, o sistema de arquivos FAT32 precisa acompanhar o local onde cada arquivo é armazenado. Se fosse para manter uma lista de cada byte, a tabela( como um livro de endereços) cresceria à mesma velocidade que os dados - e desperdiçava muito espaço. Então o que eles fazem é usar "unidades de alocação", também conhecido como "tamanho do cluster".O volume é dividido nessas unidades de alocação, e no que diz respeito ao sistema de arquivos, eles não podem ser subdivididos - esses são os blocos mais pequenos que podem abordar. Como você tem um número de casa, mas seu carteiro não se importa com quantos quartos você tem ou quem vive 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 for 0 KB, 2 KB, ou mesmo 15 KB, ele lhe dará o menor espaço possível - no exemplo acima, isso é 32 KB.Seu arquivo está usando apenas uma pequena quantidade desse 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 diferentes tamanhos de unidades de alocação? Bem, torna-se um trade-off entre ter uma tabela maior( livro de endereços, por exemplo, dizendo que John possui uma casa em 123 Fake Street, 124 Fake Street, 666 Satan Lane, etc.), ou mais espaço desperdiçado em cada unidade( casa).Se você tiver arquivos maiores, faz mais sentido usar unidades de alocação maiores - porque um arquivo não recebe uma nova unidade( casa) até que todos os outros sejam preenchidos. Se você tiver muitos pequenos arquivos, bem, você vai ter uma grande mesa( catálogo de endereços) de qualquer maneira, assim também pode dar-lhes pequenas unidades( casas).

Grandes unidades de alocação, como regra geral, desperdiçam muito espaço se você tiver muitos arquivos pequenos. Geralmente, não há uma boa razão para ir acima de 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, ou seja, divididos em unidades de alocação múltiplas, mas cada unidade deve ser preenchida antes que o próximo seja iniciado. Desfragmentar pode salvar um pouco de espaço nas tabelas de alocação, mas essa não é sua questão específica.

Possíveis soluções

Como o gladiator2345 sugeriu, suas únicas opções reais neste momento são viver com ela ou reformatar com unidades de alocação menores.

O seu cartão pode ser formatado no FAT16, que tem um limite menor no tamanho da tabela e, portanto, requer unidades de alocação muito maiores para atender 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ê poderá formatar com segurança como FAT32 de qualquer maneira.

Tem alguma coisa a adicionar à explicação? Som desligado nos comentários. Deseja ler mais respostas de outros usuários Tech-savvy Stack Exchange? Confira o tópico de discussão completo aqui.