Почему при дефрагментации диска C мое свободное дисковое пространство увеличилось на 10 ГБ?

27

Я использовал Defraggler для дефрагментации свободного места на моем диске C: \ объемом 100 ГБ, который был заполнен на 85 ГБ. После дефрагментации накопитель показал всего 75 ГБ заполненных. Как магически появились 10 ГБ свободного места? Я потерял какие-либо данные?

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

goweon
источник
1
Вероятно, взаимодействие с теневой копией: см., Например, ( piriform.com/docs/defraggler/technical-information/… )
horatio
2
Кроме того, Defraggler имеет возможность очистить корзину перед дефрагментацией.
октябрь

Ответы:

14

Вероятно, произошло то, что операция дефрагментации вынудила Windows выбросить некоторые снимки восстановления системы. Это было бы патологическим случаем фрагментации, из-за которого метаданные занимали 10% вашего дискового пространства в дополнение к тому, что обычно использует Windows. даже тогда я не уверен, что это возможно.

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

Теневые копии могут быть потеряны при дефрагментации тома . Причина, по которой это происходит, заключается в том, что по умолчанию VSS работает с кластерами по 16 КБ, в то время как большинство томов NTFS отформатированы с кластерами по 4 КБ. Поэтому, если операция дефрагментации перемещает данные, которые не кратны кластеру 16 КБ (или «расстояние», на которое оно перемещено, не кратно 16 КБ), то VSS будет отслеживать его как изменение и может очистить все ваши моментальные снимки.

MSDN: Дефрагментация файлов :

По возможности перемещайте данные в блоках, выровненных относительно друг друга, с шагом 16 килобайт (КБ). Это уменьшает накладные расходы на копирование при записи, когда теневые копии включены, поскольку пространство теневого копирования увеличивается и производительность снижается при следующих условиях:

  • Размер блока запроса на перемещение меньше или равен 16 КБ.
  • Дельта перемещения не с шагом 16 КБ.

Встроенная дефрагментация Vista не делает этого :

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

afrazier
источник
Я не знаю о части снимков этого ответа, но я не уверен, что дефрагментация освободила пространство. Может ли дефрагментация опустошить вашу корзину? В файловой системе, которая не объединяет небольшие файлы в один кластер, я не вижу, как дефрагментация приведет к такому увеличению пространства. Я мог представить, что у вас есть 10G свободного места в таких маленьких блоках, что Windows его не считает, но я не слышал об этом раньше.
Slartibartfast
@Slartibartfast: Это проблема, если приложение написано неправильно. Я обновлю свой ответ дополнительными доказательствами, теперь, когда меня нет на телефоне. :-)
afrazier
@afrazier - хотя я думаю, что обновленный ответ ThouArtNotDoc ​​- лучший общий ответ. Я должен согласиться, что теневые копии, вероятно, играют роль в ситуации ОП. Я также нашел это: «Если вы планируете дефрагментировать тома, на которых включены теневые копии, рекомендуется использовать кластер (или единицу выделения) размером 16 КБ или больше. Если вы этого не сделаете, количество изменений вызвало процесс дефрагментации может привести к тому, что теневые копии будут удалены быстрее, чем ожидалось ". - MS: «Разработка стратегии теневого копирования» technet.microsoft.com/en-us/library/cc728305(WS.10).aspx
Ƭᴇcʜιᴇ007
@afrazier: подтверждено. Все предыдущие точки восстановления системы исчезли. В конфиге у меня установлено 12% в качестве максимально допустимого пространства для теневых копий, поэтому 10 ГБ не являются необоснованными. С другой стороны, я только что установил игру на 9 ГБ, которая могла бы просто перезаписать предыдущие точки восстановления.
Goweon
@firebat: пространство, используемое для восстановления системы, предназначено для отслеживания изменений в существующих (моментальных) файлах, а не в новых. Установка новой игры не повлияет на пространство для восстановления системы, но большой патч может.
afrazier
23

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

Пример. Предположим, у вас есть один файл с 1000 фрагментами. Таким образом, ваш файл хранится через набор случайных блоков. Вместо того, чтобы в одном непрерывном блоке. Это означает, что фрагментированному файлу требуется в 1000 раз больше места в хранилище файловой системы, если только для хранения адресов для каждого фрагмента. Сантехника файловой системы хранит небольшие словари / базы данных / карты / таблицы / список с расположением каждого фрагмента файла. Таким образом, для работы с файловой системой хранение списка указателя одного фрагмента не требует много места по сравнению со списком из 1000 указателей фрагментов.

Но, может быть, я ошибаюсь ...

Редактировать: Вспомогательная информация здесь :

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

Перевод: Если у вас сильная фрагментация, общие допущения по случаю установки файловой системы не будут применяться. Таким образом, ФС должна предпринять шаги, чтобы приспособиться к фрагментации и в конечном итоге потребовать дополнительное пространство для хранения, просто для управления фрагментами. Именно мое предположение с самого начала.


Изменить: Учитывая вышеизложенное, все еще кажется, что 10 ГБ теряется только из-за фрагментации файла, это безумие. Держу пари, что во время дефрагментации у вас было несколько типичное повреждение файловой системы, которое было исправлено автоматически. Я думаю, у вас была не только большая фрагментация, но и частично удаленные файлы, занимающие место на диске. Было бы неплохо увидеть журнал скандиска от этой дефрагментации (или прогон скандиска до дефрагментации)

Джеймс Т Снелл
источник
3
PS - это должно быть какая-то хардкорная фрагментация.
Джеймс Т Снелл
Я не знаю, является ли это веской причиной такого увеличения потребления памяти после дефрагментации. Но я заметил это много раз: если у вас есть точка восстановления системы, которая довольно старая (как правило, этого не происходит, если вы регулярно запускаете утилиту очистки диска), а затем вы выполняете дефрагментацию после сбора большого количества данных на диске C, потребление памяти увеличивается из ниоткуда, но если вы удалите эту точку восстановления, она очистит эту занятую память. Ну, технически, это может не иметь никакого смысла, но случалось со мной много раз, так как со временем точки восстановления занимают память.
Кушал
Незнайка, 10G кажется много, но IME, очень полные диски имеют тенденцию распадаться гораздо гораздо быстрее , чем менее фрагментированы диски. Если бы он был на> 85% раньше (так как он считывал 85 ГБ, но на 100 ГБ диска) и, возможно, в то же время был полнее, он мог бы иметь чрезвычайно высокую фрагментацию и сопутствующую ужасную производительность.
Бернд Хауг
3
Если размер блока в этом томе неприлично велик, я лично не могу поверить, что 10 ГБ свободного места освобождаются, просто не отслеживая фрагменты. При размере блока 4096 Кбайт и предположении, что для каждого фрагмента требуется полный блок для отслеживания (что неверно), для этого потребуется 2,5 миллиона ранее отслеженных фрагментов, но не больше, чтобы освободить такое много места.
КарлФ
1
@Doc - указатель не займет целый блок. Если (что вполне вероятно), каждый блок выделения состоит из нескольких секторов, вам нужно меньше указателей, так как для ваших данных будет меньше блоков для отслеживания - поэтому максимально возможные накладные расходы для отслеживания всех фрагментов будут намного меньше, чем 3%. Я не знаю точных деталей NTFS, но с (относительно неэффективными) системами регистрации FAT вы все равно не могли получить 10% накладных расходов для таблицы размещения файлов (тех указателей отслеживания фрагментов), в честь которой была названа FAT.
Steve314