В блоге и форуме я не раз писал, что современные ОС Windows не дефрагментируют SSD. Однако в Windows 8 «из коробки» есть баг, из-за которого время от времени выполняется эта ненужная для твердотельных накопителей операция. Сегодня мы разберем проблему всех подробностях.
После записи об автоматическом обслуживании Windows 8 читатель блога Владимир Наймушин написал мне, что у него при обслуживании осуществляется дефрагментация твердотельного накопителя. Он также прислал ссылку на форум, где упоминалась эта проблема.
Увидев ее следы у себя, я решил воспроизвести баг и разобраться в причинах.
Как работает оптимизация дисков в Windows 8
Чтобы открыть оптимизатор дисков, наберите dfrgui на начальном экране. Как и в Windows 7, он по расписанию выполняет дефрагментацию жестких дисков, но теперь этим дело не ограничивается.
Смена названия утилиты связана с тем, что Windows 8 не просто определяет твердотельные накопители, но и умеет отправлять их томам набор команд TRIM по расписанию, что занимает буквально несколько секунд. Это происходит вдобавок к стандартной отправке команд при удалении файлов.
За автоматическую оптимизацию всех дисков отвечает запланированное задание ScheduledDefrag. Отсутствие видимых триггеров связано с тем, что на свои прогулки оно выходит под зонтом автоматического обслуживания, выполняющегося в периоды бездействия ПК.
Проблема действительно возникает во время обслуживания, но лишь потому, что она кроется непосредственно в задании ScheduledDefrag. Давайте посмотрим, подвержены ли вы ей.
Как проверить, подвергался ли ваш SSD дефрагу
Начиная с версии 2.0, моя утилита CheckBootSpeed включает необходимую информацию в свой отчет. Если вы желаете сделать все своими руками, отфильтруйте журнал приложений по событию 258 от defrag или выполните команду PowerShell:
В результатах команды ориентируйтесь по буквам дисков и типу операции, которых ровно три:
• анализ • повторная оптимизация (re-trim) • дефрагментация
В приведенном ниже фрагменте наряду с оптимизацией была сделана дефрагментация SSD.
TimeGenerated : 14.03.2013 3:32:24
Message : Модуль оптимизации дисков успешно завершил повторная оптимизация на System (C:)
TimeGenerated : 14.03.2013 3:32:24
Message : Модуль оптимизации дисков успешно завершил дефрагментация диска на System (C:)
Обновляя утилиту CheckBootSpeed, я специально заложил в нее извлечение событий дефрага из журнала. А публичное бета-тестирование позволило мне собрать данные о проблеме на различных ПК. В комментариях к записи нет недостатка в отчетах, и вы можете убедиться, что большинство систем с Windows 8 на SSD подвержены этой проблеме.
Не наблюдалась она только у тех, кто установил систему недавно. В этом случае до дефрага дело могло и не дойти, потому что Windows толерантна к фрагментации дисков.
В каких условиях происходит дефрагментация SSD
Баг воспроизводится «из коробки». Конкретнее, должны быть включены служба планировщика заданий, а также задачи в папках TaskScheduler и Defrag. При этом фрагментация диска по мнению Windows должна быть свыше 10%.
Проверить состояние диска, как и прежде, можно командой:
defrag /a C:
С точки зрения файловой системы, данные фрагментируются не только на жестких дисках, но и на твердотельных накопителях.
Другое дело, что их эффективное распределение по ячейкам памяти возлагается на контроллер SSD.
Как воспроизвести баг
Графический интерфейс и утилита defrag.exe работают правильно, если передавать последней документированные параметры. В этом легко убедиться, выполнив оптимизацию в GUI или консоли:
defrag /o /u /v C:
Новый параметр командной строки /o отвечает за выбор оптимизации, соответствующей типу накопителя. Жесткие диски дефрагментируются, а твердотельным накопителям посылается набор команд TRIM. Я не нашел проблем с параметром /o, но для отправки команд TRIM есть другой — /l, который мы задействуем позже.
В этих случаях дефрагментация SSD не выполняется, даже если утилита командной строки рекомендует ее по результатам анализа.
Запланированное задание ScheduledTask передает утилите defrag.exe таинственный параметр $, который и является виновником. Если у вас SSD фрагментирован более чем на 10%, вы можете увидеть баг в действии, запустив задание.
Но на практике проблема возникает, когда задание дефрага стартует в рамках автоматического обслуживания, запущенного автоматически по расписанию или вручную из центра поддержки.
Выделенная ссылка в панели управления просто запускает задание планировщика Manual Maintenance. Оно выполняет те же действия, что и задание Regular Maintenance, работающее по расписанию.
В этом случае ваш SSD внезапно подвергается настоящей дефрагментации в пять проходов, рассчитанной на жесткие диски.
Следы черного дела старательно записывает журнал событий, как вы видели выше. Анализ диска в командной строке по окончании дефрага беспристрастно фиксирует сведенную к нулю фрагментацию.
Анализ defrag.exe до обслуживания:
C:\Windows\system32> defrag /a c: d:
Оптимизация диска (Майкрософт)
(c) Корпорация Майкрософт, 2012.
Вызов анализ на Win8-SSD (C:)...
Операция успешно завершена.
Post Defragmentation Report:
Сведения о томе:
Размер тома = 111,44 ГБ
Свободное место = 42,28 ГБ
Общий объем фрагментированного пространства = 11%
Максимальный размер свободного места = 23,55 ГБ
Примечание. В статистику фрагментации не включаются фрагменты файлов, размер которых превышает 64 МБ.
Рекомендуется выполнить дефрагментацию этого тома.
Анализ defrag.exe после обслуживания
PS C:\Windows\system32> defrag /a c:
Оптимизация диска (Майкрософт)
(c) Корпорация Майкрософт, 2012.
Вызов анализ на Win8-SSD (C:)...
Операция успешно завершена.
Post Defragmentation Report:
Сведения о томе:
Размер тома = 111,44 ГБ
Свободное место = 40,53 ГБ
Общий объем фрагментированного пространства = 0%
Максимальный размер свободного места = 33,16 ГБ
Примечание. В статистику фрагментации не включаются фрагменты файлов, размер которых превышает 64 МБ.
Дефрагментация этого тома не требуется.
Замечу в скобках, что я также заранее включил ведение журнала для заданий в планировщике, чтобы четко задокументировать связь между автоматическим обслуживанием и дефрагом SSD.
Насколько дефрагментация вредна для SSD
В следующей записи я подробно и наглядно объясню, как на самом деле фрагментируются твердотельные накопители и почему им не нужна дефрагментация утилитами для жестких дисков. А сейчас я лишь отмечу, что излишние операции записи во время дефрага так или иначе негативно сказываются на количестве циклов перезаписи ячеек NAND.
Однако вывести количественную оценку вреда затруднительно, поскольку срок службы накопителя зависит от ресурса флэш-памяти, алгоритмов контроллера и выполняемых на ПК задач.
Эти задачи также играют основную роль в скорости фрагментации диска. Поскольку дефраг выполняется лишь при переходе порога 10%, в типичном домашнем компьютере SSD подвергается ему не очень часто.
Исходя из своего опыта, я оценивал частоту дефрага примерно как ежемесячную. Получив ваши отчеты, я проанализировал данные с 14 ПК, и оказалось, что в среднем все именно так и происходит (документ Excel доступен тут).
Ежемесячная дефрагментация не смертельна для SSD, но она совершенно не нужна!
Как избежать дефрагментации SSD
В голову сразу приходит отключение задания ScheduledDefrag или автоматического обслуживания, но это решение неэффективно. В первом случае вы блокируете запланированную отправку команд TRIM и дефраг жестких дисков, если таковые имеются, а во втором — выполнение других задач обслуживания.
Изменение задания ScheduledDefrag прямо в планировщике тоже сопряжено с побочным эффектом. Графический интерфейс оптимизатора при запуске проверяет запланированное задание:
Если сохранить настроенные параметры, утилита не запускается. В противном случае она приводит задание к исходному виду.
При любом раскладе дисков задача решается за несколько минут двумя простыми действиями.
1. Исключите SSD из автоматического обслуживания
Наберите dfrgui на начальном экране, чтобы открыть оптимизатор дисков.
• Нажмите кнопку «Изменить параметры». • Откройте выбор дисков и снимите флажки с разделов твердотельных накопителях.
2. Создайте новое задание для оптимизации SSD
Мой метод может показаться вам странным, но я объясню свой выбор через минуту.
• Щелкните правой кнопкой мыши задание ScheduledDefrag и экспортируйте его с именем TRIM-SSD. • Откройте файл в текстовом редакторе и измените описание и параметры команды. Смотрите выделенные строки в примере.
Все готово! Задание будет запускаться в рамках автоматического обслуживания, отправляя только перечисленным вами дискам команды TRIM (ключ -l).
Если автоматическое обслуживание у вас по какой-то причине отключено (что не рекомендуется), откройте задание и на вкладке «Триггеры» настройте его запуск еженедельно в любое удобное время.
Что мешает сразу создать в планировщике простое задание?
Ничего, если вы постоянно работаете с правами администратора. Однако мой метод также подходит тем, кто пользуется учетной записью с обычными правами. Оригинальное задание работает в контексте учетной записи «Система», равно как и задание, которое вы только что создали с минимальными усилиями!
Вопросы и ответы
Поскольку вопросы в комментариях уже идут по второму кругу, я буду добавлять некоторые ответы прямо в статью.
В событии 258 нет информации о дефрагментации SSD. Означает ли это отсутствие бага?
Это означает, что SSD не дефрагментировался. Например, дефрагментировать диск еще рано, потому что вы недавно установили систему.
Надо ли следовать инструкциям в статье, если следов дефрагментации SSD не обнаружено?
Инструкции не могут навредить. Они исключают дефрагментацию SSD вне зависимости от наличия бага.
Что делать, если в ПК только один диск (SSD)?
Можно просто отключить задание ScheduledDefrag и создать задание TRIM-SSD, следуя инструкциям выше.
Как быть с разделом «Зарезервировано системой»?
С раздела «System Reserved» файлы не удаляются, поэтому и команд для отправки TRIM нет. Как следствие, достаточно исключить раздел из оптимизации в графическом интерфейсе оптимизатора дисков.
Если вы по неведомой причине считаете необходимым оптимизировать этот раздел, определите его путь на основе GUID и пропишите в XML-файле наряду с остальными томами SSD.
Хочу увидеть дефраг SSD своими глазами, но не получается воспроизвести баг. Почему?
Отключите задание ScheduledDefrag на месяц-полтора, потом запустите автоматическое обслуживание и смотрите, что происходит в dfrgui. См. также мой комментарий.
Есть ли этот баг в Windows 7?
Нет.
Продолжение следует…
Знает ли об этом баге Microsoft
Скорее, вопрос нужно ставить так: знает ли об этом соответствующая продуктовая группа. Я видел сообщение с изложением проблемы на западном форуме Answers, но отвечавший там инженер техподдержки отправил участника в форумы TechNet (sic!), тем самым закрыв тему. Отмечу, что у широкой публики нет другого официального пути доставки багов Windows 8 в Microsoft.
Я задокументировал дефект и занес его на Microsoft Connect единственным доступным мне способом, хотя у меня есть обоснованные сомнения в действенности этого метода. Иногда лучше работает привлечение внимания широкой публики к проблеме, и вы можете помочь в этом, поделившись ссылкой на материал в социальных сетях и технических сообществах, в том числе и на его английскую версию.