Cannot create collections because of read-only filesystem #7175

Closed
opened 2026-02-07 04:40:01 +03:00 by OVERLORD · 5 comments
Owner

Originally created by @dwolstenholme13 on GitHub (Jul 21, 2025).

Description of the bug

I'm trying to create and use movie collections, but it doesn't work, apparently because I have my library mounted as a read-only filesystem.

For background, I'm using the latest linuxserver.io docker-compose version of Jellyfin on a TrueNAS server, which has both HDD and SSD pools. The main media library is on the HDD pool, and is mounted read-only in the container at /data and owned by a different username. Movies are in /data/movies and shows are in /data/tvshows. The Jellyfin config directory is on the SSD pool, and is owned by the "jellyfin" user/group and mounted in /config in the container. JF of course has full r/w access to the latter.

Most things work fine this way: the big media files are on the slow HDDs, and metadata, logs, etc. are all stored on the fast SSD, in /config/log, /config/data/metadata, /config/data/plugins, /config/data/transcodes, etc.

However, collections don't work: adding a collection just results in a never-ending spinner in the web UI, and the log file indicates that it's trying to write to "/data/Collection [boxset]". This is incorrect behavior: metadata like this should be on the SSD, not on the slow HDDs, in /config/data/metadata or somewhere else in /config, such as /config/data/collections.

Reproduction steps

  1. Set up JF server with linuxserver.io image, with media in a read-only filesystem mounted at /data, and config in a r/w filesystem mounted at /config in container.
  2. Connect to server with web UI, set up as usual with Movies library
  3. After scanning complete, try creating collection in Movies, and see never-ending spinner

What is the current bug behavior?

Attempting to create collection in Movies results in never-ending spinner. Log shows attempt to write to "/data/Collectionname [boxset]" failed.

What is the expected correct behavior?

Any data about collections is written to someplace in /config, such as /config/data/collections.

Jellyfin Server version

10.10.0+

Specify commit id

No response

Specify unstable release number

No response

Specify version number

10.10.7

Specify the build version

10.10.7

Environment

- OS: TrueNAS Scale 24.10.2.2
- Linux Kernel:
- Virtualization: Docker (lsio)
- Clients:
- Browser: Firefox
- FFmpeg Version:
- Playback Method:
- Hardware Acceleration:
- GPU Model:
- Plugins:
- Reverse Proxy:
- Base URL:
- Networking:
- Jellyfin Data Storage: NVMe SSD
- Media Storage: HDD
- External Integrations:

Jellyfin logs

[2025-07-21 16:42:54.432 +09:00] [ERR] [3] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request. URL "POST" "/Collections".
System.UnauthorizedAccessException: Access to the path '/data/Star Wars [boxset]' is denied.
 ---> System.IO.IOException: Permission denied
   --- End of inner exception stack trace ---

FFmpeg logs


Client / Browser logs

No response

Relevant screenshots or videos

No response

Additional information

No response

Originally created by @dwolstenholme13 on GitHub (Jul 21, 2025). ### Description of the bug I'm trying to create and use movie collections, but it doesn't work, apparently because I have my library mounted as a read-only filesystem. For background, I'm using the latest linuxserver.io docker-compose version of Jellyfin on a TrueNAS server, which has both HDD and SSD pools. The main media library is on the HDD pool, and is mounted read-only in the container at /data and owned by a different username. Movies are in /data/movies and shows are in /data/tvshows. The Jellyfin config directory is on the SSD pool, and is owned by the "jellyfin" user/group and mounted in /config in the container. JF of course has full r/w access to the latter. Most things work fine this way: the big media files are on the slow HDDs, and metadata, logs, etc. are all stored on the fast SSD, in /config/log, /config/data/metadata, /config/data/plugins, /config/data/transcodes, etc. However, collections don't work: adding a collection just results in a never-ending spinner in the web UI, and the log file indicates that it's trying to write to "/data/Collection [boxset]". This is incorrect behavior: metadata like this should be on the SSD, not on the slow HDDs, in /config/data/metadata or somewhere else in /config, such as /config/data/collections. ### Reproduction steps 1. Set up JF server with linuxserver.io image, with media in a read-only filesystem mounted at /data, and config in a r/w filesystem mounted at /config in container. 2. Connect to server with web UI, set up as usual with Movies library 3. After scanning complete, try creating collection in Movies, and see never-ending spinner ### What is the current _bug_ behavior? Attempting to create collection in Movies results in never-ending spinner. Log shows attempt to write to "/data/Collectionname [boxset]" failed. ### What is the expected _correct_ behavior? Any data about collections is written to someplace in /config, such as /config/data/collections. ### Jellyfin Server version 10.10.0+ ### Specify commit id _No response_ ### Specify unstable release number _No response_ ### Specify version number 10.10.7 ### Specify the build version 10.10.7 ### Environment ```markdown - OS: TrueNAS Scale 24.10.2.2 - Linux Kernel: - Virtualization: Docker (lsio) - Clients: - Browser: Firefox - FFmpeg Version: - Playback Method: - Hardware Acceleration: - GPU Model: - Plugins: - Reverse Proxy: - Base URL: - Networking: - Jellyfin Data Storage: NVMe SSD - Media Storage: HDD - External Integrations: ``` ### Jellyfin logs ```shell [2025-07-21 16:42:54.432 +09:00] [ERR] [3] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request. URL "POST" "/Collections". System.UnauthorizedAccessException: Access to the path '/data/Star Wars [boxset]' is denied. ---> System.IO.IOException: Permission denied --- End of inner exception stack trace --- ``` ### FFmpeg logs ```shell ``` ### Client / Browser logs _No response_ ### Relevant screenshots or videos _No response_ ### Additional information _No response_
OVERLORD added the bugstale labels 2026-02-07 04:40:01 +03:00
Author
Owner

