Network File System (NFS)

网络文件系统:可以把网络上的某个资源做为本地硬盘来使用的一种系统。

该服务主要依赖于:nfsd、mountd以及rpcbind

  • nfsd: 接收 NFS 客户端发起的请求
  • mountd: 处理由nfsd接收的请潮州
  • rpcbind: 允许客户端发现当前的 NFS 服务端口

服务端配置

编辑/etc/rc.conf并加入以下配置:

rpcbind_enable="YES"
nfs_server_enable="YES"
mountd_flags="-r"
mountd_enable="YES"

如果使用的是zfs,则应该创建数据集,比如: zfs create yzpool/data/hosts/20pro而不是直接创建文件夹。

接着编辑/etc/exports,配置文件服务内容:

/yzpool/hosts/20pro -maproot=root 192.168.1.20

上述配置实现了: 可将本地/yzpool/hosts/20pro映射给192.168.1.20客户端。且当192.168.1.20客户端中的root权限等同于本机的root权限。

然后我们重启一下服务器,以及上面的服务全部生效。

如果编辑过/etc/exports文件,则需要执行:/etc/rc.d/mountd reload

最后执行:showmount -e localhost查看是否生效。还没搞清楚具体的原因,增加新配置后在客户端挂载出现Stale NFS file handle错误,该错误往往是由于过期的handle造成的,最终通过重启nfs服务解决。下次再出现该错误时,尝试重启nfs服务。

客户端配置

debian

客户端操作系统以debian11为例,该客户机的 IP 地址为在服务端设置的192.168.1.20

首先我们安装nfs客户端应用:

# sudo apt install nfs-common

然后创建一个挂载点,比如我创建一个位于根路径下的yz做为持载点:

# sudo mkdir /yz

最后我们完成挂载:

# sudo mount -t nfs 192.168.1.2:/yzpool/hosts/20pro /yz

如果我们希望在系统启动的时候同步进行挂载,则需要编辑/etc/fstab文件来完成。

192.168.1.2:/yzpool/hosts/20pro /yz nfs rw 0 0

然后重新启动服务器进行测试。

当挂载出现问题时,可以查看服务器的日志信息: tail -n 50 /var/log/messages来查看具体的报错信息。

ubuntu

# sudo apt install nfs-common
$ sudo mount -t nfs 192.168.10.2:/mnt/yzpool/hosts/10.13 /bak

freebsd

启动nfs客户端服务。

% su
# echo 'nfs_client_enable="YES"' >> /etc/rc.conf
# echo 'nfs_client_flags="-n 4"' >> /etc/rc.conf
# nfsiod -n 4

挂载:

% su
# mkdir /mengyunzhi
# mount -t nfs -o vers=4 192.168.1.2:/yzpool/data/hosts/21switchgear /mengyunzhi

最后编辑/etc/fstab

192.168.1.2:/yzpool/data/hosts/21switchgear /mengyunzhi nfs rw,vers=4 0 0

然后使用mount -a进行挂载测试.

locked 锁定

有些应用程序(比如mysql)需要一个锁定的操作,rpc.lockd能够提供这个功能。值得注意的是:客户端和服务端都需要配置这个功能。

服务端(FreeBSD)

在文件/etc/rc.conf中增加

rpc_lockd_enable="YES"
rpc_statd_enable="YES"

然后使用以下命令启动服务:

# /etc/rc.d/lockd start
# 以下是启动statd的,在刚刚启动lockd时会自动启动它
# /etc/rc.d/statd start

此时在客户端应用lock操作时,便不会发生无法锁定文件的错误了。

其它

dir client1 (options) [client2(options)...]详解:

  • ro / rw : a) ro: 只读 b) rw: 写入加读取
  • sync / async : a) sync: 服务端应答完上次请求后,才会应答下次请求; b) async: 异应应答。
  • wdelay / no_wdelay a) wdelay服务器预测是连续请求时,将延迟提交上次的写请求(提升写入效率,数据断电易丢失)
  • no_all_squash / all_squash a) no_all_squash: 不改变客户端的

参考文档

https://vitux.com/debian-nfs-mount/

https://www.thegeekdiary.com/mount-nfs-access-denied-by-serve...

https://docs.freebsd.org/doc/5.5-RELEASE/usr/share/doc/handbo...


潘杰
3.1k 声望239 粉丝