安装NFS服务器,在Linux和Windows服务器之间共享文件。NFS是Network File System 的缩写。NFS可让用户或主机通过网络从多个磁盘和目录中存储和检索数据。这种分布式文件系统由 Sun Microsystems 于 1984年开发。NFS采用客户机/服务器模式运行,NFS服务器管理客户端的授权和管理,并存储共享数据。一旦认证成功,客户端就可以像本地文件系统一样查看和访问数据。

部署的系统环境如下。

角色 主机名 IP地址 操作系统 共享目录 挂载点
NFS服务器 nfs001 192.168.64.160 Rocky Linux9.3 /nfs-share
NFS客户端1 dns001 192.168.64.157 Rocky Linux9.3 /install
NFS客户端2 ad001 192.168.64.148 Windows Server2019 Z盘符

NFS最新版本是4.2,NFS服务监听在TCP端口2049。如果NFS服务器有访问限制,应允许NFS客户端主机访问NFS服务器的TCP端口2049。

NFS服务器

使用dnf或者yum命令安装nfs-utils软件包。

# dnf install nfs-utils -y

完成NFS服务器的安装后,在 /etc/idmapd.conf 文件中对 NFS 服务器进行域名配置。idmapd 是负责提供 NFSv4 内核客户端和服务器功能的守护进程。它将用户和组 ID 转换为名称,反之亦然,从而确保服务器客户端通信。

使用喜欢的文本编辑器打开 /etc/idmapd.conf 文件之后,修改Domain参数的值为sys-blog.local。

Domain = sys-blog.local

在 /etc/exports 文件中配置,NFS客户端可访问的NFS服务器上的物理文件。因此需要编辑并添加要共享给NFS客户端的文件系统,在这里共享给NFS客户端的文件系统路径为 /nfs-share 目录。

创建共享目录 /nfs-share 目录。

# mkdir -p /nfs-share

编辑 /etc/xports 文件,将 /nfs-share 目录分享给IP网段 192.168.64.0/24 里的所有主机。

/nfs-share 192.168.64.0/24(rw,no_root_squash)

export的主要选项如下。

选项 解释
rw 允许读和写
ro 仅允许读
sysc 启用同步写入(默认)
async 启用异步写入
secure 当NFS客户端的端口小于1024时,接收请求(默认值)
insecure 禁用确认NFS客户端的端口号。
wdelay 如果另一个写入请求正在执行或即将发生,则进行延迟写入(默认值)
no_wdelay 禁用 wdelay。与async一起设置
subtree_check 一般来说,大部分为只读且不经常重命名目录时,最好启用子树检查。(默认值)
no_subtree_check 禁用子树检查。一般来说,在共享目录有许多小文件且经常更改的目录时,最好禁用子树检查。
root_squash 将root用户的 UID/GID 映射为匿名用户的 UID/GID。
no_root_squash 禁止将root用户的 UID/GID 映射为匿名用户的 UID/GID。
all_squash 将所有用户的 UID/GID 映射为匿名用户的 UID/GID。
no_all_squash 禁止将所有用户的 UID/GID 映射为匿名用户的 UID/GID(默认值)
anonuid=UID 将指定的 UID 映射为匿名用户的 UID
anongid=GID 将指定的 GID 映射为匿名用户 GID

启动NFS服务并将NFS服务设定为开机自动启动。

# systemctl start rpcbind nfs-server
# systemctl enable rpcbind nfs-server

完成NFS服务器的设定之后,使用 showmount –exports nfs001.sys-blog.local 命令确认分享的目录。

在这里需要将nfs001.sys-blog.local修改为自己的NFS服务器的FQDN。

如果使用系统的firewalld服务的话,执行 firewall-cmd –add-service=nfs –permanent 命令允许访问nfs服务。

NFS客户端(Linux)

使用dnf或者yum命令安装nfs-utils软件包。

# dnf install nfs-utils -y

使用文本编辑器打开 /etc/idmapd.conf 文件之后,修改Domain参数的值为sys-blog.local。

Domain = sys-blog.local

启动rpcbind拂去并将该服务设定为开机自动启动。

# systemctl start rpcbind
# systemctl enable rpcbind

在这里创建本地目录 /install 之后,将NFS服务器的/nfs-share目录以NFS协议进行挂载。

