Как работает дефрагментация диска? - PullRequest
2 голосов
/ 12 февраля 2010

Я бы хотел написать что-нибудь, что показывает состояние жесткого диска с точки зрения его фрагментации.Может быть, даже попытаться его фрагментировать.

Но я понял, что не до конца понимаю, как это работает.

Может кто-нибудь объяснить мне это и, возможно, предложить некоторые предложениягде я мог бы начать?

Я в основном использую C # - это был бы подходящий язык, чтобы попробовать собрать что-нибудь вместе.

Заранее спасибо

Ответы [ 3 ]

4 голосов
/ 12 февраля 2010

Пожалуйста, начните со статьи в Википедии Фрагментация диска

Затем, после этого, все зависит от того, на каком низком уровне вы хотите перейти.

Сначала для официального руководства см. Дефрагментация файлов в MSDN.

Из статьи ....

  1. Используйте управляющий код FSCTL_GET_VOLUME_BITMAP, чтобы найти место на томе, которое достаточно велико, чтобы принять весь файл. Примечание. При необходимости переместите другие файлы, чтобы сделать место достаточно большим. В идеале после первого экстента файла должно быть достаточно нераспределенных кластеров, чтобы можно было переместить последующие экстенты в пространство после первого экстента.
  2. Используйте управляющий код FSCTL_GET_RETRIEVAL_POINTERS, чтобы получить карту текущего макета файла на диске.
  3. Обойти структуру RETRIEVAL_POINTERS_BUFFER, возвращаемую FSCTL_GET_RETRIEVAL_POINTERS.
  4. Используйте управляющий код FSCTL_MOVE_FILE для перемещения каждого кластера при прохождении структуры. Примечание. Возможно, вам потребуется обновить либо растровое изображение, либо структуру поиска, либо и то и другое в разное время, когда другие процессы записывают данные на диск.

Оболочка C # выше приведена в блоге .

Наконец, в зависимости от вашей ситуации, вы можете использовать метод WMI Defrag в классе Win32_Volume.

Надеюсь, это поможет.

0 голосов
/ 12 февраля 2010

Когда файлы сохраняются, используемые ими байты помещаются в выделенные блоки, если файл увеличивается и следующий последовательный блок недоступен, ОС начинает запись в следующий доступный блок, разбивая файл на 2 фрагмента.

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

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

0 голосов
/ 12 февраля 2010

Чтобы показать состояние фрагментации файловой системы, вам необходимо выяснить, какие блоки диска принадлежат каким файлам. Все файлы, которые состоят не только из последовательных блоков, фрагментированы; они содержат отверстия и / или блоки разбросаны по диску.

Для дефрагментации файловой системы вам придется перемещаться по блокам так, чтобы все файлы были последовательными, и перезаписывать метаданные, чтобы файловая система в конечном итоге находилась в согласованном состоянии.

...