centos7.9.2009离线安装nfs,并配置服务

一、下载依赖包

本来想的是在本地的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)

参数解析:

  1. 基本访问权限选项
    这类选项控制客户端对共享目录最基本的读写能力。
选项     默认值      说明
ro        默认    以只读方式共享目录。客户端无法修改其中的内容。
rw                允许客户端进行读写操作。
sync      默认    同步写入模式。服务器在处理下一个请求前,必须将数据更改写入磁盘。这保证了数据一致性,但性能稍低。
async             异步写入模式。服务器会先告知客户端写入完成,稍后再将数据写入磁盘。此选项可以提升性能,但如果在数据未实际写入磁盘前服务器重启或崩溃,可能导致数据丢失或损坏。
secure    默认    要求NFS请求源端口小于1024(即特权端口)。通常用于增强安全性。
insecure          允许来自非特权端口(>=1024)的NFS请求。
  1. 用户身份映射选项
    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 的用户。
  1. 文件系统行为和性能选项
选项                    说明
wdelay              默认。如果NFS服务器检测到有相关的写入请求即将到来,它会稍等片刻,将多个写入请求合并后一次性写入磁盘,以提高效率。
no_wdelay           关闭写入延迟。当收到大量互不相关的小请求时,延迟反而会降低性能,此时可以启用此选项。注意: 该选项通常与 sync 配合使用才有效。
subtree_check       启用子树检查。当只导出一个文件系统下的子目录(而非整个文件系统)时,服务器需要额外检查每个请求的文件是否在导出的子树内。这增加了安全性,但可能降低可靠性。
no_subtree_check    新版本默认。禁用子树检查。可以提升可靠性,但会略微降低安全性。
nohide              如果服务器在一个导出的文件系统内部挂载了另一个文件系统,默认情况下客户端挂载父目录后,在挂载点处会看到一个空目录(被“隐藏”)。启用nohide可以让客户端直接穿透看到内部挂载的文件系统内容。
crossmnt            这是一个更强的“不隐藏”选项。如果父文件系统设置了crossmnt,客户端在挂载父目录后,可以自动访问其下挂载的所有子文件系统,即使这些子文件系统没有被显式导出。
  1. 安全和高级选项
选项  说明
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 选项。它告诉系统这是一个网络设备,需要在网络就绪后再尝试挂载,否则可能会导致开机过程卡住或挂载失败。我们还将手动挂载时的参数原样搬了过来。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容