# mkdir -p /install
# mount -t nfs -o vers=4 nfs001.sys-blog.local:/nfs-share /install

-o 选项可指定参数,在这里指定了NFS版本4(默认版本是NFS4),如果使用NFS版本3的话,参数为 vers=3。

确认NFS服务器上的 /nfs-share 目录,已被挂载至本地的 /install 目录。

# df -Th
Filesystem                       Type      Size  Used Avail Use% Mounted on
devtmpfs                         devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs                            tmpfs     867M     0  867M   0% /dev/shm
tmpfs                            tmpfs     347M  7.1M  340M   3% /run
/dev/mapper/rl-root              xfs        37G  5.9G   32G  16% /
/dev/sda1                        xfs       960M  301M  660M  32% /boot
tmpfs                            tmpfs     174M   52K  174M   1% /run/user/42
tmpfs                            tmpfs     174M   36K  174M   1% /run/user/0
nfs001.sys-blog.local:/nfs-share nfs4       64G  4.9G   59G   8% /install

在使用mount命令,进行了临时挂载。编辑 /etc/fstab 文件,系统启动时自动挂载NFS服务器的共享目录。

开始编辑之前备份/etc/fstab文件。

# cp /etc/fstab /etc/fstab.$(date +%Y%m%d%s)

打开 /etc/fstab 文件之后,添加下面的一行。

nfs001.sys-blog.local:/nfs-share /install nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

请nfs001.sys-blog.local改为你自己的主机的FQDN或者IP地址。

把临时挂载的NFS目录卸载之后,执行 mount -a 命令使用 /etc/fstab 里的NFS挂载选项进行挂载。

# umount /install
# systemctl daemon-reload
# mount -a

再次执行 df -Th 命令确认NFS共享目录已被挂载。

# df -Th
Filesystem                       Type      Size  Used Avail Use% Mounted on
devtmpfs                         devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs                            tmpfs     867M     0  867M   0% /dev/shm
tmpfs                            tmpfs     347M  7.1M  340M   3% /run
/dev/mapper/rl-root              xfs        37G  5.9G   32G  16% /
/dev/sda1                        xfs       960M  301M  660M  32% /boot
tmpfs                            tmpfs     174M   52K  174M   1% /run/user/42
tmpfs                            tmpfs     174M   36K  174M   1% /run/user/0
nfs001.sys-blog.local:/nfs-share nfs4       64G  4.9G   59G   8% /install

最后可以重启NFS客户端的OS,确认开机自动挂载NFS是否成功。

NFS客户端(Windows Server)

以 Windows Server 2019 为例。

启动”服务器管理器”之后,点击”添加角色和功能”。

点击”下一步”。

选择服务器 ad001 之后,点击”下一步”。

在”服务器角色”选择里,不进行任何勾选,直接点击”下一步”。

勾选”NFS客户端”之后,点击”下一步”。

点击”安装”,开始安装NFS客户端。

完成安装之后,点击”关闭”。

添加NFS客户端功能之后,就可以在Windows服务器上挂载NFS服务器的共享目录。以管理员权限启动命令行之后,执行下面的命令。
mount <NFS服务器的IP地址或者主机名>:<共享目录> <指定未使用的盘符>

当成功挂载时,如上显示”命令已成功完成”。打开文件浏览器,可确认NFS已被挂载。

Windows PC也可通过如下方法添加NFS服务功能后,使用NFS协议进行挂载。
“控制面板” -> “程序和功能” -> “关闭和启用Windows功能”,添加”FNS服务”及下面的”NFS客户端”和”管理工具”。

关于Windows PC支持的NFS版本,查看微软官网网络文件系统概述。需注意的是,根据NFS客户端可使用的NFS协议,需要在NFS服务器上进行设定。

测试读写

在Linux客户端写文件之后,查看是否能在Widnows服务器上查看该内容。

Linux上的NFS客户端上,在NFS服务器的共享目录下创建 sys-blog.txt 文件。

# echo "This is test for nfs write." > /install/sys-blog.txt
# ll /install/
total 4
-rw-r--r-- 1 root root 28 Jan 20 08:53 sys-blog.txt

在Windows服务器上的NFS客户端查看该文件的内容。

Linux系统和Windows系统使用NFS共享目录,访问文件工作的非常好!