![]() |
Фрагментация при записи на пустой том.
Доброго времени суток!
Вчера решил переустановить систему на Win 8.1 x64 и переразбить тома. Решил использовать для этого EaseUS Partition Master. Тома оставил со стандартным размером кластера, а том под игры решил сделать с кластером на 8КБ, т.к. прочитал инфу, что при записи крупных файлов на кластеры бОльшего объёма повысится скорость чтения (верно ли это?? :) ). В итоге при установке игры (папка объёмом 28.9 ГБ, основные файлы - 20шт. по ~1 Гб) вся (!!) записалась фрагментами. Меня это очень удивило. Может кто обьяснит, в чём дело? Спасибо. |
Цитата:
Кстати версии NTFS для разных Windows различаются..., особенно сильные отличия наблюдаются в Widows 8. Следует учитывать, что и команда чекдиск крутися постоянно и порой может вступать в конфликт даже с ФС, созданной Windows 7. --- Чекает её на свой лад. Может и ФС, созданную EaseUS Partition Master, чекдиск рихтует на свой лад... Вот и получается много Run/отрезков/экстентов для одного файла. Также учитывайте, что файл в NTFS это не поток байтов, а поток атрибутов файла... Хотите разобраться --- читайте доку по внутреннему устройству NTFS. Используйте дисковые редакторы: --- DMDE, WinHex, ..., etc и вникайте в тонкости... Я таких исследований не проводил, а только по кусочкам случайно читал... |
Цитата:
|
O, вот оно как. Ясно. Крайне понятный и исчерпывающий ответ. Спасибо.
p.s. вчера решил провести эксперимент. Ту папку на 28 ГБ скопировал на соседний том и форматнул вышеназванный том со стандартным размером кластера с помощью Виндового format'a. Итог - при копировании папки заново - почти никакой фрагментации. А уже последующие файлы начали опять получаться фрагментированными. |
Цитата:
Хотите сказать что операционная система не занимается оптимизацией записи на диск, как об этом декларировано, и как должно быть по логике? Или речь идёт о новоделе от Microsoft? |
piligrimka, независимо от самых оптимальных стратегий выделения внешней памяти и использования кэшей, при параллельном чтении/записи многих файлов (а именно так и происходит) фрагментация неизбежна...
Конечно, если каждому файлу предоставить по харду, то фрагментация уменьшится, но только где столько хардов взять...???... |
|
Цитата:
ОС и занимается этой самой дефрагментацией, правда невсегда эффективно. И понятие "дефрагментация" и есть подтверждение мной сказанного, что файлы неизбежно фрагментируются при записи на поверхность. |
Tau_0
Фрагментация неизбежна в случае если нет свободного цельного куска, в который можно записать требуемый файл. Во всех остальных случаях всё пишется целиком - и это наглядно показывают операционки относящиеся к Linux. misha2 Причём здесь внутренности винта если операционка имеет общение с другим уровнем представления? Самостоятельно дефрагментацией занимается Виста и оследующие операционки. В ХР это не делалось автоматом и дефрагментация на нормально заполненных разделах практически отсуствовала. По крайней мере для небольших файлов. Означает ли это что более новые операционки, зная о том что потом будет дефрагментация, пишут где прийдётся, без всякой оптимизации? |
Цитата:
А винда не может указывать винту куда именно и по какому ЛБА писать данный файл. Винт это решает сам. И без вашего внешнего участия. Это потом вы можете повлиять на расположение фрагментов - лишь когда файл уже полностью записан. Тогда у ж сам дефрагментатор решает нужно дефрагментировать тот файл или нет. |
Цитата:
Цитата:
|
Цитата:
Хотя у Linux и Windows разные файловые системы, но и файлы Linux тоже фрагментируются… |
Цитата:
Цитата:
|
Цитата:
2. Запись, в т.ч. модификация одного файла не может привести к повышению фрагментации другого уже записанного. 3. По ряду положений, в т.ч. высказанных misha2, в дискуссию вступать не хочу, хотя руки и чешутся; поскольку произошёл переход от понятия "логическая фрагментация" (которую показывает в т.ч. Windows) к понятию "физическая фрагментация" (расположению файла на диске: да, дефрагментированный с точки зрения Windows и других программ дефрагментации файл может "физически" располагаться даже на разных блинах). |
Цитата:
Цитата:
|
Цитата:
Очень хорошо такие моменты проявляются при работе с копиями в виде жёстких ссылок (hardlinks): если после работы с такой ссылкой файл стал независимым -- то произошла не модификация файла, а создание нового с удалением старого (пример -- модификация RAR-архива). А при правке, например, текстовых файлов с помощью Akelpad жёсткие ссылки не теряются, т.е. происходит модификация "по месту". |
Цитата:
|
Цитата:
Поэтому если говорить о фрагментации в этой теме, то только о логической. Цитата:
|
Цитата:
|
Цитата:
Поскольку вопрос был "почему файлы стали фрагментированными" -- и ответ что "на диске файлы всегда фрагментированы" не имеет к этому никого отношения. |
Цитата:
Так что "файлы при записи как правило становятся фрагментированы" наиболее уместно. Особенно если учесть что винт дисковое многоголовое устройство, а не магнитофонная лента с линейной записью. |
Цитата:
То же самое что и с торрентами: некоторые не ставят галку "Выделить место под файл целиком", а затем удивляются, что файлы состоят из тысяч фрагментов. Кроме того, "файлы пишутся туда где в данный момент находится БМГ винта"... А если головка находится над местом, где лежит файл? Таки сначала запрос обрабатывается Windows, которая смотрит куда можно разместить данный кусок, если ему не было заранее выделено место. |
Цитата:
А вот в записях можно уже поместить номера ЛБА, пространство в ЛБА (от n- до n+xxxx), правда ж ? Выходит винда работает со своей индексацией, а ЛБА-пространство вторично для неё. А то как быть тогда с копированием папок и файлов на винт/раздел другого обьёма ? Там и МФТ то другая. Впрямую по номерам ЛБА то не выйдет... Цитата:
|
Цитата:
В NTFS у файла есть атрибут атрибут $INDEX_ROOT, но он для внутренних потребностей Windows предназначен. А на другом харде будет по-другому --- сильно фрагментированный файл может стать нефрагментированным или наоборот --- от свободного места на другом томе это зависит …. А том/раздел может быть и на том же харде. |
Цитата:
Цитата:
|
Цитата:
А mwz полностью расписал --- когда файл копируется, то Windows его размер знает (сложит все экстенты этого файла и получит размер), поэтому заранее для него точный размер зарезервирует. Постарается одним экстентом под него место выделит, если такая возможность есть... |
Цитата:
По принципу: "Я -- метатель молота. Приказано метать -- и я мечу." (с) В.Высоцкий |
Цитата:
|
Цитата:
Цитата:
Больше того, на нижнем уровне драйвера файловой системы даже сама Windows не знает, какому файлу принадлежит тот или иной блок. |
Цитата:
Но это уже надо знать алгоритмы, заложенные в Windows (да и в Линух, BeOs и т.д.: у каждого разработчика свой подход, как [разумно, в т.ч. без избыточных потерь времени] выделить место так, чтобы при последующем добавлении или удалении файлов снизить вероятность фрагментации новых файлов). |
Цитата:
|
Цитата:
--- Вычитал у М. Русиновича См. Цитата:
|
Цитата:
Цитата:
|
О, раз все гуру собрались, у меня есть вопрос на засыпку :) Допустим, есть файл, и точно известен номер сектора диска, в который он записан (или по крайней мере его фрагмент).
Файл не: открывался изменялся редактировался копировался перезаписывался переносился делился почковался :) В результате каких операций номер сектора может измениться? |
Цитата:
Ибо, например, процесс дефрагментации можно считать переносом файла, а можно и не считать. |
Цитата:
|
Цитата:
|
Цитата:
Впрочем, chkdsk /r и плохой сектор вполне под условия Вадима подходят. Сжатие-расжатие файла могут подойти, а могут и нет - опять-таки формулировка вопроса расплывчата. То ли "данные этого сектора окажутся в другом секторе", то ли "этот сектор уже не будет принадлежать данному файлу". |
Я даже не сомневался, что формулировка не устроит и уверен, что после уточнения она тоже будет негодной :) Подразумевается прямое взаимодействие пользователя с файлом с помощью прикладных программ, например, редактор для этого типа файлов или файловый менеджер. Но при желании запущенную пользователем дефрагментацию тоже сюда можно записать :)
С дефрагом понятно, отсюда и выбор темы для вопроса. Интересуют другие варианты. chkdsk при наличии поврежденного сектора - да. А еще что-нибудь? Цитата:
По поводу сжатия. Если файл сжимался, как я понимаю, декомпрессия выполняется в память, а в ФС резервируется пространство, необходимое для записи распакованного файла (точнее, compression unit'а). Но если файл не изменялся после декомпрессии, он разве записывается в ФС заново, оказываясь в другом секторе? |
Цитата:
Цитата:
Сжатие файла - тоже прямое взаимодействие. :) Но в этом случае данные сектора размазываются по 16 кластерам, так что даже если сектор и продолжит принадлежать данному файлу, прежних данных в нем уже не будет. Давай оставим эту затею, тем более что к теме она имеет весьма отдаленное отношение. ;) |
Цитата:
Цитата:
Цитата:
|
Цитата:
Кстати, у меня сложилось устойчивое внутреннее убеждение, что если данные 16 кластеров не удалось сжать в 15 или меньше, то эти 16 кластеров пишутся несжатыми. Если Tau_0, misha2 или кто-то другой согласятся потратить время на экспериментальную проверку, я буду им искренне признателен. Цитата:
|
По поводу сжатия. Похоже, надо будет учитывать версию ОС.
Взял сейчас в Win8 для пробы отлично сжимающийся файл размером (на диске) 2.220.032 байта, выполнил сжатие, и вместо ожидавшихся 34 фрагментов (2220032 / 4096 /16) получил два. А размер файла вместо ожидавшихся 34 кластеров оказался равным 68. Надо ковырять вглубь. :( |
Цитата:
Цитата:
|
Ничего себе, куда вы тему перекинули. Еле нашёл.
Так всё таки, на чём остановились и где решение того, почему у автора происходит фрагментация? Цитата:
:o Представил что головки находятся в зоне расположения другого логического раздела. :o |
Время: 13:06. |
Время: 13:06.
© OSzone.net 2001-