NFS 挂载操作详解#
什么是 NFS?#
NFS(Network File System):网络文件系统,允许计算机之间通过网络共享目录和文件
架构:Client-Server 模式
优势:开发板可直接运行 Ubuntu 上的程序,无需拷贝,便于调试
快速开始#
开发板 (192.168.5.9) ←→ 交换机/路由器 ←→ Windows (192.168.5.10)
↑
↓
Ubuntu (192.168.5.11)
本教程使用
/home/yantao/nfs_rootfs作为共享目录,请根据你的 Ubuntu 用户名相应调整。
# ========== Ubuntu 端 (192.168.5.11) ==========
# 1. 安装配置 NFS
sudo apt-get install nfs-kernel-server
sudo mkdir -p /home/yantao/nfs_rootfs
sudo chmod 777 /home/yantao/nfs_rootfs
# 2. 配置 exports
sudo vim /etc/exports
# 添加:/home/yantao/nfs_rootfs 192.168.5.9(rw,sync,no_root_squash) 192.168.5.10(ro,sync)
# 3. 重启服务
sudo exportfs -ra
sudo service nfs-kernel-server restart
# 4. 放入测试文件
cd /home/yantao/nfs_rootfs
echo "Hello from Ubuntu at 192.168.5.11 from /home/yantao/nfs_rootfs" > ubuntu_test.txt
# ========== 开发板端 (192.168.5.9) ==========
# 1. 挂载 NFS
mount -t nfs -o nolock,vers=3 192.168.5.11:/home/yantao/nfs_rootfs /mnt
# 2. 验证读取
cat /mnt/ubuntu_test.txt
# 3. 测试写入
echo "Hello from Board at 192.168.5.9" > /mnt/board_test.txt
# ========== Windows 端 (192.168.5.10) ==========
# 1. 打开命令提示符
# 2. 挂载 NFS
mount \\192.168.5.11\home\yantao\nfs_rootfs Z:
# 3. 查看文件
dir Z:\
# 应该看到 ubuntu_test.txt 和 board_test.txt
# 4. 测试读取(只读权限)
type Z:\ubuntu_test.txt
Ubuntu 端配置(NFS 服务器)#
1. 安装 NFS 服务器#
sudo apt-get update
sudo apt-get install nfs-kernel-server
2. 配置共享目录#
mkdir -p /home/yantao/nfs_rootfs
sudo chmod 777 /home/yantao/nfs_rootfs
sudo echo "/home/yantao/nfs_rootfs *(rw,sync,no_root_squash,no_subtree_check)" >> /etc/exports
选项说明:
选项 |
含义 |
|---|---|
|
读写权限 |
|
同步写入 |
|
root 用户保持权限 |
|
不检查子目录权限 |
3. 重启 NFS 服务#
sudo exportfs -ra # 使配置生效
sudo service nfs-kernel-server restart # 或 systemctl restart nfs-kernel-server
sudo exportfs -v # 查看共享状态
开发板端操作(NFS 客户端)#
1. 确保网络连通#
ping 192.168.5.11
nc -zv 192.168.5.11 2049 # 检查 NFS 端口
2. 挂载 NFS 目录#
mount -t nfs -o nolock,vers=3 192.168.5.11:/home/yantao/nfs_rootfs /mnt
# 参数说明:
# -t nfs : 文件系统类型
# -o nolock : 禁用文件锁(避免挂载失败)
# -o vers=3 : 使用 NFS 版本 3(兼容性好)
挂载成功后可用 df -h 验证。
3. 验证挂载#
mount | grep nfs # 查看挂载信息
ls /mnt # 列出目录内容
# 测试读写
echo "test" > /mnt/test.txt
cat /mnt/test.txt
rm /mnt/test.txt
4. 自动化挂载(可选)#
vim /etc/fstab
# 添加:192.168.5.11:/home/yantao/nfs_rootfs /mnt nfs nolock,vers=3 0 0
mount -a # 测试配置
5. 卸载 NFS#
umount /mnt
# 如提示 "device is busy",查找占用进程:
fuser -m /mnt # 或 lsof /mnt
Windows 端操作#
作为 NFS 客户端#
启用 NFS 客户端(Windows 专业版/企业版)#
# 方式一:控制面板 → 启用或关闭 Windows 功能 → 勾选 "NFS 客户端"
# 方式二:PowerShell 命令
Enable-WindowsOptionalFeature -FeatureName ServicesForNFS-ClientOnly, ClientForNFS-Infrastructure -Online -NoRestart
挂载与卸载#
# 挂载(注意路径转换:/home/... 变为 \home\...)
mount \\192.168.5.11\home\yantao\nfs_rootfs Z:
# 卸载
umount Z:
通过 Samba 共享给开发板#
启用 SMB 支持#
控制面板 → 程序和功能 → 启用 Windows 功能 → 勾选 “SMB 1.0/CIFS 文件共享支持”
共享文件夹#
右键文件夹 → 属性 → 共享
添加共享用户和权限
记录共享路径:
\\Windows_IP\共享名
开发板挂载 Samba#
apt-get install cifs-utils
# 有密码挂载
mount -t cifs -o username=Windows用户名,password=密码 //192.168.5.10/share /mnt/windows
# 无密码挂载(需 Windows 设置为无密码共享)
mount -t cifs -o guest //192.168.5.10/share /mnt/windows
实际开发工作流#
场景 1:应用程序开发调试#
# Ubuntu 编译(192.168.5.11)
cd /home/yantao/nfs_rootfs
arm-buildroot-linux-gnueabihf-gcc -o hello hello.c
# 开发板运行(192.168.5.9)
cd /mnt && ./hello
场景 2:内核模块开发#
# Ubuntu 编译
cd /home/yantao/nfs_rootfs
make ARCH=arm CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
# 开发板加载测试
cd /mnt
insmod mymodule.ko && lsmod
场景 3:多机协作开发#
Windows 编辑代码
上传到 Ubuntu 的
/home/yantao/nfs_rootfs/Ubuntu 交叉编译
开发板通过 NFS 直接运行测试
扩展配置#
多客户端访问控制#
# /etc/exports 配置示例:
# 特定 IP 不同权限
/home/yantao/nfs_rootfs 192.168.5.9(rw,sync,no_root_squash) 192.168.5.10(ro,sync)
# 整个网段
/home/yantao/nfs_rootfs 192.168.5.0/24(rw,sync,no_root_squash)
性能优化挂载选项#
mount -t nfs -o nolock,vers=3,rsize=32768,wsize=32768,timeo=15 192.168.5.11:/home/yantao/nfs_rootfs /mnt
# rsize/wsize:读写缓冲区大小(默认 4096,可增大)
# timeo:超时时间(默认 7 个 0.1 秒)