Какой алгоритм выделения блоков использует NTFS?

в Windows XP 64 я загрузил файл 1,2 ГБ, и он оказался фрагментированным, как показано на рисунке. К сожалению, прежде чем сделать снимок из Piriform Defraggler, я дефрагментировал другие файлы, поэтому вы не можете увидеть точное состояние на момент записи файла. Однако диск все время был примерно таким же пустым, как и сейчас (25% использовалось) и почти не фрагментировался.

screenshot 1

какой алгоритм выделения блоков использует NTFS? Это выглядит как случайный или может быть, положить его туда, где на самом деле стоит головка диска.

обновление:

вот что произошло сегодня после записи 67 MiB нового файла. Он был разбит на 731 фрагмент, средний размер всего 95 КБ. Файл был использован, чтобы заполнить некоторые пробелы, но не все из них, он не использует огромное непрерывное свободное пространство либо. Странно, не правда ли?

screenshot 2

обновление 2:

в отличие от PC Guru, Я действительно не думайте, что опера виновата. Я думаю, что это (в отличие от Google Chrome) не говорит Windows, ожидаемый размер, однако, есть много случаев, когда это невозможно, и это ответственность ОС, чтобы справиться с этим в здравом уме. На следующем рисунке показано, что произошло через пару дней, когда я почти ничего не делал на этом разделе-временный каталог и все мои данные (за исключением управляемых Windows) находятся в другом месте. Сама Windows, кажется, не использовать SetEndOfFile и фрагментирует собственные файлы ужасным образом (600 фрагментов на пару небольших файлов размером около 40 МБ). NTFS, похоже, не использует первый доступный сектор, так как файлы снова находятся посередине, а также ближе к концу довольно пустого диска (использование 23%), поэтому точный алгоритм все еще неизвестен.

screenshot 3

2
задан Gypsy Spellweaver
09.05.2023 21:07 Количество просмотров материала 2389
Распечатать страницу

2 ответа

IIRC, файловая система NTFS пытается выделить файл в непрерывном хранилище. Однако он может сделать это, только если файловая система знает размер файла. Если вы открываете файл и начинаете писать в него, он будет записывать в "лучшее" место, чтобы соответствовать файлу (как правило, к внешней стороне пластины). Но это "лучшее" место может быть недостаточно большим, чтобы соответствовать файлу.

Если приложение сообщает NTFS фактический размер файла (с SetEndOfFile()), NTFS может сделать лучшая работа по поиску смежного пространства для файла (API SetEndOfFile заставляет NTFS выделять хранилище для всего файла).

11
отвечен Larry Osterman 2023-05-11 04:55

ваша проблема должна быть с Opera. Я только что посмотрел на кучу файлов на очень полном и фрагментированном диске. Большие файлы, загруженные с помощью Chrome, были смежными.

Это говорит о том, что Chrome знал размер файла в начале загрузки, поэтому сказал NTFS размер файла ожидать. Если у вас что NTFS будет пытаться разместить файл в один фрагмент, или если фрагмент достаточно большой, в самых крупных фрагментов. Интересно, что он всегда использует эти фрагменты в порядок уменьшения размера, поэтому большие файлы, скопированные проводником на фрагментированный диск, могут прыгать по всему диску.

где программа не знает размер файла, или не удосужился сказать NTFS, но вместо этого просто открывает файл и начинает писать последовательные данные, кажется, что NTFS действует очень похож на FAT32, который просто начинается с первого доступного кластера (или первый доступный после последнего выделенного в этой сессии), то использует все, что доступно оттуда форвард. В качестве примера, примерно в то же время я попросил CCleaner сканировать реестр, в результате чего его резервное копирование до большого txt ".Reg-файл". Этот файл начался около начала диска, а затем был разбросан по 127 различным фрагментам. В отличие от файлов, скопированных с помощью Explorer или загруженных с помощью Chrome, в каждом файле, который я смотрел, кластеры были выделены в порядке возрастания.

для этого исследования я использовал Winhex (бесплатная пробная версия доступна из Winhex.com). При просмотре каталога вступление. щелкните правой кнопкой мыши по имени файла и выберите Position, List Clusters, чтобы увидеть список кластеров, используемых этим файлом.

2
отвечен PC Guru 2023-05-11 07:12

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх