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
2
3
4
5
6
7
8
9
10
11
12
13
14
root        40     2  0 14:15 ?        00:00:00 [rpciod]
root 45 2 0 14:15 ? 00:00:00 [nfsiod]
root 964 1 0 14:26 ? 00:00:00 /sbin/rpcbind -f -w
root 1172 1 0 14:26 ? 00:00:00 /usr/sbin/rpc.idmapd
root 1173 1 0 14:26 ? 00:00:00 /usr/sbin/rpc.mountd --manage-gids
root 1180 2 0 14:26 ? 00:00:00 [nfsd]
root 1181 2 0 14:26 ? 00:00:00 [nfsd]
root 1182 2 0 14:26 ? 00:00:00 [nfsd]
root 1183 2 0 14:26 ? 00:00:00 [nfsd]
root 1184 2 0 14:26 ? 00:00:00 [nfsd]
root 1185 2 0 14:26 ? 00:00:00 [nfsd]
root 1186 2 0 14:26 ? 00:00:00 [nfsd]
root 1187 2 0 14:26 ? 00:00:00 [nfsd]
pi 1731 678 0 15:39 pts/0 00:00:00 grep -E --color=auto rpc|nfs

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Filesystem      Type      Size  Used Avail Use% Mounted on
dev devtmpfs 3.9G 0 3.9G 0% /dev
run tmpfs 3.9G 1.2M 3.9G 1% /run
/dev/sdb3 ext4 30G 11G 18G 37% /
tmpfs tmpfs 3.9G 229M 3.7G 6% /dev/shm
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
tmpfs tmpfs 3.9G 134M 3.7G 4% /tmp
/dev/sdb4 ext4 151G 24G 120G 17% /home
overlaid overlay 3.9G 134M 3.7G 4% /tmp/asd-root/srv/http
overlaid overlay 3.9G 134M 3.7G 4% /tmp/asd-narcissus/home/narcissus/.cache
overlaid overlay 3.9G 134M 3.7G 4% /tmp/asd-narcissus/home/narcissus/.config/GIMP/2.10/tmp
tmpfs tmpfs 784M 38M 747M 5% /run/user/1000
overlaid overlay 784M 38M 747M 5% /run/user/1000/narcissus-opera
overlaid overlay 784M 38M 747M 5% /run/user/1000/narcissus-google-chrome
overlaid overlay 784M 38M 747M 5% /run/user/1000/narcissus-firefox-n06bwypx.default
overlaid overlay 784M 38M 747M 5% /run/user/1000/narcissus-chromium
overlaid overlay 784M 38M 747M 5% /run/user/1000/narcissus-google-chrome-beta
overlaid overlay 784M 38M 747M 5% /run/user/1000/narcissus-epiphany
overlaid overlay 784M 38M 747M 5% /run/user/1000/narcissus-google-chrome-unstable
192.168.0.101:/ nfs4 15G 1.8G 12G 14% /mnt

好了,大功告成,有点小激动啊,又学到了知识。


但是遇到了一些问题:

如何取消挂载

如果有进程在使用挂载的分区的话,那么我们是无法取消nfs挂载的。所以需要用到fuser

查看挂载的文件被那些进程在使用:

1
fuser -v -m /mnt

然后杀掉这些进程

1
fuser -v -m /mnt -k

再取消nfs的挂载

1
umount /mnt

需要注意的就是取消挂载是指的nfs挂载所在的目录