我对 NFS 导出文件有点困惑。
具体来说,我找不到导出路径名包含“-”的目录的方法。
手册(exports(5))指出:
Also, each line may have one or more specifications for default options
after the path name, in the form of a dash ("-") followed by an option
list. The option list is used for all subsequent exports on that line
only.
然后它指出:
If an export name contains spaces it should be quoted using double quotes.
You can also specify spaces or other unusual character in the export name
using a backslash followed by the character code as three octal digits.
不幸的是,事实并非如此。具体来说,如果路径名包含“-”,无论是逐字,还是带有 \055 或用双引号括起来,它仍然引用不带“-”的名称
有什么想法吗?我有大量目录,所有目录的形式如下
- /vol/buildsystem-s3c2440
- /vol/buildsystem-tao3530
我希望它们都可用作 nfs 导出。除了在脚本中用“_”替换所有“-”外,是否可以使用“-”?
答案1
根据这段文字,我假设您使用的是 Linux?
如果导出名称包含空格,则应使用双引号将其括起来。您还可以使用反斜杠后跟三个八进制数字的字符代码来指定导出名称中的空格或其他不常见字符。
Linux 系统上有两种不同的 NFS 服务器实现:
- 用户 NFS
- 内核 NFS
请尝试运行ps -ef | grep nfsd
以查看您拥有哪一个。
我认为用户 NFS 将显示为nfsd
或unfsd
,而内核 NFS 将显示为[nfsd]
。
(请注意,一个有方括号,而另一个没有。)
对于内核 NFS,你应该使用双引号或八进制转义符,例如
"/path/to/mount-point" <options>
或者
/path/to/mount\055point <options>
(参考: nfs-utils-1.1.2,xgettok
在 中support/nfs/xio.c
)
对于用户 NFS,导出名称中不允许有空格,但减号 ( -
) 不需要转义,例如
/path/to/mount-point <options>
(参考:nfs-user-server-2.2beta47,filt_getc
在auth_init.c
)
如果您无法弄清楚原因,我建议从用户 NFS 切换到内核 NFS,以便您可以使用引号或八进制转义。
在 Debian 和 Ubuntu 上:
apt-get install kernel-nfs-server
在 Red Hat 和 Fedora 上:
yum install nfs-utils
答案2
这有点像 hack,但你可以创建每个目录的绑定挂载并导出绑定挂载目标。例如:
mount -o bind /vol/buildsystem-s3c2440 /vol/buildsystems3c2440
mount -o bind /vol/buildsystem-tao3530 /vol/buildsystemtao3530
我不确定大量的挂载是否会减慢文件访问的速度。
答案3
使用反斜杠转义有效吗?
- /vol/buildsystem\-s3c2440
- /vol/buildsystem\-tao3530
答案4
好的,也许还有另一种解决方法。这有点麻烦,但为什么不创建一个包含指向所有先前目录的符号链接的目录(可以使用脚本或 while 循环来实现这一点)。如果符号链接的名称不包含任何破折号,您应该能够导出它们。这样,如您所愿,您就不需要修改真实目录的名称了。
我不确定它是否会起作用,但可能值得尝试一下,不是吗?