NFS(Network File System,网络文件存储系统)最早是由 Sun 公司发展出来的,也是 FreeBSD 支持的文件系统中的一个,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。通过 NFS,我们本地 NFS 的客户端应用可以透明地读写位于服务端 NFS 服务器上的文件,就像访问本地文件一样方便。简单的理解,NFS 就是可以通过网络,让不同的主机、不同的操作系统可以共享存储的服务。
NFS 跟其他文件共享协议一样,也是采用了 C/S 架构。但是,NFS 只提供了基本的文件处理功能,而不提供任何 TCP/IP 数据传输功能。它需要借助 RPC(Remote Procedure Call,远程过程调用) 协议才能实现 TCP/IP 数据传输功能。
NFS 在文件传送或信息传送过程中依赖于 RPC(Remote Procedure Call,远程过程调用) 协议。 NFS 的各项功能都必须要向 RPC 来注册,如此一来 RPC 才能了解 NFS 这个服务的各项功能 Port、PID、NFS 在服务器所监听的 IP 等,而客户端才能够透过 RPC 的询问找到正确对应的端口,所以,NFS 必须要有 RPC 存在时才能成功的提供服务,简单的理解二者关系:NFS是 一个文件存储系统,而 RPC 是负责信息的传输。
服务端
IP:192.168.136.128
系统版本:
[root@localhost 桌面]# nkvers
############## Kylin Linux Version #################
Release:
Kylin Linux Advanced Server release V10 (Sword)
Kernel:
4.19.90-24.4.v2101.ky10.x86_64
Build:
Kylin Linux Advanced Server
release V10 (SP2) /(Sword)-x86_64-Build09/20210524
#################################################
客户端
IP:192.168.136.130
系统版本:Kylin-Desktop-V10-SP1-2107-x86_64
通过上边简短的介绍,我们知道 NFS 服务需要依赖 RPC 服务,所以这里 NFS 服务端需要安装 rpcbind
和 nfs-utils
。
[root@localhost 桌面]# yum install -y rpcbind nfs-utils
[root@localhost 桌面]#
[root@localhost 桌面]# systemctl start rpcbind.service
[root@localhost 桌面]#
[root@localhost 桌面]# systemctl enable rpcbind.service
[root@localhost 桌面]#
[root@localhost 桌面]# systemctl status rpcbind.service
● rpcbind.service - RPC Bind
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-12-22 13:32:58 CST; 7h ago
Docs: man:rpcbind(8)
Main PID: 812 (rpcbind)
Tasks: 1
Memory: 604.0K
CGroup: /system.slice/rpcbind.service
└─812 /usr/bin/rpcbind -w -f
12月 22 13:32:58 localhost.localdomain systemd[1]: Starting RPC Bind...
12月 22 13:32:58 localhost.localdomain systemd[1]: Started RPC Bind.
[root@localhost 桌面]#
[root@localhost 桌面]# systemctl start nfs.service
[root@localhost 桌面]#
[root@localhost 桌面]# systemctl enable nfs.service
[root@localhost 桌面]#
[root@localhost 桌面]#
[root@localhost 桌面]# systemctl status nfs.service
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
Active: active (exited) since Thu 2022-12-22 21:17:36 CST; 1min 57s ago
Main PID: 1802 (code=exited, status=0/SUCCESS)
Tasks: 0
Memory: 0B
CGroup: /system.slice/nfs-server.service
12月 22 21:17:35 localhost.localdomain systemd[1]: Starting NFS server and services...
12月 22 21:17:36 localhost.localdomain systemd[1]: Started NFS server and services.
NFS所需服务有:rpc-bind、nfs、mountd 。
[root@localhost 桌面]# firewall-cmd --zone=public --add-service=rpc-bind --permanent
success
[root@localhost 桌面]# firewall-cmd --zone=public --add-service=nfs --permanent
success
[root@localhost 桌面]# firewall-cmd --zone=public --add-service=mountd --permanent
success
[root@localhost 桌面]# firewall-cmd --reload
success
[root@localhost 桌面]#
[root@localhost 桌面]# firewall-cmd --zone=public --list-services
cockpit dhcpv6-client mdns mountd nfs rpc-bind ssh
[root@localhost 桌面]#
#创建共享目录,并将其权限设置成777
[root@localhost 桌面]# mkdir /data
[root@localhost 桌面]# chmod -R 777 /data
[root@localhost 桌面]#
vim /etc/exports
/data 192.168.136.0/24(rw,sync)
注意:IP地址与权限之间没有空格。
配置说明:
格式: 共享目录的路径 允许访问的NFS客户端(共享权限参数)
如上,共享目录为 /data,允许访问的客户端为 192.168.136.0/24 网段,读写权限
这里用于设置共享权限的参数有很多,下面列出一些常见的:
参数 | 说明 |
---|---|
ro | 只读 |
rw | 读写 |
sync | 同时将数据写入到内存与硬盘中,保证不丢失数据 |
async | 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 |
root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户 |
no_root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员 |
all_squash | 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户 |
如果修改了 NFS 配置文件,我们可以通过以下命令直接使新的配置文件生效而不用中断服务。
[root@localhost 桌面]# systemctl reload nfs
[root@localhost 桌面]#
或者
[root@localhost 桌面]# exportfs -rv
[root@localhost 桌面]#
kylin@kylin-vm:~/桌面$ sudo apt install nfs-common
kylin@kylin-vm:~/桌面$
kylin@kylin-vm:~/桌面$ showmount -e 192.168.136.128
Export list for 192.168.136.128:
/data 192.168.136.0/24
kylin@kylin-vm:~/桌面$
showmount 命令:
参数 | 说明 |
---|---|
-e | 显示NFS服务器的共享列表 |
-a | 显示本机挂载的文件资源的情况NFS资源的情况 |
-v | 显示版本号 |
#创建挂载点
kylin@kylin-vm:~/桌面$ sudo mkdir /share
[sudo] kylin 的密码:
kylin@kylin-vm:~/桌面$
#挂载共享目录到本地
kylin@kylin-vm:~/桌面$ sudo mount -t nfs 192.168.136.128:/data /share
kylin@kylin-vm:~/桌面$
#查看挂载结果
kylin@kylin-vm:~/桌面$ df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
udev devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 391M 3.0M 388M 1% /run
/dev/sda5 ext4 23G 16G 6.3G 71% /
tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda1 ext4 976M 105M 804M 12% /boot
/dev/sda7 ext4 16G 2.5G 12G 18% /data
/dev/loop0 squashfs 173M 173M 0 100% /run/wine
tmpfs tmpfs 391M 44K 391M 1% /run/user/1000
192.168.136.128:/data nfs4 66G 9.7G 56G 15% /share
kylin@kylin-vm:~/桌面$
编辑 /etc/fstab ,在末尾加上下面的内容。
sudo vim /etc/fstab
192.168.136.128:/data /share nfs defaults 0 0