移植NFS到ARM Linux上做服务器端
-
前言
将ARM做服务器是因为需要与另外一个系统进行对接,这里用VM里的Ubuntu做客户端进行测试,此文章只讲具体的移植过程,不对NFS的理论知识做讲解。
参考:http://www.cnitblog.com/gouzhuang/archive/2010/03/23/nfs_utils.html
-
硬件平台
ARM 32位系统
-
准备工作
可以去网上搜索下载
portmap:https://download.****.net/download/qq_26601681/12254543
nfs-utils:https://download.****.net/download/qq_26601681/12254537
-
交叉编译
portmap:
将下载好的portmap解压后进入目录,执行以下命令
make clean
make CC=arm-linux--gcc (根据自己的交叉编译链更改,根据情况具体到所在目录)
编译后如图所示:
nfs-utils:
我下载的是2.4.3的版本,参考里面的是1.1.1版本
1.1.1版本:需要在nfs-utils-1.1.1/utils/exportfs/exportfs.c文件中添加#include <sys/stat.h>文件
依次执行命令:./configure --prefix={指定的安装目录} CC={指定的交叉编译工具} --disable-nfsv4 --disable-gss --disable-uuid --disable-mount --without-tcp-wrappers --host=arm-linux
make
make install
安装后内容如图:
2.4.3版本
依次执行命令:./configure --prefix={指定的安装目录} CC={指定的交叉编译工具} --disable-nfsv4 --disable-gss --disable-uuid --disable-mount --without-tcp-wrappers --disable-tirpc --host=arm-linux
make
make install
安装后如图
-
板上运行
将portmap文件夹中的portmap,
nfs-utils2.4.3安装目录/sbin下的rpc.statd, rpc.nfsd, rpc.mountd, exportfs
放到板子的/usr/sbin目录下.
在板子的/etc/目录下新建一个exports文件,写入如下
/work 为我共享出去的目录
192.168.1.77为客户端的IP
括号中的:参考https://blog.****.net/u011418530/article/details/89307874
rw表示可读写,ro只读;
sync :同步模式,内存中数据时时写入磁盘;async :不同步,把内存中数据定期写入磁盘中;
no_root_squash :加上这个选项后,root用户就会对共享的目录拥有至高的权限控制,就像是对本机的目录操作一样。不安全,不建议使用;root_squash:和上面的选项对应,root用户对共享目录的权限不高,只有普通用户的权限,即限制了root;all_squash:不管使用NFS的用户是谁,他的身份都会被限定成为一个指定的普通用户身份;
anonuid/anongid :要和root_squash 以及all_squash一同使用,用于指定使用NFS的用户限定后的uid和gid,前提是本机的/etc/passwd中存在这个uid和gid。
fsid=0表示将/work整个目录包装成根目录
-
运行NFS服务器
依次执行 portmap、rpc.statd, rpc.nfsd, rpc.mountd
执行rpcinfo -p 成功运行可以看到
执行./showmount -e 192.168.1.19(此为板子IP),显示如下
-
运行NFS客户端
客户端在虚拟机中运行
采用桥接网络的模式,利用ping命令验证是否能与ARM板通信
依次执行:
sudo apt-get install nfs-kernel-server
sudo systemctl enable rpcbind.service
sudo systemctl start rpcbind.service
sudo mount -t nfs 192.168.1.19:/work /opt/nfs/
即可在虚拟机的/opt/nfs/目录下看到板子的/work目录下的内容:在/work目录下新建test文件夹 /opt/nfs/下能看到同步
-
后续
想写一个开机就启动NFS的shell脚本,对语法不熟悉,如果有会的大佬可以给一个!