Короткий live playlist не гарантирует удаление старых файлов: список может обновляться, а сегменты продолжат лежать на диске.
Очистку нужно связывать с жизненным циклом потока, числом вариантов качества и допустимой задержкой зрителей, иначе можно удалить еще используемый файл.
Что проверить при росте каталога HLS
Сначала определите, растет размер данных, число inode или оба показателя.
- В playlist видны только последние сегменты, но старые файлы остаются.
- После завершения трансляции каталог потока не очищается.
- Каждый вариант качества создает отдельный бесконечно растущий набор.
- Диск заполнен временными файлами, которых нет в playlist.
Почему возникает проблема
Обычно генератор и веб-сервер знают о текущем playlist, но никто не отвечает за политику хранения файлов.
- Опция удаления сегментов не включена или несовместима с режимом записи.
- Retention больше окна playlist и не ограничен временем.
- При аварийном завершении не выполняется cleanup каталога сессии.
- Имена потоков переиспользуются и смешивают несколько запусков.
- Отдельно накапливаются init-сегменты, thumbnails, журналы или временные файлы.
Пошаговая диагностика
Не запускайте массовое удаление, пока не установлено, какие процессы и клиенты читают каталог.
- Измерьте размер и число файлов по stream ID и варианту качества.
- Сопоставьте время изменения старых сегментов с активными процессами кодирования.
- Проверьте параметры playlist size, segment duration и delete threshold.
- Найдите открытые дескрипторы удаленных или старых файлов.
- Проверьте сценарии штатного завершения, падения и перезапуска трансляции.
Разделяйте живой буфер и архив
Live HLS и долговременная запись должны иметь разные каталоги и правила хранения.
- Каталог сессии получает уникальный идентификатор.
- Живые сегменты хранятся немного дольше окна playlist.
- Архив переносится в отдельное хранилище по явному правилу.
- Cleanup учитывает grace period для медленных клиентов.
Как исправить проблему
Настройте ограниченное окно и отдельный безопасный сборщик оставшихся файлов.
- Включите штатное удаление старых сегментов в используемом генераторе.
- Задайте retention с учетом playlist, задержки и продолжительности сегмента.
- После завершения потока помечайте сессию закрытой и очищайте ее по grace period.
- Для аварийных случаев запускайте cleanup только для неактивных session IDs.
- Настройте lifecycle в объектном хранилище, если сегменты вынесены с локального диска.
Как проверить результат
- Размер каталога стабилизируется во время длительной трансляции.
- Плеер не получает 404 на сегменты из актуального playlist.
- После завершения сессии данные удаляются или архивируются по политике.
- Мониторинг показывает свободное место и inode с запасом.
Типичные ошибки
- Удалять все файлы старше фиксированного времени без учета активной сессии.
- Считать, что обновление m3u8 автоматически удаляет сегменты.
- Хранить live-буфер и архив в одном каталоге.
- Следить только за гигабайтами и пропустить исчерпание inode.
Как предотвратить повторение
- Добавьте алерты по размеру, inode и возрасту самого старого сегмента.
- Тестируйте многочасовые потоки и аварийное завершение процесса.
- Документируйте retention отдельно для live и архива.
- Периодически проверяйте orphan-каталоги без активного stream ID.
Когда нужна помощь
Если HLS-сегменты заполняют диск, я проверю генерацию, каталоги и активные потоки, настрою безопасную очистку и мониторинг без обрывов текущих трансляций.