DigitalOcean上有许多Linux使用教程。其中NFS的这篇以分步的形式,讲解了NFS的安装、权限配置(包括防火墙ufw
)、NFS自身的设置等。然而,这篇文章遗漏了一些讲解,而新手可能会因此搞不清楚自己的NFS服务究竟是开了还没有开。(测不准定理)因此这篇文章中我们就来拾下遗,希望能够帮助到大家。
Q:为什么我的NFS一直处于active(exited)的状态?
输入sudo systemctl status nfs-kernel-server
,小伙伴们可能会得到如下的输出:
bash# systemctl status nfs-kernel-server
● nfs-server.service - NFS server and services
Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor pr>
Drop-In: /run/systemd/generator/nfs-server.service.d
└─order-with-mounts.conf
Active: active (exited) since Fri 2022-02-25 20:06:33 CST; 22min ago
Process: 2950 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS>
Process: 2951 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, statu,status=0/SUCCESS>
Main PID: 2951 (code=exited, status=0/SUCCESS)
CPU: 15ms
Feb 25 20:43:48 devs systemd[1]: Starting NFS server and services...
Feb 25 20:43:50 devs systemd[1]: Finished NFS server and services.
其实这个输出反而是提示了NFS 服务端已经启动了(正不正常不好说)。在superuser.com的这篇问答中有明确的答案,翻译一下是这样的:
因为NFS服务器在内核空间运行,它没有运行在用户空间的进程。 rpc.nfsd唯一做的事就是叫内核启动NFS server kthreads,但这些被启动的新进程与rpc.nfsd毫无联系,即使rpc.nfsd退出,也会一直运行下去。 所以systemd中的服务的行为是正常的(这也是它所有能做的)。这和启动iptables和nftables很类似,它们也没有运行在用户空间的守护进程。
然后这位老哥(老姐)也给了正确查看NFS是否在运作的方法:
- 使用
ps axf
或者htop
显示kthreads,然后找有没有名字叫[nfsd]
的 - 在
/proc/fs/nfsd
查看相关信息
Q:为什么我的NFS开了,客户端那边却显示服务器未开启?
排除了网络连接,防火墙等问题后,有可能是因为服务器上的rpc-statd
服务没有启动,启动了就好了。这个方案居然是在一篇日文回答里找到的。
Q:Mac客户端连接返回Operation not permitted
在共享中打开insecure
选项。这个secure
据说只是指只允许从安全端口访问。
Q:Permission denied?
这个其实有很多原因,比如NFS使用的匿名用户(或者映射后的用户)没有足够的权限访问该文件夹,但如果你已经把anonuid
都设置为0了,文件夹权限设置成777
了,还是提示权限不够,那就得看看是不是/etc/exports
里头,IP地址设置错了。为了方便排障,可以先把它设置成*
。我就是以为这个是对的(因为是本地虚拟机)就一直调,谁知道子网第一个地址不是宿主机...
感觉Mac上NFS的挂载要比SMB要快得多(也有可能是在本地几乎没有延时的缘故)根据2016年的一篇性能测试,NFS在小文件读写上性能是优于SMB的,但是他这个测试环境是群晖,对比协议是NFSv4和SMBv2协议(注意Linux的SMB协议实现是基于逆向工程的Samba)如果是使用Windows来开SMB的话有没有可能快点呢?以后有时间可以测试一下。
那么就是这么多了,希望能帮各位节省几分钟的生命。
Feature Photo by Klara Kulikova on Unsplash
Comments 1 条评论
博主 雪
:parrots.slomo:SMBv4!SMBv4!