NFS 实践手册 - Ubuntu 系统

1. 环境准备

1.1 系统要求

  • Ubuntu 服务器版/桌面版 18.04 或更高版本
  • 局域网内所有设备处于同一网络段
  • 了解服务器IP地址(可通过 ip addrifconfig 查看)

2. NFS 服务器端配置

2.1 安装 NFS 服务器

# 更新包列表
sudo apt update

# 安装 NFS 服务器
sudo apt install nfs-kernel-server -y

2.2 创建共享目录

# 创建要共享的目录(例如:/data/share)
sudo mkdir -p /data/share

# 设置目录权限(根据需要调整)
sudo chown -R nobody:nogroup /data/share
sudo chmod -R 755 /data/share

# 或者设置更灵活的权限(客户端可读写)
sudo chmod -R 777 /data/share

2.3 配置 NFS 导出

# 编辑NFS导出配置文件
sudo nano /etc/exports

在文件中添加以下内容(根据需求选择配置):

选项 1:允许特定IP段访问
/data/share 192.168.1.0/24(rw,sync,no_subtree_check)
选项 2:允许特定IP访问
/data/share 192.168.1.100(rw,sync,no_subtree_check)
/data/share 192.168.1.101(rw,sync,no_subtree_check)
选项 3:允许所有局域网设备访问
/data/share 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
选项 4:添加多个不同权限的配置
# 读写权限
/data/share 192.168.1.0/24(rw,sync,no_subtree_check)

# 只读权限
/data/share 192.168.1.200(ro,sync,no_subtree_check)

2.4 导出配置说明

  • rw:读写权限
  • ro:只读权限
  • sync:同步写入,数据安全性更高
  • async:异步写入,性能更好
  • no_subtree_check:不检查子目录权限,提高性能
  • no_root_squash:允许root用户保持权限(谨慎使用)
  • all_squash:所有用户映射为匿名用户

2.5 应用配置并重启服务

# 重新导出NFS共享目录
sudo exportfs -ra

# 重启NFS服务
sudo systemctl restart nfs-kernel-server

# 设置开机自启
sudo systemctl enable nfs-kernel-server

# 查看导出状态
sudo exportfs -v

2.6 防火墙配置

# 如果启用了UFW防火墙,需要放行NFS
sudo ufw allow from 192.168.1.0/24 to any port nfs
sudo ufw allow 111
sudo ufw allow 2049

# 或者使用nfs服务名称
sudo ufw allow nfs

# 查看防火墙状态
sudo ufw status

3. 客户端配置(Linux系统)

3.1 安装NFS客户端

# Ubuntu/Debian
sudo apt install nfs-common -y

# CentOS/RHEL
sudo yum install nfs-utils -y

3.2 创建本地挂载点

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

3.3 临时挂载NFS共享

# 挂载NFS共享(Ubuntu服务器IP为192.168.1.10为例)
sudo mount -t nfs 192.168.1.10:/data/share /mnt/nfs_share

# 验证挂载
df -h | grep nfs
ls /mnt/nfs_share

3.4 永久挂载配置

# 编辑fstab文件
sudo nano /etc/fstab

# 添加以下行(根据实际情况调整)
192.168.1.10:/data/share  /mnt/nfs_share  nfs  defaults  0  0

# 或者添加更多选项提高稳定性
192.168.1.10:/data/share  /mnt/nfs_share  nfs  rw,hard,intr,timeo=300,retrans=3  0  0

3.5 测试永久挂载

# 卸载已挂载的目录
sudo umount /mnt/nfs_share

# 测试fstab配置
sudo mount -a

# 验证是否成功
mount | grep nfs

4. Windows客户端访问NFS共享

4.1 Windows 10/11专业版/企业版

  1. 开启NFS客户端功能

    • 控制面板 → 程序 → 启用或关闭Windows功能
    • 勾选"NFS服务"下的"NFS客户端"
  2. 挂载NFS共享

# 以管理员身份运行CMD或PowerShell
mount \\192.168.1.10\data\share Z:
# 或使用驱动器号
net use Z: \\192.168.1.10\data\share

4.2 Windows 10/11家庭版

由于家庭版不支持原生NFS,需要第三方软件:

  • WinNFSd:轻量级NFS服务器/客户端
  • NFS AWE:商业软件
  • 使用SMB替代:在Ubuntu上配置Samba共享

5. macOS客户端访问NFS共享

5.1 命令行挂载

# 创建挂载点
sudo mkdir /Volumes/nfs_share

