树莓派-nfs挂载

Posted by 周思进 on June 6, 2021

linux 服务器之间进行文件传输共享,基本都会使用到 nfs 服务,下面以树莓派和 Mac 作为服务器,分别说下具体的部署操作。

一、树莓派 NFS 服务

安装相关软件之前先更新软件包信息

$sudo apt-get update
$sudo apt-get upgrade

上述两个命令基本是常用命令,可以直接在 ~/.bashrc 里搞个别名
alias apt-up=’sudo apt-get update;sudo apt-get upgrade’

安装 nfs 软件包,如果不清楚安装的包名,可以先进行搜索

$apt-cache search nfs

可以查看到如下两个 nfs 相关的软件包,都进行安装即可
nfs-common - NFS support files common to client and server
nfs-kernel-server - support for NFS kernel server

$sudo apt-get install nfs-kernel-server nfs-common

安装完之后,就是进行服务器配置了,对应的配置表是 /etc/exports

$sudo vim /etc/exports

增加如下语句

/home/pi/nfs *(rw,sync,no_subtree_check,all_squash)

/home/pi/nfs :要挂载的 nfs 路径
* : 指所有的 IP 都可访问,可以指定具体 ip 或者网段
rw : 可读可写
all_squash:映射成匿名用户,增加安全性
no_subtree_check : 禁用子树检查

重启 nfs 服务
$ sudo service nfs-kernel-server restart

可以查看端口看 nfs 是否正常启动了

$sudo netstat -lnp | grep 2049
2049 是 nfs 的默认服务端口,如果服务没有正常启用,需要检查检查 rpcbind 服务是否正常启用,nfs 服务还依赖于 rpcbind 服务。

在客户端进行 mount 挂载操作
$ sudo mount -t nfs your_server_ip:/home/pi/nfs/ /nfs/

挂载成功,但你会发现,实际只有读操作权限,没有写操作权限。 这是因为 mount 挂载过来的用户是匿名用户 nfsnobody,而实际挂载的目录用户是 pi,最简单的解决办法就是修改目录其他用户的权限,增加可写权限,但这样就所有用户都可写了,也可以修改 /etc/exports 配置表,增加 anonuid 和 anongid 设置,如下

/home/pi/nfs *(rw,sync,no_subtree_check,all_squash,anonuid=1000,anongid=1000)

这两个值可以通过 id pi 命令获取,对应 uid 和 gid 值,这样匿名用户就拥有 pi 用户的权限,重启服务挂载后就可正常写入了。

如果是 Mac 电脑进行 nfs 挂载,则需要修改配置文件增加 insecure 选项。

二、Mac NFS 服务

如果是 Mac 做 NFS 服务器,也同样是修改 /etc/exports 文件,只是配置跟 linux 不一样,同样都可以通过命令 man 5 exports 查看帮助手册,示例配置如下:

/nfs -alldirs -mapall=501 -network 192.168.2.0 -mask 255.255.255.0

/nfs : 要挂载的本机目录
-alldirs : 挂载该目录下的所有子目录
-mapall=501 : 使用用户名 id 为501的权限,跟前面一样通过 id 命令获取
-network 192.168.2.0 -mask 255.255.255.0: 允许连接的网络段