Stop the active transcode workload, verify where temporary segments are written, then enforce cleanup and move the path away from the system drive.
A media server can store HLS segments, remuxed streams, subtitle-burn output, and incomplete session files under its default cache or application directory even when the source library lives on a large storage pool. The system drive fills when those files are not deleted fast enough, the transcode directory is mapped incorrectly, or abandoned sessions remain after playback ends. Diagnose the actual directory and session before deleting files or relocating the cache.
Locate the Active Transcode Directory and Its Largest Sessions
Start one controlled transcode and watch which directory grows. Record the application setting, container path, host bind mount, filesystem, available space, file count, and largest session subdirectories.
Jellyfin exposes a separate writable location for temporary transcode files, which confirms that the transcode path is distinct from the permanent media library and metadata path. The relevant setting is the temporary transcoding path.
If the application shows one path but the host drive fills elsewhere, inspect Docker’s effective mounts and writable layer. A missing bind mount can make the container write temporary files into the system-backed container filesystem instead of the intended cache volume.
Stop the Producer Before Emergency Cleanup
Identify active playback sessions and stop only the transcodes associated with the rapidly growing files. Save the latest FFmpeg log, source title, client, output bitrate, subtitles, and start time before reclaiming space.
Old transcode files have previously remained after playback ended and caused the disk to fill until the server could not start. A Jellyfin issue documents a movie still occupying the transcoding temporary folder hours after the user stopped watching.
Do not remove files belonging to an active session while FFmpeg is still writing them. Stop the session or server cleanly, confirm the files are no longer open, then remove only confirmed temporary output rather than deleting the full cache or application database.
Enable Segment Deletion for Long Streaming Sessions
Check whether the server deletes downloaded HLS segments during playback. Without segment deletion, a long movie or live stream may require enough disk space to retain the entire generated output.
Jellyfin describes segment deletion as removing old segments after the client downloads them so the server does not need to store the complete transcoded file. The option specifically exists to prevent full-stream storage.
Enable it for a test client and monitor playback, seeking, and resume. Keep it disabled only when a reproducible client problem requires retained segments, and compensate with a larger dedicated transcode volume plus stricter session cleanup.
Move the Transcode Path to a Dedicated Fast Volume
Choose a dedicated SSD, NVMe cache, or sufficiently sized temporary filesystem that is separate from the operating-system root. The destination must sustain concurrent writes and have enough capacity for the worst expected transcode sessions.
Users placing transcodes on small RAM disks have requested a cache limit because the directory can continue growing until the temporary device is exhausted. The failure boundary is an unbounded transcode cache, regardless of whether the backing device is RAM or SSD.
Stop the server, create the new directory with the correct service ownership, map it explicitly into the container, and update the application setting to the container-visible path. Run one transcode and verify that the host system drive no longer grows.
Find Stale Sessions and Cleanup Failures
Compare temporary session directories with active playback session IDs and FFmpeg processes. Files with no matching session, no open process, and old modification times are candidates for supported cleanup.
Do not assume a generic cache-cleaning task removes every transcode artifact. The earlier Jellyfin cleanup report found that the normal cache task did not remove the stale transcode file, so the real check is whether session-specific cleanup completed.
Review the server log around client disconnects, container restarts, crashes, network loss, and forced process termination. Repair the condition that prevents the server from receiving a clean stop event instead of relying on a daily deletion script as the only control.
Measure the Worst-Case Concurrent Transcode Footprint
Run one representative remote transcode and measure temporary bytes per minute. Repeat with subtitle burn-in, HDR tone mapping, and the highest supported output bitrate, then multiply by the intended concurrent sessions and retained duration.
A full system drive can affect the media server beyond playback. A Jellyfin support case noted that transcodes filling the drive could be related to the web interface no longer connecting, showing that system-volume exhaustion affects application availability.
Reserve free space for the operating system, logs, databases, package updates, and Docker metadata. The transcode volume should fail independently without preventing the server from booting or the media application from opening.
Verify Cleanup and Add Capacity Alerts
Test playback start, seek, pause, client disconnect, server restart, and simultaneous sessions. Confirm that active files grow only in the dedicated transcode path and shrink after sessions finish.
The ZimaSpace guide to building a home media server provides the broader validation path for separating source storage from application and temporary workloads.
The repair is complete when stale sessions no longer remain, segment deletion works for supported clients, the system drive retains a safe reserve, and alerts fire before either the dedicated transcode volume or root filesystem reaches its capacity threshold.
Support & Tips
More to Read

Why Does a Docker Volume Restore Recreate File Contents but Drop Extended Attributes?
A volume-restore diagnosis covering xattr inventory, tar and Rsync options, namespaces, destination support, privileges, labels, app metadata, and tests.

Why Does a Running Container Keep Its Old Memory Limit After the Compose File Changes?
A memory-limit diagnosis covering live cgroups, restart versus recreation, Compose fields, hard and soft limits, parent scopes, swap, and runtime heaps.

Why Does Restarting a Reverse Proxy Invalidate Every Session for One Self-Hosted App?
A session-loss diagnosis covering restart scope, cookie ownership, secret rotation, cache-backed sessions, sticky routing, auth gateways, and recovery.

