OMV远程挂载目录无法写入问题
我把猫盘作为电影BT下载机,开启Samba服务后挂载到蜗牛星际主机上,这样在蜗牛星际上的emby服务就可以直接扫描猫盘的下载目录,并更新电影元数据。但发现,如果下载了带有BDMV目录的蓝光资源,emby总是把蓝光目录BDMV下每个m2ts文件识别成一个单独视频,最终的视频列表被搞得乱七八糟。进一步发现,下载目录中emby创建的海报poster.jpg都是0字节。通过查看emby日志(在/var/lib/emby/logs下面)可知,emby下载海报图片后写入源目录时失败了,报的异常信息是文件被占用无法写入,但实际根源应该就是没权限。之所以在emby的媒体库中还能看到海报,是因为emby把海报转存到自己内部的临时存储区去了。
趁着最长假期,今天来解决一下问题。
因为从日志中明确看到了,我猜测上面的问题根源实际都是挂载目录的写入权限不够造成的。感到奇怪的是,在猫盘的Samba服务配置参数中我明明已经设置了777级别的写入。看来问题出在蜗牛星际上的OMV挂载上。
在OVM中是通过下面的远程挂载进行的:
OMV挂载SMB
挂载后,能够在/srv下能看到挂载后的目录,进去看一下是这样的:
root@omv:/srv/092e1049-faf6-49f9-99d8-bc14f138ebbf# ls -l
total 3072
-rwxr-xr-x 1 root root 0 Jan 30 23:13 aa
drwxr-xr-x 2 root root 0 Jan 30 22:52 bt
-rwxr-xr-x 1 root root 1854 Oct 2 00:34 cat.sh
-rwxr-xr-x 1 root root 469 Oct 2 00:14 catmon.sh
-rwxr-xr-x 1 root root 1696 Oct 3 23:54 pt.sh
很显然,这里的权限已经变成了755,并且用户是root。emby服务是以emby用户身份运行的,自然无法写入。(但怎么能创建0字节文件?不得其解)。
这个root用户身份和0755的权限组合,我并没有在任何地方设置,这个局面是怎么产生的呢?按照对话框上的Tips,找到了mount.cifs的说明(中文版链接),其中关键点如下:
uid=arg
如果被挂载的文件系统服务器没有提供文件和目录的UID信息,那么就使用这里的设置。
arg 可以是字符串形式的用户名或着是数字形式的uid值。默认值是数字'0'。
更多信息参见下面的“文件和目录的属主及权限”小节。
file_mode=0nnn
如果服务器端不支持 CIFS Unix扩展,那么就使用这里设置的值替代默认的文件权限模式。
这里的 nnn 是八进制的权限模式,且前导零不能省略。
dir_mode=0nnn
如果服务器端不支持 CIFS Unix扩展,那么就使用这里设置的值替代默认的目录权限模式。
这里的 nnn 是八进制的权限模式,且前导零不能省略。
通过这段文字可以知道,uid默认为0,0正好是系统中root用户的id,这解释了为什么前面的共享文件用户都是root。755权限不知道是从哪来的,但是可以通过file_mode和dir_mode来设置。于是,在OMV远程挂载对话框的选项中,增加两个参数dir_mode=0777,file_mode=0666
,如下图:
然后重启系统,再进入共享目录看一下,权限改变了:
root@omv:/srv/092e1049-faf6-49f9-99d8-bc14f138ebbf# ls -l
total 3072
-rw-rw-rw- 1 root root 0 Jan 30 23:13 aa
drwxrwxrwx 2 root root 0 Jan 30 22:52 bt
-rw-rw-rw- 1 root root 1854 Oct 2 00:34 cat.sh
-rw-rw-rw- 1 root root 469 Oct 2 00:14 catmon.sh
-rw-rw-rw- 1 root root 1696 Oct 3 23:54 pt.sh
现在再打开emby,让它重新刷新元数据,果然一切正常,蓝光文件夹被整体识别了,每个独立电影下面的海报图片也不再是0字节,后台日志也不报错了。
实际上,OMV的远程挂载界面,就是帮你做了一个mount,可以用mount命令看到实际生成的指令和参数,如下:
......
//192.168.3.2/public on /sharedfolders/Cat type cifs (rw,relatime,vers=2.0,sec=none,cache=strict,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.3.2,file_mode=0666,dir_mode=0777,soft,nounix,mapposix,rsize=65536,wsize=65536,echo_interval=60,actimeo=1)
......
这个案例告诉我,Samba服务端可以设置目录权限,客户端也可以设置,两者叠加后,才是最终结果。
补充:上面的例子中,因为家里就我一个人用,图省事,直接把共享目录设置为任意用户可写。考虑安全性,最好还是设计一套更完善的权限分配体系,以防误操作。