Emby 容器无法扫描 NFS 视频库?权限不匹配问题的完整解决
categories: 技术 tags: NASEmby 容器无法扫描 NFS 视频库?权限不匹配问题的完整解决
最近在 LXC 容器中部署 Emby 媒体服务器时,遇到了一个棘手的问题:明明已经通过 NFS 挂载了 NAS 上的视频目录,但 Emby 始终无法扫描到任何视频文件。一番排查后发现,核心症结在于容器内用户权限与 NFS 挂载目录的权限不匹配,下面分享完整的解决过程。
前置操作,发现挂载的 NFS 文件夹所有者为 1000:1000,而 LXC 容器内服务都是 root 部署的,没有 1000 的组和用户。
在这一步我创建了一个 GID 为 1000 的 emby 组,然后把 emby 用户加入了这个组,视频文件夹权限设置为 775,但还是扫不出来。
再来看问题现象,进入 Emby 容器后,通过 groups emby 命令查看,发现 emby 用户已加入 emby、video、render 等必要组:
root@Emby:/# groups emby
emby : emby video render
而 ls -al 查看挂载的 videos 目录时,显示权限为
drwxrwsr-x 6 1000 emby 4096
这意味着目录所有者是 UID 为 1000 的用户,所属组为 emby。但显然容器内根本没有 UID 为 1000 的用户,而 Emby 服务是通过 emby 用户运行的,这就导致 emby 用户无法获得 videos 目录的所有者权限,即便属于 emby 组,也因 NFS 权限映射的限制无法正常读取文件。
找到问题根源后,解决思路就很明确了:让容器内的 emby 用户与 NFS 目录的所有者 UID 保持一致,从而直接获得目录的访问权限。具体操作步骤如下:
-
停止 Emby 服务,避免在用户调整过程中出现进程占用问题,执行命令
systemctl stop emby-server。由于之前的 emby 用户 UID 与目标 UID 不匹配,需要先将其删除,执行userdel emby,删除用户时其对应的 emby 组也会被自动移除,这是后续需要重建组的原因。 -
重建 emby 组,为了避免权限混乱,我们可以指定 1000 为 GID,执行
groupadd -g 1000 emby
然后重新创建 emby 用户,关键是指定 UID 为 1000(与 NFS 目录所有者 UID 一致),同时将主组设为刚创建的 emby 组,并保留原有的附加组权限,命令为
useradd -u 1000 -g emby -G video,render emby
否则还需要修复 Emby 数据目录的权限,否则新的 emby 用户可能无法访问原有的配置和数据。通常 Emby 的数据目录在 /var/lib/emby,执行 chown -R emby:emby /var/lib/emby 即可递归修改目录所有者为新的 emby 用户和组。
用户重建后,如果原来的视频目录所有者是 1000:1000(对应 NAS 上第一个普通用户和它的组),那么已经可以正常访问了。
最后重启 Emby 服务,让所有配置生效,执行 systemctl restart emby-server。
重启完成后,我们可以通过 id emby 验证用户配置,此时应显示
root@Emby:/# id emby
uid=1000(emby) gid=1000(emby) groups=1000(emby),44(video),104(render)
确认 UID 和组权限都已正确配置;再执行 ls -ld /videos,会发现目录所有者已从数字 1000 变为 emby,说明权限匹配成功。
此时再次进入 Emby 后台扫描视频库,就能正常识别 NAS 上的所有视频文件了。整个过程的核心在于理解“Linux 权限基于 UID/GID 匹配”的原则,NFS 挂载目录的所有者 UID 在容器内必须有对应的用户,才能让应用获得合法的访问权限,这也是容器化部署中常见的权限配置要点。