Skip to main content

Windows: чистка системного диска

Проблема: забился системный диск, далее у меня диск C:. Чистка кэшей браузеров и использование системной утилиты результатов не дало. Пришлось прибегнуть к развернутому анализу.

Установил WizTree, portable - версию. 

Сначала нашел все большие файлы, которые можно удалять безопасно, дальше начались сложности. Работаю с Gemini.

Вопрос: что находится в файле $MFT (трогать его не надо)?

Файл $MFT (Master File Table) — это не обычный файл с документами или программами, а главная служебная база данных файловой системы NTFS, которая хранит информацию абсолютно обо всех файлах и папках на диске.

Сам по себе $MFT тоже физически оформлен как файл, который лежит в начале каждого диска NTFS.

Что именно записано внутри $MFT?

Каждому файлу и папке на диске (включая скрытые и системные) выделяется отдельная запись в этой таблице размером обычно 1 КБ. Внутри этой записи хранится вся метаинформация:

  1. Атрибуты файла: Полное имя файла, путь к нему и родительский каталог.

  2. Временные метки (Timestamps): Точное время создания, последнего изменения, доступа и модификации файла (поэтому этот файл так любят программы для цифровой криминалистики).

  3. Права доступа (Security Descriptors): Информация о том, какому пользователю или группе разрешено открывать или менять этот файл.

  4. Физическое расположение (Указатели/Pointers):

    • Если файл очень маленький (например, текстовый файл на пару строчек), то его содержимое может поместиться прямо внутри самой записи $MFT.

    • Если файл большой, $MFT хранит карту секторов (кластеров) диска, где физически разбросаны кусочки этого файла.

Почему программы вроде WizTree используют $MFT?

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

Утилиты вроде WizTree поступают хитрее: они напрямую считывают весь файл $MFT целиком. Поскольку $MFT — это уже готовая, структурированная таблица, где собраны размеры и имена всех файлов на диске, программа мгновенно «видит» всю структуру за пару секунд и сразу понимает, какие папки занимают больше всего места.

Вопрос: файл $MFT заполнен на 25%, можно ли его сжать (я не сжимал, оставил как есть)?

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

Почему так происходит?

  1. Архитектура NTFS: Когда файловая система Windows создает новые файлы, $MFT автоматически расширяется под их количество. Однако когда вы удаляете файлы, их записи в таблице помечаются как «пустые» и могут использоваться заново, но физически выделенное под $MFT дисковое пространство назад не возвращается и размер файла не уменьшается.

  2. Ограничения ОС: Windows не умеет «усекать» (shrink) занятые зоны $MFT "на лету", так как этот файл критически важен для работы всей файловой системы и закреплен за определенными областями диска.

Что можно сделать?

  • Стороннее ПО: Существуют специализированные утилиты для работы с разметкой дисков (например, Paragon Hard Disk Manager), в которых есть функции оптимизации и дефрагментации/сжатия $MFT. Они умеют переносить служебные записи и усекать пустые хвосты.

  • Радикальный способ: Полное уменьшение физического размера $MFT без сторонних рискованных утилит достигается только одним путем — полным форматированием раздела или переустановкой системы, после чего размер таблицы сбросится до минимального начального значения.

Примечание: Если $MFT заполнен всего на 25%, это абсолютно нормальное рабочее состояние (система держит большой запас на будущее, чтобы избежать сильной фрагментации таблицы при создании новых файлов). Сами по себе эти «пустые» 75% внутри $MFT не блокируют свободное место на диске критическим образом, если у вас не стоит задача высвободить каждый мегабайт под сжатие самого раздела.

Вопрос: в папке с MS SQLServer есть папка PYTHON_SERVICES_20f02472-8f99-49e8-b8c0-5059b8cf545b большого размера, что это такое?

Папка PYTHON_SERVICES_<уникальный_id> связана с компонентом SQL Server Machine Learning Services.

Что это такое?

Этот каталог создается службой расширения SQL Server (Launchpad). Когда в базе данных запускаются скрипты на Python (например, через процедуру sp_execute_external_script), SQL Server изолирует выполнение кода и автоматически создает временные рабочие директории для каждого сеанса или задачи.

Почему папка стала большого размера?

  1. Зависание сеансов или утечка данных: Иногда при выполнении тяжелых скриптов (обработка больших датафреймов через Pandas/NumPy, сохранение моделей машинного обучения или кэширование) временные файлы не удаляются автоматически после завершения скрипта.

  2. Накопление мусора: Со временем в таких папках могут оставаться временные файлы сессий, лог-файлы или кэш пакетного менеджера, если скрипты выполнялись часто.

