类别:Ubantu / 日期:2026-08-27 / 浏览:97 / 评论:0

详细讲解NFS远程存储的完整操作流程。这份指南会从服务端配置到客户端挂载,一步步带你实践。

一、NFS 基础概念

NFS (Network File System) 允许一台机器(客户端)通过网络访问另一台机器(服务端)的目录,就像访问本地磁盘一样。

二、环境准备

假设我们要搭建一个测试环境:

角色IP地址共享目录(服务端)挂载点(客户端)
服务端(ubuntu)192.168.156.157/data/nfs_share-
客户端(centos)192.168.156.156-/mnt/nfs_data

三、服务端配置(在 192.168.156.157 上操作)

1. 安装 NFS 服务

# Ubuntu/Debian 系统
apt-get install -y nfs-kernel-server rpcbind

# 或者CentOS/RHEL 系统
# yum install -y nfs-utils rpcbind

2. 创建共享目录并设置权限

# 创建要共享的目录
mkdir -p /data/nfs_share

# 创建一个测试文件,稍后验证
echo "Hello NFS" > /data/nfs_share/test.txt

# 设置目录权限(根据需求调整)
chmod 755 /data/nfs_share
chown nfsnobody:nfsnobody /data/nfs_share   # 或 root:root

3. 配置导出规则(核心步骤)

编辑 /etc/exports 文件:

vi /etc/exports

添加以下内容:

# 格式:共享目录  客户端IP/网段(权限选项)
/data/nfs_share 192.168.156.156/24(rw,sync,no_root_squash,no_subtree_check)

常用选项详解

选项含义
rw读写权限(ro 为只读)
sync同步写入(数据实时落盘,更安全但慢)
async异步写入(性能更高但有数据丢失风险)
no_root_squash允许客户端root用户保留root权限(谨慎使用)
root_squash将客户端root映射为匿名用户(默认,更安全)
no_subtree_check不检查子目录权限(提高性能)
insecure允许使用大于1024的端口连接
no_all_squash保留客户端用户的UID/GID映射

多客户端配置示例:

# 允许单个IP
/data/nfs_share 192.168.156.156(rw,sync)

# 允许整个网段
/data/nfs_share 192.168.156.0/24(rw,sync)

# 允许所有(不安全,仅测试用)
/data/nfs_share *(rw,sync,no_root_squash)

4. 使配置生效

# 导出所有共享目录
exportfs -a

# 查看当前导出状态
exportfs -v

# 重启NFS服务(使配置彻底生效)
systemctl restart rpcbind
systemctl restart nfs-server   # ubuntu、CentOS 7+ 命令
# 或 systemctl restart nfs      # 旧版本

5. 设置开机自启

systemctl enable rpcbind
systemctl enable nfs-server

6.服务端固定端口

由于nfs的端口是动态随机的,所以需要固定端口。端口根据实际情况去分配,要避免冲突。

6.1 固定端口方案:

mountd → 8901

statd → 8902

lockd → 8903

6.2 配置 NFS 端口

步骤 1:配置 /etc/nfs.conf

sudo vim /etc/nfs.conf

清空文件内容,写入以下配置:

[general]
pipefs-directory=/run/rpc_pipefs

[lockd]
port=8903
udp-port=8903

[mountd]
manage-gids=y
port=8901

[statd]
port=8902

说明:[nfsd] 主服务端口默认 2049,无需修改。

步骤 2:配置 /etc/default/nfs-common

sudo vim /etc/default/nfs-common

修改或添加以下内容:

# 启动 statd 服务(关键:必须设为 yes)
NEED_STATD=yes

# 固定 statd 端口
STATDOPTS="--port 8902 --outgoing-port 8902"

步骤 3:配置 sysctl 固定 lockd 端口

# 添加 lockd 端口配置
echo "fs.nfs.nlm_tcpport=8903" | sudo tee -a /etc/sysctl.conf
echo "fs.nfs.nlm_udpport=8903" | sudo tee -a /etc/sysctl.conf

# 立即生效
sudo sysctl -p

6.3 重启服务并验证

步骤 4:完全重启 NFS 服务

# 停止服务
sudo systemctl stop nfs-kernel-server
sudo systemctl stop rpcbind

