Короткий live playlist не гарантирует удаление старых файлов: список может обновляться, а сегменты продолжат лежать на диске.

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

Что проверить при росте каталога HLS

Сначала определите, растет размер данных, число inode или оба показателя.

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

Почему возникает проблема

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

  • Опция удаления сегментов не включена или несовместима с режимом записи.
  • Retention больше окна playlist и не ограничен временем.
  • При аварийном завершении не выполняется cleanup каталога сессии.
  • Имена потоков переиспользуются и смешивают несколько запусков.
  • Отдельно накапливаются init-сегменты, thumbnails, журналы или временные файлы.

Пошаговая диагностика

Не запускайте массовое удаление, пока не установлено, какие процессы и клиенты читают каталог.

  1. Измерьте размер и число файлов по stream ID и варианту качества.
  2. Сопоставьте время изменения старых сегментов с активными процессами кодирования.
  3. Проверьте параметры playlist size, segment duration и delete threshold.
  4. Найдите открытые дескрипторы удаленных или старых файлов.
  5. Проверьте сценарии штатного завершения, падения и перезапуска трансляции.

Разделяйте живой буфер и архив

Live HLS и долговременная запись должны иметь разные каталоги и правила хранения.

  • Каталог сессии получает уникальный идентификатор.
  • Живые сегменты хранятся немного дольше окна playlist.
  • Архив переносится в отдельное хранилище по явному правилу.
  • Cleanup учитывает grace period для медленных клиентов.

Как исправить проблему

Настройте ограниченное окно и отдельный безопасный сборщик оставшихся файлов.

  1. Включите штатное удаление старых сегментов в используемом генераторе.
  2. Задайте retention с учетом playlist, задержки и продолжительности сегмента.
  3. После завершения потока помечайте сессию закрытой и очищайте ее по grace period.
  4. Для аварийных случаев запускайте cleanup только для неактивных session IDs.
  5. Настройте lifecycle в объектном хранилище, если сегменты вынесены с локального диска.

Как проверить результат

  • Размер каталога стабилизируется во время длительной трансляции.
  • Плеер не получает 404 на сегменты из актуального playlist.
  • После завершения сессии данные удаляются или архивируются по политике.
  • Мониторинг показывает свободное место и inode с запасом.

Типичные ошибки

  • Удалять все файлы старше фиксированного времени без учета активной сессии.
  • Считать, что обновление m3u8 автоматически удаляет сегменты.
  • Хранить live-буфер и архив в одном каталоге.
  • Следить только за гигабайтами и пропустить исчерпание inode.

Как предотвратить повторение

  • Добавьте алерты по размеру, inode и возрасту самого старого сегмента.
  • Тестируйте многочасовые потоки и аварийное завершение процесса.
  • Документируйте retention отдельно для live и архива.
  • Периодически проверяйте orphan-каталоги без активного stream ID.

Когда нужна помощь

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