我在一家托管公司拥有一台运行在 OPenVZ 中的 Ubuntu 11.10 VPS。我试图让它使用 NFS4 挂载远程 NFS 服务器,但只能使用版本 3 才能使其工作。我在 Google 上搜索了不少关于这个问题的信息,偶尔我会读到类似“NFS4 客户端无法在 OpenVZ 容器内工作”的内容。我找不到最新的具体答案,所以我会在这里提问:
这是真的吗?如果是真的,那太好了——那我就不用再尝试让它工作了!但如果真的可能,为什么它不起作用?以下是我所做的——
- 客户端安装有 nfs-common,服务器安装有 nfs-kernel-server
- 看到了一些在客户端上安装 nfs-utils 的说明,但 apt-get 找不到该包
- 使用 NFS 版本 3 从客户端到服务器的挂载成功
- 服务器似乎运行良好;可以使用 NFSv4 从我的桌面上运行的 Ubuntu VM 成功挂载
- 但在成功的客户端机器上,nfs 和 nfs4 列在 /proc/filesystems 中,而在有问题的机器上,只有 nfs
我提交了一张票,负责的工程师说相关模块现在已经安装在 VPS 节点上。他回复说现在应该可以正常工作了,但我认为他可能只是重新启用了“标准” NFS 模块(参见上文:cat /proc/filesystems | grep nfs)
$ sudo mount -v -t nfs4 [SERVER_IP]:/ /NFS-ARCHIVE/ mount.nfs4: pinging: prog 100003 vers 4 prot tcp 端口 2049 mount.nfs4: 没有这样的设备
$ sudo mount.nfs [SERVER_IP]:/ /NFS-ARCHIVE/ -w -n -o nfs4 mount.nfs: 不支持的 nfs 挂载选项:nfs4
我有读到我可能需要手动加载模块通过在挂载之前运行 modprobe nfs,但我不认为我能在 VPS 上做到这一点。客户端上的 sudo modprobe -l 没有返回任何内容
任何帮助都非常感谢,特别是如果你能明确地回答第一个问题 - 至少如果我知道这是不可能的,那么我可以继续使用第 3 节来设置一切!
答案1
OpenVZ 的后续版本确实在容器中支持 NFS4。我们使用最新的 CentOS 6.2 以及最新的稳定 OpenVZ 版本 2.6.32-042stab053.5,NFS4 对我们来说运行良好。
答案2
虽然 NFS 4 客户端可以在 OpenVZ VPS 中工作(使用 Proxmox 2.1 测试),但如果启用了 nfs:on 功能,并且在主机(即容器 0)上加载了 nfs 模块,则名称 -> UID 查找总是使用主机上运行的 rpc.idmapd 完成。这意味着您需要在主机 /etc/passwd 中拥有与 VPS 中相同的用户。
此外,如果您的 VPS、主机和服务器之间的 UID/GID 编号不匹配,则默认安装选项 sec=sys 权限将无法正常工作!人们会认为 nfs3 会出现这种情况(因为它会通过网络发送 UID/GID 编号),但 nfs4 会发送用户名/组名。请参阅http://thread.gmane.org/gmane.linux.nfsv4/7103/focus=7105(并回答RHEL - NFS4:挂载/导出为 rw,用户写入权限被拒绝) 更多细节。
结果是你可以在 VPS 中安装 nfs4,并提供 sec=sys
您有一个足够新的 openVZ 内核。
你对主机和 VPS 设置有足够的控制权,
- 为 nfs4 客户端 VPS 启用 nfs:on 选项
- 在主机上加载 nfs 模块
- 在主机上运行 rpc.idmapd 守护程序
- 控制主机上的 /etc/passwd 条目
您可以忍受共享 VPS/主机用户名所带来的限制。
可能可以使用 kerberos/ldap 设置更灵活的东西,或者甚至有办法控制用于挂载的 idmapd 域,但我对这些选项没有经验。
答案3
VPS 本身必须启用 nfs:on 功能。请您的托管公司启用此功能。
你可以在 Wiki 上找到更多信息:http://wiki.openvz.org/NFS