问题是:我想在我的笔记本电脑和家里的电脑之间创建文件共享,以便我可以从两台计算机访问我的文件。是laptop
服务器(因为我在移动时可能需要文件),pc
是客户端。
这是我尝试的解决方案:两台机器上都有 linux (debian),我决定使用 NFS。一切都工作正常,直到我重新启动两台机器并遇到了第 22 条军规。理想情况下,我希望服务器自动挂载 NFS,所以我在/etc/fstab
.虽然,重新启动服务器后,我注意到我必须重新运行exportfs -a
才能重新加载我的/etc/exports
,如下所示:
/nfs pc(rw,sync,no_subtree_check)
但是,为了做到这一点,pc
必须可以访问,否则我会收到此错误
exportfs: failed to resolve pc
因此,如果pc
必须在打开之前就可以到达,那么它就违背了forlaptop
的意义,除非我预计很少会重新启动,但这不是我的情况。/etc/fstab
pc
laptop
简而言之:pc
希望laptop
能够通过 fstab 自动挂载 NFS,同时laptop
希望pc
能够在导出中分配正确的权限。有没有一种方法可以exportfs -a
在启动时运行laptop
而不需要pc
打开?
答案1
服务器不应该关心客户端是否可达。它只是使共享可用......无论它是否被使用。
您收到的错误“exportfs:无法解析电脑”并不是说它无法“到达”电脑。它说它无法“解析”电脑。问题在于您通过主机名引用特定客户端,但系统无法将主机名解析为 IP 地址。
显然,这是 exportfs 工作方式中的一个已知错误。我没有太深入地研究它,但在我看到的情况下(只需谷歌搜索错误消息),这是 nfs 启动和 dns 服务可用之间的计时问题。还存在 DHCP 定义的客户端和 DNS 更新速度不够快的问题。
无论如何,您的问题是名称解析问题。如果“pc”有静态 IP 地址,您可以使用 /etc/exports 中的地址,或将“pc”添加到 /etc/hosts 文件中。如果任一主机都是 DHCP,那么您可能就不那么幸运了。
在客户端(“pc”),您可能需要考虑使用自动挂载程序(autofs)来挂载远程文件系统,而不是使用 /etc/fstab。自动挂载程序只会在您需要时挂载文件系统,因此如果 NFS 服务器不可用,它不太可能在系统启动时挂起。
有关 exportfs 和名称解析问题的一些参考: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=860264 https://forums.centos.org/viewtopic.php?t=69981 还有更多显示类似的问题。
答案2
我遇到了同样的问题,并尝试使用 nfs-server.service 单元解决它,但没有成功。
所以我最终把一个脚本放入 crontab 中,比如
#crontab -e
@reboot /usr/local/bin/exportNFS
和
#cat /usr/local/bin/exportNFS
sleep 5
/usr/sbin/exportfs -r