5

Пару недель назад я тщательно удалял старую резервную копию моего диска с данными. Я сделал проверку дубликатов файлов между старой резервной копией и оперативной копией и удалил старые копии в корзину. Все шло отлично, и, как и ожидалось, до тех пор, пока я вдруг ничего не мог удалить. Всякий раз, когда я пытался удалить файл - любой файл - из старой резервной копии, он заканчивался неудачей.

Я осмотрел корзину, и мне пришло в голову, что это может быть потому, что в ней просто слишком много файлов . Я говорю не о размере, а о количестве файлов. Вот несколько фактов о ситуации:

  • Это система Windows XP
  • Том со старой резервной копией FAT32
  • Том со старой резервной копией имел 302 МБ свободного места
  • Проблема возникла, когда в корзине было 31 594 файла.
  • Восстановленные файлы использовали 236MB
  • Файл INFO2 (который отслеживает исходные имена переработанных файлов) занимает более 24 МБ.
  • Попытка удалить даже еще один файл не будет работать независимо от его размера
  • Корзина настроена так, что не имеет ограничений на все диски.

Я попытался найти это, но ближе всего я могу найти информацию об ограничениях на размер корзины, а не о количестве файлов.

Кто-нибудь слышал об этом? Кто-нибудь может подтвердить, что существует ограничение на количество файлов, которые могут быть сохранены?

Снимок экрана "полной" корзины

1 ответ1

4

Каталог FAT32 может иметь 65 536 записей каталога.

Каждый файл и подкаталог занимает от двух до тринадцати записей, в зависимости от длины его имени.

Таким образом, в самой оптимистичной ситуации ваша корзина может содержать 65 536/2 = 32768 файлов + каталогов, если все они имеют имена файлов в диапазоне 8,3. (Короткие имена)

Ваши 31594 файлов + 53 каталога, кажется, достигли предела.
Вероятно, есть несколько файлов, которые занимают более 2 записей из-за более длинных имен файлов.


Редактировать:

Спецификация FAT32 доступна здесь:
http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx

Он дает подробную информацию обо всем, включая структуру каталогов и способ хранения длинных имен файлов (LFN) в каталогах. По сути, есть одна запись каталога, которая всегда содержит краткую (8.3) версию имени файла. А поскольку Windows требуется чувствительность к регистру для длинных имен файлов (LFN), для LFN требуется отдельная запись каталога (или несколько, если они длиннее 13 символов).

Для достижения целей локальности доступа и прозрачности длинная запись каталога определяется как короткая запись каталога со специальным атрибутом.


Редактировать № 2:

Я провел некоторое тестирование на виртуальной машине с Windows XP и дисководом FAT32 (с максимальной корзиной).

В каталоге data я создал test подкаталога, после чего я запускаю этот пакетный файл:

@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

В результате получается 65534 файла (только с короткими именами). Как и ожидалось, он не может добавить два последних файла (FFFE и FFFF) из-за двух записей каталога (. И ..). . и .. только 2 записи, полезно знать позже)

Затем я выбрал 45000+ файлов и удалил их в проводнике.
(потребовалось время, чтобы собрать информацию перед удалением :)

Поскольку имена файлов в корзине - De1 , De2 и т.д., Это длинные имена файлов (из-за смешанного регистра). Проводник выдал ошибку после удаления 32765 файлов.

dir /a/x дал мне 32767 файлов и 2 каталога.
32765 пользовательских файлов (с LFN), INFO2 и desktop.ini (оба без LFN).

(32765 * 2) = 65530 + 2 (без LFN) + 2 записи в каталоге = 65534

Ммм, еще 2 коротких;)

С 65534 он должен быть в состоянии добавить 1 (с LFN) больше. Поэтому я думаю, что Windows может потребоваться дополнительная бесплатная запись для какого-то временного файла.

Но, как вы можете видеть, ограничение составляет 65530 записей каталога, из которых каждый файл занимает 2.
(Таким образом, 32765 файлов, потому что результирующие имена файлов имеют смешанный регистр и даже меньше, если расширение больше 3).

Когда я проверял это, все имена файлов были De1 , De2 т.д. (Оригиналы, где все файлы без расширения). Ваши имена файлов имеют расширения. Если они имеют более длинные расширения (> 3), это может занять больше записей, потому что Windows сохраняет расширение в корзине.

Но действительно странно, что Microsoft не выбрала только короткие имена в корзине, потому что (оригинальные) имена файлов должны храниться в INFO2 .


Редактировать № 3:

Я только что подтвердил, что механизму удаления Windows нужна дополнительная запись в каталоге.

Я сделал xcopy e:\recycled\*.* e:\test\ /e/s/h с полной корзиной, скопировав все файлы (32767 файлов) из корзины в тестовую директорию.

Я все еще мог бы создать 1 файл De_test1.txt (LFN) в e:\test . Создание De_test2.txt ошибку.

Таким образом, "удаления Windows" должно было быть достаточно, чтобы создать еще 1 (LFN) файл, но из-за чего-то внутреннего он не может.

Таким образом, для обычных папок ограничение составляет 65536 -2 для . и .. = 65534 записей.
и для корзины это 65536 -2 для . и .. и -2 для desktop.ini и INFO2
и -2 для временного файла (?) = 65530 записей
и с 65530 записями это максимум 32765 файлов (и меньше, если расширения> 3).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .