У меня возникла странная проблема с одним из резервных жестких дисков нашего клиента: жесткий диск отформатирован в FAT32, и вчера вечером наши задания резервного копирования выдавали ошибку в подкаталоге, утверждая, что он не может скопировать файлы, которые нужно было скопировать.
Я, конечно, сначала проверил размер диска, но на нем много места. Указанная ошибка была 0x80070052, если я введу ее в поисковую систему, я получаю такие результаты: http://www.quickonlinetips.com/archives/2007/09/how-to-fix-error-0x80070052-on-usb-flash-drives/
Но в корневом каталоге этого раздела всего 8 файлов / каталогов. Так что я решил попробовать кое-что сам. Создание одного файла (например, с именем test.txt) сработало. Но создание файла с одним из имен файлов, с которым не удалось выполнить задание резервного копирования, не сработало, вместо этого я получил ту же ошибку, что и выше. Я немного протестировал и обнаружил, что могу создать файл с 10 символами в этом подкаталоге, на один символ больше, и это не удается.
Обнаружив это, я создал каталог в этом подкаталоге (названный 'test') и переместил некоторые файлы из подкаталога в новый каталог, после этого я попытался создать файл с 11 символами (который не работал раньше) и это сработало.
Теперь, очевидно из наблюдения, кажется, что существует какое-то жесткое ограничение на то, сколько символов может использоваться для всех имен файлов внутри одного каталога для FAT32, но я не смог найти ничего об этом жестком ограничении или о том, что другие файловые системы (особенно NTFS , который, я думаю, был бы альтернативой в этом случае) имеют аналогичные ограничения.
Если бы кто-нибудь мог предоставить мне информацию о наблюдаемом поведении, это было бы здорово!
редактировать
коллега сказал мне поместить точную папку на другой диск FAT32, так как у него когда-то были проблемы с контроллером USB определенного производителя. Я попробовал два USB-накопителя от разных производителей, оба отформатированные в FAT32, оба показали точно такое же поведение, как описано выше.
Чтобы дать вам представление о количестве задействованных файлов: существует примерно 10200 файлов, каждый из которых имеет имя от 80 до 110 символов, не считая пути к файлу (который, похоже, не имеет никакого значения), поэтому существует около задействован миллион персонажей.
Максимальное количество файлов в каталоге файловой системы FAT составляет 65 536, если все файлы имеют короткие имена (формат 8.3). Короткие имена файлов хранятся в одной 32-байтовой записи.
Это означает, что максимальный размер директории (файла) составляет 65 536 * 32 байта, т.е. 2097 152 байта.
Короткие имена файлов в формате 8.3 состоят из 8 символов плюс необязательный "." за которым следуют максимум 3 символа. Набор символов ограничен. Короткие имена файлов, содержащие буквы нижнего регистра, дополнительно сохраняются в записи с длинным именем файла.
Если имя файла длиннее (длинное имя файла), оно распространяется на несколько 32-байтовых записей. Каждая запись содержит 13 символов имени файла. Если длина имени файла не кратна 13, последняя запись дополняется.
Кроме того, для каждой записи с длинным именем файла есть одна запись с коротким именем файла.
2 32-байтовые записи уже заняты "." и ".." записи в каждом каталоге (кроме корневого).
1 32-байтовая запись используется как конечный маркер?
Таким образом, фактическое максимальное количество файлов в каталоге зависит от длины имен файлов.
Максимальное имя файла + путь к каталогу - 255 чартеров в сумме; так что это имеет значение.