Limitar o número de arquivos na Lixeira?

Limitar o número de arquivos na Lixeira?

Algumas semanas atrás, eu estava excluindo cuidadosamente um backup antigo da minha unidade de dados. Fiz uma verificação de arquivos duplicados entre o backup antigo e a cópia ativa e excluí as cópias antigas da Lixeira. Estava indo muito bem e como esperado até que de repente não consegui mais deletar nada. Sempre que tentei excluir um arquivo—qualquerarquivo - do backup antigo, ele falharia.

Examinei a Lixeira e me ocorreu que talvez fosse porque havia simplesmentemuitos arquivosna lixeira. Eu não estou falando sobretamanho, mas onúmerode arquivos. Aqui estão 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 na lixeira
  • Os arquivos reciclados usaram 236 MB
  • O INFO2arquivo (que rastreia os nomes originais do arquivo reciclado) tem mais de 24 MB
  • Tentar excluir mais um arquivo não funcionariaindependentemente do seu tamanho
  • A Lixeira está configurada para não ter limites em todas as unidades

Tentei pesquisar isso, mas omais próximo que posso encontraré informação sobre limites para otamanhoda Lixeira, nada sobre onúmero de arquivos.

Alguém já ouviu falar disso? Alguém pode confirmar que existe um limite paraquantosarquivos podem ser armazenados?

Captura de tela da lixeira “cheia”

Responder1

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 comprimento do seu nome.

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

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


Editar:

A especificação FAT32 está disponível aqui:
http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx

Ele fornece detalhes sobre tudo, incluindo a estrutura de diretórios e a maneira como os nomes longos de arquivos (LFNs) são armazenados nos diretórios. Basicamente, há uma entrada de diretório que sempre contém a versão abreviada (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), é necessária uma entrada de diretório separada para os LFNs (ou múltiplas, se eles tiverem mais de 13 caracteres).

Para atender aos objetivos de localidade de acesso e transparência, a entrada longa do diretório é definida como uma entrada curta do diretório com um atributo especial.


Edição nº 2:

Fiz alguns testes em uma VM com Windows XP e um drive FAT32 (com a lixeira no máximo).

Em um datadiretório, criei um subdiretório testapós o qual executo 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 65.534 arquivos (apenas com nomes curtos). Como esperado, não foi possível adicionar os dois últimos arquivos ( FFFEe FFFF) por causa das 2 entradas de diretório ( .e ..). Então .e ..só leva 2 entradas, é bom saber para depois)

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

Como os nomes de arquivos na lixeira são De1, De2etc., esses são nomes de arquivos longos (devido ao caso misto). O Explorer apresentou um erro após excluir 32.765 arquivos.

Isso dir /a/xme deu 32.767 arquivos e 2 diretórios.
32765 arquivos de usuário (comLFN), um INFO2e desktop.ini(ambos sem LFN).

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

Mmmm, ainda faltam 2 ;)

Com 65534 deve ser possível adicionar mais 1 (com LFN). Então, acho que o Windows pode precisar de uma entrada extra gratuita para algum arquivo temporário.

Mas como você pode vero limite é 65.530 entradas de diretóriodos quais cada arquivo ocupa 2.
(Então32765 arquivosporque os nomes dos arquivos resultantes são mistose menos aindase a extensão for maior então 3).

Quando testei isso, os nomes dos arquivos eram todos De1, De2etc... (os originais eram todos os arquivos sem extensão). Seus nomes de arquivos têm extensões. Se eles tiverem extensões mais longas (>3), poderão ser necessárias mais entradas porque o Windows preserva a extensão na lixeira.

Mas é realmente estranho que a Microsoft não tenha optado apenas por nomes curtos na lixeira porque os nomes dos arquivos (originais) deveriam ser armazenados em arquivos INFO2.


Edição nº 3:

Acabei de confirmar que o mecanismo de exclusão do Windowsprecisauma entrada de diretório extra.

Fiz isso xcopy e:\recycled\*.* e:\test\ /e/s/hcom uma lixeira cheia, copiando todos os arquivos (32.767 arquivos) da lixeira para um diretório de teste.

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

Portanto, "excluir Windows" deveria ter sido suficiente para criar mais 1 arquivo (LFN), mas por causa de algo interno não pode.

Então, parapastas normaiso limite é 65536 -2 para .e ..= 65534 entradas.
e para oLixeira de reciclagemé 65536 -2 para .e ..e -2 para desktop.inieINFO2
e-2 para um temp.file (?) = 65.530 entradas
e com 65.530 entradas é um máximo de 32.765 arquivos (emenosse as extensões forem >3).

informação relacionada