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挂载所在的目录