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

Твердотельный накопитель: блоки нельзя переписать на месте

Флеш-память записывается страницами, а стирается блоками, объединяющими сотни страниц. Изменить одну страницу внутри записанного блока невозможно — только записать новую версию в свободную страницу, а старую пометить недействительной. Пока свободных страниц много, запись идёт напрямую и быстро.

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

Дополнительно ухудшается арифметика самой сборки. Чем плотнее упакованы данные, тем меньше недействительных страниц приходится на блок и тем больше живых данных нужно перенести ради одного стирания. Коэффициент усиления записи растёт, реальная производительность падает, а расход ресурса ячеек увеличивается — накопитель одновременно и медленнее работает, и быстрее изнашивается.

Быстрый кэш сжимается вместе со свободным местом

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

Размер этого буфера динамический и напрямую зависит от количества свободных блоков. На накопителе, заполненном почти полностью, отдавать под однобитный режим нечего, и кэш сжимается до символической величины либо исчезает вовсе. Запись сразу идёт в многоуровневые ячейки на их собственной скорости — это и есть тот случай, когда копирование крупного файла с самого начала ползёт медленно, без привычного быстрого старта.

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

Механический диск: геометрия и фрагментация

У жёсткого диска механизм другой, но результат похожий. Пластина размечена зонами, и внешние дорожки длиннее внутренних, поэтому на одном обороте под головкой проходит больше секторов. Линейная скорость на внешнем крае пластины ощутимо выше, чем у центра. Файловая система заполняет пространство от быстрых зон к медленным, и последние записанные данные физически оказываются там, где диск работает медленнее всего.

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

Файловая система тоже платит за тесноту

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

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

Сколько оставлять

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

Помогает и корректная работа команды освобождения блоков: без неё контроллер продолжает считать удалённые данные живыми и таскает их при сборке мусора. Если накопитель работает через контроллер или программный слой, где такая команда не проходит, эффект заполнения проявится сильнее и раньше даже при формально свободном томе.