@altotin commented on GitHub (Aug 6, 2025):

What does your compose file look like, any environment variables being set? I also use the linuxserver.io image with a read-only media mount. Collections get created in /config/data/data/collections successfully.

Does it make any difference if you mount to a subdirectory of /data and use the ro flag? /data/media:ro

@altotin commented on GitHub (Aug 6, 2025): What does your compose file look like, any environment variables being set? I also use the linuxserver.io image with a read-only media mount. Collections get created in `/config/data/data/collections` successfully. Does it make any difference if you mount to a subdirectory of /data and use the ro flag? `/data/media:ro`
Author
Owner

@dwolstenholme13 commented on GitHub (Sep 5, 2025):

My compose file looks like the following. The only environment variables are the ones in the compose file here. I can see data/data in the config dir (at /mnt/nvme_pool/apps/jellyfin/ outside the container), but in there I only see ScheduledTasks, keyframes, playlists, and subtitles for directories.

services:
  jellyfin:
    container_name: jellyfin
    image: lscr.io/linuxserver/jellyfin:latest
    devices:
      - /dev/dri:/dev/dri
      - /dev/kfd:/dev/kfd
    environment:
      - PUID=3000
      - PGID=3000
      - TZ=Asia/Tokyo
      - DOCKER_MODS=linuxserver/mods:jellyfin-amd
    ports:
      - 8096:8096
      # - 8920:8920  # https
      - 7359:7359/udp
      - 1900:1900/udp
    restart: unless-stopped
    volumes:
      - /mnt/nvme_pool/apps/jellyfin:/config
      - /mnt/raid_pool/media/videos/movies:/data/movies:ro
      - /mnt/raid_pool/media/videos/tvshows:/data/tvshows:ro
    deploy:
      resources:
        limits:
          cpus: "6"
          memory: 8192M
networks: {}
x-dockge:
  urls:
    - https://docs.linuxserver.io/images/docker-jellyfin/
@dwolstenholme13 commented on GitHub (Sep 5, 2025): My compose file looks like the following. The only environment variables are the ones in the compose file here. I can see data/data in the config dir (at /mnt/nvme_pool/apps/jellyfin/ outside the container), but in there I only see ScheduledTasks, keyframes, playlists, and subtitles for directories. ``` services: jellyfin: container_name: jellyfin image: lscr.io/linuxserver/jellyfin:latest devices: - /dev/dri:/dev/dri - /dev/kfd:/dev/kfd environment: - PUID=3000 - PGID=3000 - TZ=Asia/Tokyo - DOCKER_MODS=linuxserver/mods:jellyfin-amd ports: - 8096:8096 # - 8920:8920 # https - 7359:7359/udp - 1900:1900/udp restart: unless-stopped volumes: - /mnt/nvme_pool/apps/jellyfin:/config - /mnt/raid_pool/media/videos/movies:/data/movies:ro - /mnt/raid_pool/media/videos/tvshows:/data/tvshows:ro deploy: resources: limits: cpus: "6" memory: 8192M networks: {} x-dockge: urls: - https://docs.linuxserver.io/images/docker-jellyfin/ ```
Author
Owner

@JPVenson commented on GitHub (Sep 17, 2025):

Please check if that also happens with the official container jellyfin/jellyfin:latest

@JPVenson commented on GitHub (Sep 17, 2025): Please check if that also happens with the official container `jellyfin/jellyfin:latest`
Author
Owner

@jellyfin-bot commented on GitHub (Jan 16, 2026):

This issue has gone 120 days without an update and will be closed within 21 days if there is no new activity. To prevent this issue from being closed, please confirm the issue has not already been fixed by providing updated examples or logs.

If you have any questions you can use one of several ways to contact us.

@jellyfin-bot commented on GitHub (Jan 16, 2026): This issue has gone 120 days without an update and will be closed within 21 days if there is no new activity. To prevent this issue from being closed, please confirm the issue has not already been fixed by providing updated examples or logs. If you have any questions you can use one of several ways to [contact us](https://jellyfin.org/contact).
Author
Owner

@jellyfin-bot commented on GitHub (Feb 6, 2026):

This issue was closed due to inactivity.

@jellyfin-bot commented on GitHub (Feb 6, 2026): This issue was closed due to inactivity.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/jellyfin#7175