# 挂载NFS共享
sudo mount -t nfs 192.168.1.10:/data/share /Volumes/nfs_share

5.2 图形界面挂载

  1. 打开Finder
  2. 菜单栏选择"前往" → “连接服务器”
  3. 输入地址:nfs://192.168.1.10/data/share
  4. 点击"连接"

6. 高级配置与优化

6.1 性能优化配置

# 编辑/etc/exports,添加性能参数
/data/share 192.168.1.0/24(rw,sync,no_subtree_check,no_wdelay,insecure_locks)

6.2 客户端挂载优化参数

# 在客户端fstab中添加优化参数
192.168.1.10:/data/share /mnt/nfs_share nfs rsize=32768,wsize=32768,hard,intr,timeo=300,retrans=3 0 0

6.3 NFS服务器优化

# 编辑NFS配置文件
sudo nano /etc/default/nfs-kernel-server

# 调整参数
RPCNFSDCOUNT=8  # NFS线程数
RPCMOUNTDOPTS="--manage-gids"  # 管理组ID

7. 常见问题解决

7.1 权限问题

# 在服务器端检查
sudo cat /etc/exports
sudo exportfs -v

# 重新导出配置
sudo exportfs -ra

7.2 连接问题

# 检查NFS服务状态
sudo systemctl status nfs-kernel-server

# 查看RPC服务
rpcinfo -p

# 从客户端测试连接
showmount -e 192.168.1.10

7.3 性能问题

# 查看NFS统计
nfsstat

# 监控NFS性能
sudo nfsstat -c  # 客户端统计
sudo nfsstat -s  # 服务器统计

8. 安全建议

  1. 使用最小权限原则:只授予必要的读写权限
  2. 限制访问范围:使用具体的IP地址或小范围的IP段
  3. 避免使用no_root_squash:除非有特殊需求
  4. 定期更新系统sudo apt update && sudo apt upgrade
  5. 使用防火墙限制:仅允许必要的端口
  6. 考虑使用Kerberos:如需更高级的安全性

9. 自动化脚本

9.1 服务器一键安装脚本

#!/bin/bash
# nfs_server_setup.sh

echo "开始安装和配置NFS服务器..."

# 安装NFS服务器
sudo apt update
sudo apt install nfs-kernel-server -y

# 创建共享目录
sudo mkdir -p /data/share
sudo chown -R nobody:nogroup /data/share
sudo chmod -R 755 /data/share

# 配置exports文件
echo "/data/share 192.168.1.0/24(rw,sync,no_subtree_check)" | sudo tee -a /etc/exports

# 重启服务
sudo systemctl restart nfs-kernel-server
sudo systemctl enable nfs-kernel-server

# 配置防火墙
sudo ufw allow from 192.168.1.0/24 to any port nfs
sudo ufw allow 111
sudo ufw allow 2049

echo "NFS服务器配置完成!"
echo "共享目录: /data/share"
echo "允许访问: 192.168.1.0/24"

9.2 客户端一键挂载脚本

#!/bin/bash
# nfs_client_mount.sh

SERVER_IP="192.168.1.10"
SHARE_PATH="/data/share"
MOUNT_POINT="/mnt/nfs_share"

echo "开始挂载NFS共享..."

# 创建挂载点
sudo mkdir -p $MOUNT_POINT

# 安装客户端软件
sudo apt install nfs-common -y

# 挂载NFS
sudo mount -t nfs ${SERVER_IP}:${SHARE_PATH} $MOUNT_POINT

# 验证挂载
if mount | grep -q $MOUNT_POINT; then
    echo "NFS挂载成功!"
    echo "挂载点: $MOUNT_POINT"
else
    echo "挂载失败,请检查配置。"
fi

10. 测试验证

10.1 基本功能测试

# 在服务器端
echo "测试内容来自NFS服务器" > /data/share/test.txt

# 在客户端
cat /mnt/nfs_share/test.txt
echo "客户端写入测试" > /mnt/nfs_share/test2.txt

# 回服务器验证
cat /data/share/test2.txt

10.2 性能测试

# 测试写入速度
dd if=/dev/zero of=/mnt/nfs_share/testfile bs=1M count=100

# 测试读取速度
dd if=/mnt/nfs_share/testfile of=/dev/null bs=1M

总结

通过以上步骤,您应该能够在Ubuntu系统上成功搭建NFS服务器,并使局域网内的各种设备能够访问指定的目录。建议根据实际需求调整权限和性能参数,并在生产环境中考虑安全性配置。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