前言
nfs 是嵌入式 linux 开发必备软件之一,主要功能是把服务器端的文件系统映射到客户端本地。
由于嵌入式软件开发的特殊性(编译环境与运行环境不同),开发时在 linux 服务器进行程序编译,而编译后程序需要传到嵌入式 arm 开发板上面去运行,一个程序在开发或者调试过程中,就需要多次拷贝传送操作,效率较低。
有了 nfs 服务,则直接把 linux 服务端共享目录映射到客户端本地,linux 服务端对程序进行编译,编译后的可执行文件放在 nfs 共享目录,在嵌入式 arm 开发板上访问 nfs 共享目录,则直接可以运行与调试程序。
如下为 ubuntu 安装 nfs server 的步骤,以及使用过程中的一些注意事项。
安装步骤
1 安装 nfs server
命令如下
sudo apt-get install nfs-kernel-server -y
2 创建 nfs 共享目录
强烈建议 nfs 共享目录也放在个人 samba 目录下,方便多用户时管理的同时,也方便运行生成文件的查看。
mkdir ~/samba/nfs
3 修改 nfs 配置文件
以 kyo 为例,其中 uid 与 gid 可在登录对应用户后,通过 id 命令查看
配置文件 /etc/exports,优先备份
sudo cp /etc/exports /etc/exports.bak
修改需要 root 权限,配置文件中增加如下配置信息
/home/kyo/samba/nfs *(rw,sync,all_squash,anonuid=1000,anongid=1000)
配置说明:
rw:可读写权限
sync:资料同步写入内存和硬盘中
all_squash:共享文件的用户映射为对应的 uid 与 gid
强烈建议配置时配置对应用户 uid 与 gid,原因如下:
1. 多用户使用时可独立管理各自 nfs 共享目录,避免冲突
2. 挂载 nfs 时指定用户,可避免板端操作时生成文件权限问题
如 nfs server 配置为 no_root_squash 时,nfs 默认以 root 用户挂载,挂载后创建文件或程序运行生成的文件,也是 root 权限,服务端或 windows 查看时会遇到权限问题,指定用户后,则可避免此问题的发生。
4 安装完成,重启服务
命令如下
sudo service nfs-kernel-server restart
5 nfs 测试与使用说明
nfs 服务测试
安装完成后可直接在 linux 服务器端进行本地挂载测试
# nfs 目录下创建 nfs-files 测试文件
touch /home/kyo/samba/nfs/nfs-files
# /tmp 目录下 创建 test-nfs 临时挂载目录
mkdir /tmp/test-nfs
# 执行挂载命令
sudo mount -o nolock 192.168.1.10:/home/kyo/samba/nfs /tmp/test-nfs
# 查看 /tmp/test-nfs 目录,即可看到 nfs-files
ls /tmp/test-nfs
# 卸载目录
sudo umount /tmp/test-nfs
使用命令说明
-o nolock:指示NFS客户端不使用锁定文件系统的机制
192.168.1.10:nfs 服务器 ip 地址
/home/kyo/samba/nfs:此目录为 nfs 服务器端对应共享目录绝对路径,与 ip 地址以冒号相连
/tmp/test-nfs:此目录为本地挂载的绝对路径,开发时对应开发板端操作目录绝对路径
6 完成
注意事项
1. 使用后及时卸载
开发板如果在 nfs 挂载时进行 ip 地址修改,则在访问 nfs 共享目录时会发生阻塞现象,一般要重启解决,所以在使用完成后或网络修改前,及时卸载 nfs 。
2. 板端创建单独的 nfs 共享目录
与其他挂载类似,nfs 在挂载到目录后,原目录内容不可见,只能看到共享目录内容。
所以在使用中,一般创建单独 nfs 挂载路径,也避免其他应用或程序误写到共享目录。
3. nfs 权限问题
由于 nfs 服务本身不具备用户身份验证功能,这意味着多用户时,你也可以直接挂载其他用户目录使用!使用时 nfs 目录尽量只放编译后的运行程序,避免放一些源码等重要信息。
结束
nfs 的使用,在嵌入式开发中,是不可获取的一部分,如上为在 nfs 的基本使用方式,以及使用过程中遇到的一些问题,另外 nfs 也可以直接作为根文件系统启动,至于使用方式用户可自行探索。