一、下载依赖包
本来想的是在本地的centos虚拟机上使用yum命令下载安装包,有尝试过yum install --downloadonly --downloaddir=<你的目录> nfs-utils,但是下载到的文件只有nfs-utils文件本身的rpm包,不包括任何的依赖,问了下AI,还有一种方法,repotrack --download_path=<你的目录> nfs-utils,本地的虚拟机执行报错,就没再折腾了。直接问AI在centos7.9.2009上安装nfs-utils需要什么依赖包,AI给了结果。
序号 安装包名称 说明
1 libtirpc-0.2.4-0.16.el7.x86_64.rpm 传输层RPC库
2 tcp_wrappers-7.6-77.el7.x86_64.rpm 网络访问控制工具
3 libbasicobjects-0.1.1-32.el7.x86_64.rpm 基础对象库
4 libcollection-0.7.0-32.el7.x86_64.rpm 集合库
5 libevent-2.0.21-4.el7.x86_64.rpm 事件通知库
6 libref_array-0.1.5-32.el7.x86_64.rpm 引用数组库
7 libpath_utils-0.2.1-32.el7.x86_64.rpm 路径处理工具库
8 libini_config-1.3.1-32.el7.x86_64.rpm INI配置文件解析库
9 libnfsidmap-0.25-19.el7.x86_64.rpm NFS用户ID映射库
10 keyutils-1.5.8-3.el7.x86_64.rpm Linux密钥管理工具
11 rpcbind-0.2.0-49.el7.x86_64.rpm 通用地址与RPC程序号映射服务(必需)
12 libverto-libevent-0.2.5-4.el7.x86_64.rpm libverto的libevent事件循环模块
13 quota-4.01-19.el7.x86_64.rpm 磁盘配额管理工具
14 quota-nls-4.01-19.el7.noarch.rpm 磁盘配额工具的国家语言支持
15 gssproxy-0.7.0-30.el7_9.x86_64.rpm GSSAPI代理(可能为可选,但包含在完整集合中)
16 nfs-utils-1.3.0-0.68.el7.x86_64.rpm NFS服务主程序包
知道依赖包后,直接登录阿里云的镜像网站根据文件名下载。下载完后,按照顺序进行安装就行。
二、服务端配置,固定nfs使用的端口
默认编辑的配置文件为/etc/nfs.conf文件,但是服务端没有这个配置文件,直接配置/etc/default/nfs-kernel-server(服务端为基于debian的操作系统)。
1、为各个服务设置固定端口
在文件中找到或创建对应的段落,并添加或修改 port 参数。
1》为 mountd 设置固定端口:在 [mountd] 段落中设置 port。
2》为 nfsd 设置监听端口:在 [nfsd] 段落中设置 port。通常 NFS 主服务默认使用 2049 端口,如果需要修改可以在这里指定 。
3》为 statd 设置固定端口:在 [statd] 段落中设置 port(监听端口)和 outgoing-port(发出通知的端口)。
# /etc/nfs.conf
[nfsd]
# 设置内核 NFS 服务监听的端口,默认为2049,通常无需修改
# port=2049
[mountd]
# 设置 mountd 服务的端口 (TCP 和 UDP)
port=40001
[lockd]
# 设置 nlockmgr 服务的端口 (TCP 和 UDP)
port=40002
[statd]
# 设置 statd 服务的端口 (TCP 和 UDP)
port=40003
配置/etc/default/nfs-kernel-server,设置 mountd 的端口和 nfsd 的选项
# Options for rpc.mountd.
RPCMOUNTDOPTS="--port 40001"
# Options for rpc.nfsd.
RPCNFSDOPTS="--port 2049"
编辑 /etc/default/nfs-common,设置 statd 的端口
# Options for rpc.statd.
STATDOPTS="--port 40002 --outgoing-port 40003"
NEED_STATD="yes"
2、为 lockd (NLM) 配置内核参数
lockd 服务的端口无法在上述配置文件中设置,需要通过内核模块参数或 sysctl 来配置,sysctl -p来生效。
fs.nfs.nlm_tcpport = 40004
fs.nfs.nlm_udpport = 40004
三、服务端共享目录配置
编辑/etc/export,文件编辑完成执行exportfs -ra生效配置。
/data 客户端ip(rw,sync,no_root_squash,no_subtree_check,insecure)
参数解析:
- 基本访问权限选项
这类选项控制客户端对共享目录最基本的读写能力。
选项 默认值 说明
ro 默认 以只读方式共享目录。客户端无法修改其中的内容。
rw 允许客户端进行读写操作。
sync 默认 同步写入模式。服务器在处理下一个请求前,必须将数据更改写入磁盘。这保证了数据一致性,但性能稍低。
async 异步写入模式。服务器会先告知客户端写入完成,稍后再将数据写入磁盘。此选项可以提升性能,但如果在数据未实际写入磁盘前服务器重启或崩溃,可能导致数据丢失或损坏。
secure 默认 要求NFS请求源端口小于1024(即特权端口)。通常用于增强安全性。
insecure 允许来自非特权端口(>=1024)的NFS请求。
- 用户身份映射选项
NFS的核心挑战之一是处理不同机器上 UID/GID 的不一致。这类选项用于解决这个问题,特别是针对root用户。
选项 默认值 说明
root_squash 默认 压缩root用户权限。将来自客户端root用户的请求映射到服务器上的匿名用户(通常是 nfsnobody 或 nobody),从而防止客户端root在服务器上拥有超级用户权限。
no_root_squash 不压缩root用户权限。允许客户端的 root 用户以服务器上的 root 身份访问文件系统。这会带来巨大安全风险,除非有特殊需求,否则强烈不建议使用。
all_squash 压缩所有用户。将所有客户端用户(包括root)的请求都映射到匿名用户。这在导出公共目录(如 /home/ftp)时非常有用。
anonuid / anongid 通常为65534 (nfsnobody) 配合 root_squash 或 all_squash 使用,手动指定匿名用户应被映射到的特定UID和GID。例如:all_squash,anonuid=1000,anongid=1000 会将所有访问者映射为 UID 1000 的用户。
- 文件系统行为和性能选项
选项 说明
wdelay 默认。如果NFS服务器检测到有相关的写入请求即将到来,它会稍等片刻,将多个写入请求合并后一次性写入磁盘,以提高效率。
no_wdelay 关闭写入延迟。当收到大量互不相关的小请求时,延迟反而会降低性能,此时可以启用此选项。注意: 该选项通常与 sync 配合使用才有效。
subtree_check 启用子树检查。当只导出一个文件系统下的子目录(而非整个文件系统)时,服务器需要额外检查每个请求的文件是否在导出的子树内。这增加了安全性,但可能降低可靠性。
no_subtree_check 新版本默认。禁用子树检查。可以提升可靠性,但会略微降低安全性。
nohide 如果服务器在一个导出的文件系统内部挂载了另一个文件系统,默认情况下客户端挂载父目录后,在挂载点处会看到一个空目录(被“隐藏”)。启用nohide可以让客户端直接穿透看到内部挂载的文件系统内容。
crossmnt 这是一个更强的“不隐藏”选项。如果父文件系统设置了crossmnt,客户端在挂载父目录后,可以自动访问其下挂载的所有子文件系统,即使这些子文件系统没有被显式导出。
- 安全和高级选项
选项 说明
fsid=... 用于明确标识一个导出。在NFSv4中,需要为导出根(通常是整个NFS共享的根)设置 fsid=0 或 fsid=root。对于普通导出,它常用于确保文件系统有唯一的标识符,特别是在使用nohide或存在同名设备时。
sec=... 指定该导出允许使用的安全模式。例如 sec=krb5 要求使用Kerberos V5进行用户认证。可以指定多个,如 sec=krb5:krb5i:krb5p。
xprtsec=... 在Linux NFS服务器上,此选项用于要求客户端使用传输层安全性(TLS),例如 xprtsec=tls 要求客户端必须协商一个TLS会话才能访问该导出
四、客户端文件夹挂载
1、手动挂载
mount -o noresvport,soft 192.168.1.100:/srv/nfs/share /mnt/nfs
参数解析:
1》noresvport: 这个参数的意思是“不使用保留端口”。它的作用是让 NFS 客户端在网络中断后重新连接时,使用一个新的 TCP 端口。这可以避免因使用旧端口导致的重连失败,特别适合需要高可用性的场景,比如连接发生故障转移的 NAS 或云存储 。简单来说,它让你的 NFS 连接在面对网络波动时更“坚强”。默认使用的端口是<1024的,使用这个参数,连接的端口就是>1024的,但是这个参数要配合export文件中的insecure一起使用,单独使用会报错。
2》soft: 这个参数决定了当 NFS 服务器无响应时,客户端的表现。设置为 soft 后,如果客户端尝试多次重传(retransmissions)后仍无响应,就会向访问文件的应用程序返回一个错误(I/O error),而不是让进程“卡死” 。这样可以避免应用程序因 NFS 服务中断而无休止地等待。
2、自动挂载
vi /etc/fstab
192.168.1.100:/srv/nfs/share /mnt/nfs nfs noresvport,soft,_netdev 0 0
参数解析:
noresvport,soft,_netdev: 挂载选项。这里必须添加 _netdev 选项。它告诉系统这是一个网络设备,需要在网络就绪后再尝试挂载,否则可能会导致开机过程卡住或挂载失败。我们还将手动挂载时的参数原样搬了过来。