Limite ao número de arquivos na Lixeira?

5

Há algumas semanas, eu estava cuidadosamente excluindo um backup antigo da minha unidade de dados. Fiz uma verificação de arquivo duplicado entre o backup antigo e a cópia ativa e excluí as cópias antigas na Lixeira. Estava indo bem e como esperado até que de repente eu não consegui mais apagar nada. Sempre que eu tentei apagar um arquivo - qualquer arquivo do arquivo antigo - ele falharia.

Eu examinei a Lixeira e ocorreu-me que pode ser porque havia simplesmente muitos arquivos na lixeira. Eu não estou falando sobre tamanho , mas o número de arquivos. Veja alguns fatos sobre a situação:

  • É um sistema Windows XP
  • O volume com o backup antigo é FAT32
  • O volume com o backup antigo tinha 302 MB de espaço livre
  • O problema ocorreu quando havia 31.594 arquivos no bin
  • Os arquivos reciclados usaram 236MB
  • O arquivo INFO2 (que rastreia os nomes de arquivos originais do arquivo reciclado) está acima de 24 MB
  • A tentativa de excluir mais um arquivo não funcionaria independentemente de seu tamanho
  • A Lixeira está configurada para não ter limites em todas as unidades

Eu tentei pesquisar isso, mas o o mais próximo que posso encontrar é uma informação sobre limites para o tamanho da Lixeira, nada sobre o número de arquivos .

Alguém já ouviu falar disso? Alguém pode confirmar que há um limite para quantos arquivos podem ser armazenados?

    
por Synetech 27.11.2013 / 22:43

1 resposta

4

Um diretório FAT32 pode ter 65.536 entradas de diretório.

Cada arquivo e subdiretório leva de duas a treze entradas, dependendo do tamanho do nome.

Portanto, na situação mais otimista, sua lixeira pode conter 65.536 / 2 = 32768 arquivos + diretórios se todos eles tiverem nomes de arquivos na faixa de 8.3. (Nomes curtos)

Seus 31594 arquivos + 53 diretórios parecem atingir o limite.
Provavelmente existem alguns arquivos que levam > 2 entradas devido a nomes de arquivos mais longos.

Editar:

As especificações do FAT32 estão disponíveis aqui:
link

Ele fornece detalhes sobre tudo, incluindo a estrutura de diretórios e a maneira como os Long File Names (LFNs) são armazenados nos diretórios. Basicamente, há uma entrada de diretório que sempre mantém a versão curta (8.3) do nome do arquivo. E como o Windows precisa de distinção entre maiúsculas e minúsculas para os Nomes de Arquivos Longos (LFNs), ele recebe uma entrada de diretório separada para os LFNs (ou vários se tiverem mais de 13 caracteres).

In order to meet the goals of locality-of-access and transparency, the long directory entry is defined as a short directory entry with a special attribute.

Editar # 2:

Eu fiz alguns testes em uma VM com o Windows XP e uma unidade FAT32 (com a lixeira no máximo).

Em um diretório data eu criei um subdiretório test após o qual eu executei este arquivo em lote:

@echo off
if "%1"=="####" goto %1
  for %%a in (0 1 2 3 4 5 6 7 8 9 A B C D E F) do call %0 #%1 %2 %3 %4 %%a
  goto EOF
:####
  echo %2%3%4%5
  echo test > test\%2%3%4%5
:EOF

Resultando em arquivos 65534 (somente com nomes abreviados). Como esperado, não foi possível adicionar os dois últimos arquivos ( FFFE e FFFF ) por causa das duas entradas de diretório ( . e .. ). Então, . e .. levam apenas 2 entradas, é bom saber para mais tarde)

Em seguida, selecionei mais de 45.000 arquivos e os deletei no Explorer. (Demorou um pouco para coletar as informações antes de excluir:)

Como os nomes de arquivos na lixeira são De1 , De2 etc., esses são nomes de arquivos longos (devido ao caso misto). Explorer deu um erro após a exclusão de 32765 arquivos.

O dir /a/x me deu 32767 arquivos e 2 diretórios.
32765 arquivos do usuário (com LFN ), um INFO2 e desktop.ini (ambos sem LFN).

(32765 * 2) = 65530 + 2 (sem LFN) + 2 entradas de diretório = 65534

Mmmm, ainda 2 curtos;)

Com o 65534, ele poderá adicionar mais 1 (com LFN). Então eu acho que o Windows pode precisar de uma entrada gratuita extra para algum arquivo temporário.

Mas, como você pode ver, o limite é 65530 entradas de diretório das quais cada arquivo ocupa 2.
(Então, 32765 arquivos porque os nomes de arquivos resultantes são mistos e ainda se a extensão for maior que 3).

Quando eu testei isto os nomes dos arquivos eram todos De1 , De2 etc ... (os originais onde todos os arquivos sem extensão) Seus nomes de arquivos possuem extensões. Se eles tiverem extensões mais longas (> 3), isso pode exigir mais entradas, pois o Windows preserva a extensão na lixeira.

Mas é realmente estranho a Microsoft não ter optado apenas por nomes curtos na lixeira, porque os nomes de arquivos (originais) devem ser armazenados em INFO2 .

Editar # 3:

Acabei de confirmar que o mecanismo de exclusão do Windows precisa de uma entrada de diretório extra.

Eu fiz xcopy e:\recycled\*.* e:\test\ /e/s/h com uma lixeira completa, copiando todos os arquivos (32767 arquivos) da lixeira para um diretório de teste.

Eu ainda posso criar 1 arquivo De_test1.txt (LFN) em e:\test . A criação de De_test2.txt gerou um erro.

Então, "Windows delete" deve ter o suficiente para criar mais 1 arquivo (LFN), mas por causa de algo interno, não pode.

Portanto, para pastas normais , o limite é 65536 -2 para as entradas . e .. = 65534.
e para a lixeira é 65536 -2 para . e .. e -2 para desktop.ini e INFO2
e -2 para um temp.file (?) = 65530 entradas
e com 65530 entradas, é um máximo de 32765 arquivos (e menos se as extensões forem > 3).

    
por 28.11.2013 / 00:56