Skip to content
Coming soon

NFS Media Storage

NFS is a common way to hand Sovereign a media library that lives on a NAS rather than on the server itself. The mount options you choose decide whether a slow or unreachable share degrades gracefully or leaves playback and scans stuck until it comes back. Here’s a starting set, and what each option buys you.


Every deployment method below mounts the share with the same option string. Substitute your own server address, and mount the library read-only, since Sovereign never writes to your media.

Terminal window
addr=<nfs-server-ip>,nfsvers=4.1,ro,soft,timeo=100,retrans=2,rsize=1048576,wsize=1048576,nconnect=4,actimeo=60

Option Value Why
addr <nfs-server-ip> The NFS server. Prefer an IP over a hostname so a DNS outage can’t stall the mount.
nfsvers 4.1 NFSv4.1 brings sessions, exactly-once semantics, and integrated locking. Use 4.2 if both your server and client support it; drop to 3 only for an appliance that offers nothing newer.
ro (flag) Read-only. Sovereign only reads your library, and a read-only mount means no scan, probe, or transcode can ever modify a source file.
soft (flag) A request that can’t be served eventually fails with an I/O error instead of retrying forever. See Why soft Matters.
timeo 100 Request timeout in tenths of a second, so 10 seconds here, against a default of 60.
retrans 2 Retries before a request gives up. Over TCP each retry waits 10 seconds longer than the last, so with timeo=100 a request against a dead server errors out after about a minute instead of never.
rsize / wsize 1048576 1 MiB transfer size. Media reads are large and sequential, and bigger transfers mean fewer round trips. The client negotiates downwards automatically if the server caps it lower.
nconnect 4 Opens four TCP connections to the server instead of one, so a large transcode read can’t monopolise the single connection a library scan also needs. Requires a Linux 5.3 or newer kernel on the host.
actimeo 60 How long file and directory attributes stay cached. Higher values cut metadata chatter during a scan; the cost is that newly added files can take up to that long to become visible.

A few options from older guides, and what they actually do:

  • nolock - an NFSv3 option that disables the separate lock manager. Under NFSv4 locking is part of the protocol, so the option is a harmless no-op. Keep it only if you’re pinned to nfsvers=3.
  • intr - has done nothing since Linux 2.6.25. Interruptible mounts are the default behaviour now.
  • noatime - pointless alongside ro, since a read-only mount can’t write access times anyway. It matters only if you deliberately mount a share read-write.
  • _netdev and bg - for /etc/fstab entries, so the system doesn’t try to mount the share before the network is up and doesn’t block boot if the NAS is down.

A hard mount, which is the kernel default, retries a failed request indefinitely. When the NAS goes away, a process reading from the share doesn’t get an error; it blocks in uninterruptible sleep until the share comes back. Every media probe, library scan and transcode reading from that share stops with it, so what you see looks like a hung server, not a storage outage.

This has happened in production: a wedged media mount left playback starts waiting on files that never answered. Sovereign now gives up on a start when it can’t read the file within 20 seconds. The player reports that the storage holding the file didn’t respond, and the server log names the file. That stops a viewer waiting indefinitely, but on a hard mount the stuck reads are still there underneath, and so is every scan that touches the share.

With soft, timeo, and retrans set as above, an unreachable share surfaces as I/O errors in the logs within about a minute, playback for that title fails with an error, and the rest of the server keeps serving.


The recommendations on this page apply to your media library only. The Sovereign data directory (/sovereign-data) holds the SQLite database.


The same mount options go in a different place on each platform.

Docker’s --mount flag splits on commas, which collides with a comma-separated NFS option string. Create the volume first, then reference it by name:

Terminal window
docker volume create --driver local \
--opt type=nfs \
--opt device=:/MEDIA/movies \
--opt "o=addr=192.168.1.10,nfsvers=4.1,ro,soft,timeo=100,retrans=2,rsize=1048576,wsize=1048576,nconnect=4,actimeo=60" \
sovereign_media

The full docker run invocation is on the Docker page.


Confirm the options the kernel applied. They aren’t always the ones you asked for, because the server negotiates transfer sizes and may refuse a version:

Terminal window
nfsstat -m

Then measure sequential read throughput from inside the container, which is the access pattern that matters for playback:

Terminal window
docker exec sovereign dd if=/media/movies/<some-large-file> of=/dev/null bs=1M count=2000

A share that can’t sustain more than the bitrate of your largest file will stutter on direct play no matter how Sovereign is configured. If that number disappoints, the network is usually the constraint before the NFS options are. Check for a duplex mismatch, a saturated uplink, or a Wi-Fi hop in the path before tuning rsize.


Symptom Likely Cause
The server appears to hang until the share comes back A hard mount against an unreachable share. Add soft, timeo, and retrans.
Playback fails but the files are clearly present Permission denied on the export. Check root_squash or all_squash on the server, and the NFSv4 idmapping domain on both ends.
Newly added titles take a while to appear The attribute cache. Lower actimeo, or wait for the next library sync.
Throughput is far below the link speed rsize negotiated down, a single connection saturating one core, or the network path. Confirm with nfsstat -m, then try nconnect.
The mount fails outright at boot The share was mounted before the network came up. Add _netdev and bg in /etc/fstab.
Titles that used to direct play now transcode Reads are too slow. On a TV, Sovereign reads part of a file before streaming it unchanged, and transcodes when that read runs out of time. Look at the mount first.
Playback fails saying the storage didn’t respond The share stopped answering. Sovereign gives up on a start after 20 seconds; check the NAS and the network path to it.

© 2026 Sovereign Media LLCdocs/v1.0.5@98b57ac305fc

Titles, artwork, people and descriptions shown in screenshots are fictional and were created for illustration. Sovereign doesn't include or supply any media: it plays the library you bring.