概述
0 前言
NFS文件共享无论是在嵌入式开发还是普通办公中都非常实用,本文介绍如何在Ubuntu中搭建NFS服务器。经过测试,本文方法适用于的Ubuntu版本有14.04、16.04、18.04、20.04、22.04。
1 安装
sudo apt-get install -y nfs-kernel-server
注:安装上述服务后,会自动生成“/etc/exports”,第2节就是在该文件中添加共享目录的。
2 配置
2.1 共享目录
添加要共享的目录:
/home/liyihai/ *(insecure,rw,sync,no_root_squash,no_subtree_check)
# @file: /etct/exports
各参数的含义如下:
- /home/liyihai:共享目录,根据实际目录修改;
- *:允许所有的网络段访问;
- rw:访问者具有可读写权限;
- sync:资料同步写入内存和硬盘;
- async: 资料会先暂存于内存中,而非直接写入硬盘;[8]
- root_squash:在登入NFS主机使用分享目录的使用者如果是root时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的UID与GID都会变成nobody那个系统账号的身份;[8]
- no_root_squash:nfs共享目录访问者具有root权限;
- subtree_check(默认) :若输出目录是一个子目录,则nfs服务器将检查其父目录的权限[4];
- no_subtree_check :即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率[4];
- insecure:允许NFS客户端不使用保留的端口,设置这个可以避免部分客户端挂载失败。[9]
2.2 重启服务
# Ubuntu10.04
sudo /etc/init.d/portmap restart
# > Ubuntu10.4
sudo /etc/init.d/rpcbind restart
sudo /etc/init.d/nfs-kernel-server restart
# Ubuntu18.04.5之后废弃了上面/etc/init.d/nfs-kernel-server,改用下面命令
sudo service nfs-kernel-server restart # [6]
2.3 协议版本
NFS协议目前已经发展到了4.x版本,它引入了诸如文件锁[12]等新功能,对于部分应用场景可能会有影响,可通过nfsstat命令查看其版本信息[11]:
![](https://file2.kaopuke.com:8081/files_image/2023060717/25371b7cad8f497caf86baeb3ddfeb5d.png)
Ubuntu18.04默认使用的是NFSv3、NFSv4,而有时嵌入式开发板的系统只支持NFSv2,可通过下面配置增加NFSv2的支持[14][15],否则开发板将会无法挂载NFS文件系统:
+# Support Tiny4412 NFS
+RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
# @file: /etc/default/nfs-kernel-server
配置完毕根据第2.2小节方法重启NFS服务即可生效。
此外,如果不想改服务端配置,客户端在挂载NFS时也可通过“nfsvers”或“vers”参数指定协议版本:
mount -t nfs -o nfsvers=3 <server_ip>:/home/liyihai /mnt # [17]
# or
mount -t nfs -o vers=4,minorversion=1 <server_ip>:/home/liyihai /mnt # [16]
例如编译NFSv4上的Android系统源码会遇到失败问题,改用NFSv3可规避[13]。
3 挂载
客户端可通过下面命令查看服务器共享的目录列表:
showmount -e <server_ip> # 仅显示已被NFS客户端加载的目录[18]
showmount -d <server_ip> # 显示NFS服务器上所有的共享目录[18]
3.1 PC
(1)挂载本地NFS
sudo mount -t nfs localhost:/home/liyihai/ /mnt/
(2)挂载远程NFS
sudo mount -t nfs <server_ip>:/home/liyihai/ /mnt/
3.2 开发板
嵌入式开发板挂载NFS文件系统和PC是类似的,但有些需要注意的地方:
(1)文件锁
嵌入式开发板挂载NFS文件系统通常需要加“-o nolock”来关闭文件锁,否则会挂载失败[10]:
mount -t nfs -o nolock <server_ip>:/home/liyihai/ <board_dir>
(2)协议版本
曾遇到Tiny4412挂载NFS文件系统失败问题,需根据第2.3小节方法增加NFSv2的支持成解决问题。
4 TODO
(1)软链接目录无法共享,需要寻找解决方法;
参考资料
[1]Ubuntu 14.04下NFS安装配置
[2]mount.nfs: requested NFS version or transport protocol is not supported
[3]NFS /etc/exports参数解释
[4]NFS服务基本配置及使用
[5]NFS安装配置及常见问题
[6]ubuntu升级18.04之后nfs出错
[7]Ubuntu18.04LTS搭建NFS及配置详解(修改完善)
[8]*(rw,async,no_root_squash)
[9]nfs挂载出错处理
[10]目标板挂载NFS时 需要nolock参数
[11]查看linux nfs版本
[12]Manage NFS and NIS > NFS and file locking
[13][Loire] [Kugo] Android 9 build does not finish: dex2oat.cc:3118 Failed to process profile file #506
[14]Ubuntu18.10的64位系统,开发板不能挂载NFS
[15]Ubuntu18.04挂载nfs失败....
[16]NFS共享,linux客户端如何挂载nfs v4.1协议版本
[17]nfs挂载不上,指定版本挂载
[18]showmount命令
最后
以上就是贪玩大山为你收集整理的Linux搭建NFS服务0 前言1 安装2 配置3 挂载4 TODO参考资料的全部内容,希望文章能够帮你解决Linux搭建NFS服务0 前言1 安装2 配置3 挂载4 TODO参考资料所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复