Как работает дефрагментация диска?

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

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

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

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

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

3 ответа

Решение

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

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

Сначала для официального руководства, чтобы увидеть Дефрагментирование файлов на 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.

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

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

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

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

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

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

Другие вопросы по тегам