Quanto espaço os diretórios consomem?

13

Quanto espaço os diretórios vazios ocupam?

No sistema de arquivos Windows e NTFS, diz '0 bytes', o que é impossível.

Quanto é realmente ocupado por um diretório? Depende do sistema de arquivos ou sistema operacional?

ShadowHero
fonte
1
Tecnicamente, o que a janela Propriedades está mostrando é o conteúdo da pasta, que, se vazia, ocupa 0 bytes em qualquer disco. Sua pergunta lida com o espaço que a estrutura de pastas ocupa em um sistema de arquivos. Obviamente, depende do sistema de arquivos. No FAT32, as únicas coisas que você precisa armazenar são alguns sinalizadores (ocultos, arquivados) e o nome e o caminho. No NTFS, você também precisa armazenar permissões e mais algumas coisas. Em suma, esse espaço é quase insignificante.
Doktoro Reichard
Portanto, no NTFS, quanto espaço um diretório vazio ocupa? por exemplo, se eu criar 1 bilhão de diretórios, quanto espaço é esse?
ShadowHero
Como eu disse, depende do nome e do caminho da pasta. Supondo que você use todos os 26 caracteres, com 1 bilhão de nomes exclusivos, você pode ter cerca de 7 nomes de pastas com comprimento de caracteres. Portanto, 7 bytes * 1.000.000.000 equivalem a aproximadamente 7 GB de espaço. Isso é o mínimo, eu suponho. Acho que tenho cerca de 1 milhão de pastas em todas as minhas unidades, para que esse valor nem seja atingido na realidade. Não esqueça que esta é uma estimativa muito aproximada.
Doktoro Reichard 01/12/13
Legal, entendo ... como as permissões são armazenadas?
ShadowHero 01/12/13
1
@AthomSfere Hmm ... isso significa que as pastas não podem armazenar infinitas permissões de usuário, a menos que vários registros MFT possam ser atribuídos. Vai tentar procurar.
Doktoro Reichard

Respostas:

16

Tecnicamente, o que a janela Propriedades está mostrando é o conteúdo da pasta, que, se vazia, ocupa 0 bytes em qualquer disco.

Sua pergunta lida com o espaço que a estrutura de pastas ocupa em um sistema de arquivos, o que obviamente depende dele. No FAT32, as únicas coisas que você precisa armazenar são alguns sinalizadores (ocultos, arquivados) e o nome e o caminho. No NTFS, você também precisa armazenar permissões e mais algumas coisas. Em suma, esse espaço é quase insignificante.

O espaço que uma estrutura de diretórios vazia ocupa depende do nome e do caminho da pasta. Como exemplo, suponha que você coloque todas as pastas em uma unidade raiz (por exemplo, C :) e use todos os 26 caracteres alfabéticos; com 1 bilhão de nomes exclusivos, você pode ter log_26 (1.000.000.000) = aproximadamente cerca de 7 (6,3065) nomes de pastas com comprimento de caracteres. Portanto, 7 bytes * 1.000.000.000 equivalem a aproximadamente 7 GB de espaço.

Isso é mínimo, apenas com base na quantidade de nomes de espaço que precisam assumir em qualquer estrutura. Como será mostrado, os sistemas de arquivos armazenam muito mais informações além do nome do arquivo em sua estrutura de arquivos.

Acho que tenho cerca de 1 milhão de pastas e arquivos em todas as minhas unidades, para que esse valor nem seja atingido na realidade. Não esqueça que esta é uma estimativa muito aproximada.


Os sistemas de arquivos mais usados ​​no momento podem ser considerados (sem dúvida) como FAT (File Allocation Table) e NTFS (New Technology File System). O FAT, como o conhecemos, está em uso desde 1996, quando o Windows 95 foi lançado com o FAT32. Embora substituído por outros sistemas de arquivos mais resilientes, como NFTS (Windows), HFS + (OSX) ou ext3 (Linux), ainda é amplamente utilizado em dispositivos portáteis ou em cartões de memória ou unidades flash, pois é bem suportado pela maioria dos sistemas operacionais. e acima de tudo, é simples.

Agora, o que importa. Os arquivos e diretórios em uma partição FAT, mesmo que não contenham nada, têm um nome, um local, certos atributos, etc., armazenados em uma zona chamada tabela de diretório .

A tabela de diretórios é um arquivo especial (ou seja, está oculto ao uso regular, de modo que somente o SO e certos aplicativos possam acessá-lo diretamente). Ele representa um diretório (também conhecido como pasta) e qualquer arquivo ou pasta armazenado nele possui uma entrada de 32 bytes na tabela. Como a tabela de diretórios é um arquivo, ela ocupa um ou mais clusters (ou seja, caixas com um tamanho predefinido em um disco, onde apenas um único arquivo (ou parte de um) se encaixa).

Portanto, qualquer pasta ou diretório, em uma unidade moderna (> 512 MB), possui pelo menos uma sobrecarga de 4 KB, para armazenar a tabela (fonte) . No entanto, isso significa que você pode armazenar 128 arquivos diferentes (4 * 1024 B / 32 B = 128) na mesma pasta e a sobrecarga no armazenamento dos registros ainda é o mesmo 4KB de antes.