Что с этим делать?

  1. Безопасная очистка: Сначала убедитесь, что в данный момент не выполняются активные расчеты или хранимые процедуры с использованием Python.

  2. Перезапуск службы: Перезапустите службу SQL Server Launchpad (через оснастку services.msc), чтобы она сбросила текущие активные процессы.

  3. Удаление: Если служба остановлена и файлы не заблокированы системой, содержимое старых неактивных папок с длинными GUID-номерами можно удалить вручную для освобождения места на диске.

Вопрос: для чего нужна служба SQL Server Launchpad (я остановил службу и отключил)

Служба SQL Server Launchpad (её системное имя в Windows — MSSQLLaunchpad) — это специальный менеджер изоляции и запуска внешних скриптов.

Она появилась в SQL Server вместе с компонентом Machine Learning Services и выполняет следующие задачи:

1. Безопасный запуск внешнего кода

Когда вы пишете хранимую процедуру в базе данных с использованием языков Python или R, SQL Server сам по себе не умеет их выполнять. Вместо этого он обращается к службе Launchpad, а та берет на себя всю работу по запуску интерпретатора.

2. Изоляция процессов (Песочница)

Чтобы сторонний код на Python или R не мог «уронить» сам сервер баз данных или получить несанкционированный доступ к файловой системе, Launchpad создает для каждого выполнения изолированные рабочие процессы (отдельные учетные записи-изоляторы и те самые временные папки с длинными ID).

3. Контроль ресурсов

Служба следит за тем, сколько памяти и процессорного времени потребляют скрипты машинного обучения, чтобы они не исчерпали все ресурсы, предназначенные для самого SQL Server.

Нужно ли она вам?

  • Если вы активно используете Machine Learning Services в базах данных (например, запускаете сложные математические модели, анализ данных или нейросети прямо внутри SQL): служба нужна, отключать её нельзя.

  • Если вы не используете Python или R в SQL Server, но эта служба установлена и работает (или даже запускается автоматически при старте Windows), она просто тратит оперативную память. Её можно перевести в «Ручной» (Manual) режим запуска в диспетчере служб (services.msc), чтобы она не запускалась зря и не плодила временные файлы.

Вопрос: в папке PYTHON_SERVICES_20f02472-8f99-49e8-b8c0-5059b8cf545b большую часть места занимают библиотеки, можно как-то отказаться от этой службы?

Да, от этой службы можно полностью отказаться, если вы не используете Python или R внутри баз данных MS SQL.

Поскольку стандартные библиотеки Python (особенно для машинного обучения, такие как NumPy, Pandas, Scikit-learn и т.д.) весят несколько гигабайт, отключение этой службы и удаление компонента поможет существенно разгрузить диск C:.

Как полностью отключить и удалить этот компонент:

1. Остановка и отключение службы
Сначала остановите службу, чтобы она перестала занимать файлы и ресурсы:

  1. Нажмите комбинацию клавиш Win + R, введите services.msc и нажмите Enter.

  2. Найдите в списке службу SQL Server Launchpad (MSSQLLaunchpad) (она может содержать имя вашего экземпляра SQL Server, например, MSSQLLaunchpad$SQLEXPRESS).

  3. Нажмите по ней правой кнопкой мыши -> «Остановить» (Stop).

  4. Затем зайдите в её «Свойства» и измените «Тип запуска» с Автоматически на «Отключено» (Disabled).

2. Удаление компонента через установщик MS SQL
Чтобы папки и тяжелые библиотеки больше не создавались при обновлениях, лучше официально удалить Machine Learning Services через официальный деинсталлятор:

  1. Откройте Панель управления -> Установка и удаление программ (или «Установленные приложения» в Windows 10/11).

  2. Найдите в списке Microsoft SQL Server (версия) и нажмите «Изменить / Удалить» (Uninstall/Change).

  3. В появившемся окне мастера установки выберите пункт «Удалить» (Remove).

  4. Выберите нужный экземпляр SQL Server.

  5. На шаге выбора компонентов найдите и снимите галочку с Machine Learning Services (Database In-Database) (или компонента интеграции Python/R).

  6. Завершите работу мастера.

3. Ручная очистка хвостов
После удаления службы и компонента вы можете вручную удалить оставшуюся папку PYTHON_SERVICES_... (и аналогичные ей, если их несколько), чтобы вернуть свободное место на диске C:. Если система напишет, что файлы заняты, перезагрузите компьютер и повторите удаление.

Я остановил и отключил службу и вручную удалил папку через проводник. Через MS SQL Installer удалить не получилось.