# 杀掉所有 statd 进程(确保端口被释放)
sudo pkill -f rpc.statd

# 重新加载 lockd 内核模块
sudo modprobe -r lockd 2>/dev/null || true
sudo modprobe lockd nlm_tcpport=8903 nlm_udpport=8903

# 启动服务
sudo systemctl start rpcbind
sudo systemctl start nfs-kernel-server

# 等待服务完全启动
sleep 5

步骤 5:验证端口固定效果

rpcinfo -p | grep -E 'mountd|nlockmgr|status'

预期输出:

PixPin_2026-08-28_10-19-51.jpg

7. 配置防火墙

放行 NFS 所需端口

# 放行 rpcbind(必须)
sudo ufw allow 111/tcp
sudo ufw allow 111/udp

# 放行 NFS 主服务(必须)
sudo ufw allow 2049/tcp

# 放行固定端口
sudo ufw allow 8901/tcp   # mountd
sudo ufw allow 8902/tcp   # statd
sudo ufw allow 8902/udp   # statd
sudo ufw allow 8903/tcp   # lockd
sudo ufw allow 8903/udp   # lockd

# 重新加载防火墙
sudo ufw reload

# 查看防火墙状态
sudo ufw status verbose

PixPin_2026-08-28_10-22-10.jpg

8. 检查服务状态

# 查看NFS服务是否正常运行
systemctl status nfs-server

# 查看本机共享了哪些目录
showmount -e localhost


四、客户端配置(在 192.168.156.156 上操作)

1. 安装 NFS 客户端工具

yum install -y nfs-utils   # CentOS/RHEL
# apt-get install -y nfs-common   # Ubuntu/Debian

2. 查看服务端共享的目录

showmount -e 192.168.156.157

PixPin_2026-08-27_17-18-04.jpg

3. 创建本地挂载点并挂载

# 创建挂载目录
mkdir -p /mnt/nfs_data

# 手动挂载(立即生效)
mount -t nfs 192.168.156.157:/data/nfs_share /mnt/nfs_data

# 或者使用更详细的参数
mount -t nfs -o rw,sync,hard,intr 192.168.156.157:/data/nfs_share /mnt/nfs_data

常用挂载选项

选项含义
hard硬挂载(网络中断时客户端会卡住等待,数据安全)
soft软挂载(超时后返回错误,避免卡死但可能丢数据)
intr允许中断挂起的NFS操作(配合hard使用)
timeo=n超时时间(默认600,单位0.1秒)
retrans=n重传次数(默认3次)
vers=3 / vers=4指定NFS协议版本

4. 验证挂载是否成功

# 查看已挂载的NFS
df -hT | grep nfs

# 查看挂载点内容
ls -l /mnt/nfs_data
cat /mnt/nfs_data/test.txt   # 应该看到 "Hello NFS"

5. 测试读写权限

# 尝试创建文件(如果服务端允许rw)
echo "Test write" > /mnt/nfs_data/client_write_test.txt

# 如果成功,说明读写权限正常

6. 设置开机自动挂载

编辑 /etc/fstab 文件:

vi /etc/fstab

添加以下行:

# 格式:服务端:共享目录  本地挂载点  文件系统类型  挂载选项  备份频率  检查顺序
192.168.156.157:/data/nfs_share /mnt/nfs_data nfs defaults,_netdev 0 0

参数说明:

  • _netdev:告诉系统在网络就绪后再挂载(对NFS至关重要)

7. 验证 fstab 配置

# 重新挂载所有fstab中的条目(不重启测试)
mount -a

# 检查是否挂载成功
mount | grep nfs


五、常用管理命令

服务端命令

# 查看当前共享状态
exportfs -v

# 重新导出所有共享(修改/etc/exports后执行)
exportfs -ra

# 取消导出某个目录
exportfs -u 192.168.156.157:/data/nfs_share

# 查看NFS连接状态
nfsstat -c   # 客户端统计
nfsstat -s   # 服务端统计

客户端命令

# 查看NFS挂载详情
nfsstat -m

# 查看NFS连接状态
nfsiostat 1   # 每秒刷新一次

# 强制卸载(当NFS挂起时)
umount -f /mnt/nfs_data
umount -l /mnt/nfs_data   # 懒卸载,待没有进程使用时真正卸载


打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章