NFS安装
首先说一下,现在已经安装好了,没想到这么简单,我已流下了激动的泪水。必须来一首歌高兴高兴: v神的Trippy Love
nfs
:作用是通过网络挂载远程分区到本地使用。以前只知道linux可以随便挂载磁盘,觉得这已经很厉害了,没想到还能远程通过网络挂载。这也算是工作带来的收获吧,因为我就发现工作挂载的那200T磁盘有点奇怪。哈哈
操作环境:一台raspberry pi,一台我的archlinux系统(PS:由于没有网线,也没有路由器的密码,给树莓派配置ip花了老半天,包括使用nmap去找树莓派的ip)
安装
树莓派服务端:
1 | sudo apt-get install nfs-kernel-server #安装nfs |
安装nfs时就已经安装了rpsbind
。rpcbind的作用是使用rpc协议来统一管理nfs端口的服务,并且对外的端口统一为111。
原理:首先当NFS启动后,就会随机的使用一些端口,然后NFS就会向RPC去注册这些端口,RPC就会记录下这些端口,并且RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,那么服务器端的RPC就会将之前记录的NFS端口信息告知客户端。如此客户端就会获取NFS服务器端的端口信息,就会以实际端口进行数据的传输了。
所以rpcbind服务要在nfs服务之前启动
archlinx客户端
1 | pacman -S nfs-utils |
注意到rpcbind已经自动安装且自动启动,否则需要手动安装
配置共享分区
服务端需要配置将要共享的分区/目录
1 | vim /etc/exports |
添加
1 | / 192.168.0.108(rw,sync,no_subtree_check) |
格式为:共享的目录 允许访问的客户端ip(共享目录的权限)
ip与权限之间无空格
启动服务
服务端
先启动 rpsbind
1 | systemctl start rpcbind |
再启动 nfs
1 | systemctl start nfs-server |
可以查看nfs向rpc注册的端口信息
1 | rpcinfo -p localhost |
查看nfs启动进程,并分析其作用
1 | ps -ef |egrep "rpc|nfs" |
1 | root 40 2 0 14:15 ? 00:00:00 [rpciod] |
nfsd
:最主要的NFS服务提供程序,这个daemon主要的功能就是管理客户端是否能够使用服务器文件系统挂载信息,其中还包含判断这个登录用户的ID
rpc.mountd
:这个daemon主要功能则是管理NFS的文件系统。当client端顺利通过rpc.nfsd登入主机后,在它可以使用NFS服务器提供规定文件之前,还会经过文件使用权限的认证程序。它会去读取NFS的配置件/etc/exports来对比客户端的权限,当通过这一关之后,client端也就取得使用NFS文件的权限。
客户端
1 | systemctl start rpcbind |
1 | systemctl start nfs-client.target |
查看nfs服务器共享信息
1 | showmount -e 192.168.0.101 #192.168.0.101为服务器ip |
挂载远程分区
1 | mount -t nfs 192.168.0.101:/ /mnt |
即将远程主机的/
分区挂载到了本地的/mnt
目录下
查看是否挂载成功
1 | df -Th |
1 | Filesystem Type Size Used Avail Use% Mounted on |
好了,大功告成,有点小激动啊,又学到了知识。
但是遇到了一些问题:
如何取消挂载
如果有进程在使用挂载的分区的话,那么我们是无法取消nfs挂载的。所以需要用到fuser
查看挂载的文件被那些进程在使用:
1 | fuser -v -m /mnt |
然后杀掉这些进程
1 | fuser -v -m /mnt -k |
再取消nfs的挂载
1 | umount /mnt |
需要注意的就是取消挂载是指的nfs挂载所在的目录