Pegando carona no primeiro exemplo, isso significaria que o bilhão de pastas teria uma sobrecarga de 32 GB, em vez dos aproximadamente 7 GB que eu calculei. Esses 32 GB armazenam não apenas o nome abreviado (8 caracteres ASCII), mas também os atributos, sinalizadores, datas de acesso, criação e modificação e outros atributos herdados.

Supondo que você leia tudo isso, pode haver uma pergunta que você possa ter: "Bem, tudo está bem e bom, mas como estão armazenados os nomes longos, como Wabbajack ou até mesmo os hash, como e4d909c290d0fb1ca068ffaddf22cbd0 , armazenados?"

A Microsoft no Windows 95 decidiu adicionar esse recurso para aprimorar a experiência do usuário. Para evitar a quebra de um sistema "quase padrão", eles usaram uma solução alternativa chamada VFAT (Virtual FAT). Essencialmente, para ajustar o nome do arquivo longo ao arquivo, registros adicionais foram gravados antes do registro do arquivo real (com alguns atributos especiais que não podem ser vistos pelos sistemas anteriores). O sistema de nome de arquivo longo permite um comprimento máximo de 255 caracteres UTF-16 (Unicode) (origem) (origem) .

Se você alterasse o primeiro exemplo, de forma que cada pasta tivesse 9 caracteres, a sobrecarga dobraria de 32 GB para 64 GB, pois seria necessário gravar mais um registro para armazenar o nome longo.


De acordo com o artigo da Wikipedia sobre NTFS, todas as permissões são armazenadas na tabela de arquivos mestre. Seu espaço pode ser visto aparentemente através do Desfragmentador de Disco, como mostrado aqui .

O tamanho que um registro MFT ocupa de uma pasta ou arquivo é descrito aqui :

Os registros de arquivo e pasta têm 1 KB cada e são armazenados na MFT, cujos atributos são gravados no espaço alocado na MFT. Além dos atributos do arquivo, cada registro contém informações sobre a posição do registro no MFT.

Quando os atributos de um arquivo podem caber no registro de arquivo MFT para esse arquivo, eles são chamados de atributos residentes. Atributos como nome do arquivo e registro de data e hora são sempre residentes. Quando a quantidade de informações de um arquivo não cabe no seu registro de arquivo MFT, alguns atributos do arquivo se tornam não residentes . Atributos não residentes são alocados em um ou mais clusters de espaço em disco . Uma parte do atributo não residente permanece na MFT e aponta para os clusters externos. O NTFS cria o atributo Lista de Atributos para descrever o local de todos os registros de atributos. A tabela Tipos de atributos de arquivo NTFS lista os atributos de arquivo atualmente definidos pelo NTFS.

Portanto, no NTFS, as pastas ocupam pelo menos 1 KB de espaço, a menos que tenham longas listas de argumentos e permissões; nesse ponto, o registro MFT ocupa um cluster adicional na partição, cujo tamanho depende de como foi formatado, embora para mais de 2 GB da Microsoft nessa publicação seja recomendado clusters de 4KB.

Doktoro Reichard
fonte
1
Encontrei algumas informações sobre o comprimento de 1024 bytes que mencionei anteriormente, c-ad.bnl.gov/kinyip/windows/MFT.html É uma leitura muito boa e pode beneficiar sua resposta se você quiser expandir.
Austin T French
Eu gostaria de expandir (para tornar essa uma resposta mais completa, sem que isso seja muito técnico ...), embora eu tenha que deixar isso para amanhã. Obrigado por essa fonte de qualquer maneira.
Doktoro Reichard
Correção técnica: não há limite de 255 caminhos. Em vez disso, existe o limite MAX_PATH de 260 caracteres para caminhos padrão e o caminho de tamanho estendido de 32.767 caracteres (sim, mais de 32 mil caracteres) para caminhos unicode verdadeiros (usando o indicador `\\?` caminho simples de extensão estendida ou como caminho UNC). Consulte docs.microsoft.com/en-us/windows/win32/fileio/… para obter mais detalhes sobre isso.
Mike 'Pomax' Kamermans
3

Para um exemplo do mundo real, eu apenas gravei meu espaço livre, criei uma grande estrutura de diretórios e subtraí o novo livre para descobrir quanto espaço foi usado. Criei diretórios de 0 a 6 para cada dia da semana, depois dentro dos diretórios de 0 a 23 por horas do dia e depois de 0 a 59 por minutos da hora. No total, seus 10.080 diretórios. O uso do meu disco foi alterado em 6.926.336 bytes. Isso funciona para 687 bytes por diretório. Caso você se importe, isso também resulta em 0,0006% de uma unidade de 1 TB (se você calcular 1 TB como 1024 ^ 4).

andy
fonte
3
Você pode adicionar o sistema de arquivos à sua resposta? Os nomes dos diretórios eram todos curtos?
fixer1234
0

No Windows 10, criei 1.000.000 de pastas vazias e, de acordo com a getsizefunção do python , ocupou 200540160 bytes de espaço. Isso é uma média de 200,54016 bytes por pasta.

Es Kay
fonte