NFS网络文件系统
作者:互联网
1. NFS网络文件系统
它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件,PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样.
nfs是运行在应用层的协议,其监听于2049/tcp和2049/udp套接字上
nfs是基于rpc来实现网络文件系统共享的.
1.1 NFS通讯过程
- 1.服务器端启动RPC服务,并开启111端口
- 2.服务器端启动NFS-server服务,并向RPC注册端口信息
- 3.客户端启动RPC服务,并向服务端的RPC服务请求服务端NFS端口
- 4.服务端的RPC服务反馈NFS端口信息给客户端
- 5.客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据传输
1.2 NFS相关文件
/etc/exports文件
NFS主要配置文件
<共享目录> [客户端1(选项1,选项2,...)] [客户端2(选项1,选项2,...)]
## 选项参数
ro //只读
rw //读写
root_squash //当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
no_root_squash //当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
all_squash //无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
sync //同时将数据写入到内存与硬盘中,保证不丢失数据
async //优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
anonuid //将远程访问的所有用户都映射为匿名用户,并指定该匿名用户为本地用户帐户(UID=xxx)
anongid //将远程访问的所有用户组都映射为匿名用户组,并指定该匿名用户组为本地用户组(GID=xxx)
secure //限制客户端只能从小于1024的TCP/IP端口连接NFS服务器(默认设置)
insecure //允许客户端从大于1024的TCP/IP端口连接NFS服务器
wdelay //检查是否有相关的写操作,如果有则这些写操作一起执行,可提高效率(默认设置)
no_wdelay //若有写操作则立即执行,应与sync配置使用
subtree_check //若输出目录是一个子目录,则NFS服务器将检查其父目录的权限(默认设置)
no_subtree_check //即使输出目录是一个子目录,NFS服务亦不检查其父目录的权限,可提高效率
nohide //若将一个目录挂载到另一个目录之上,则原来的目录通常就被隐藏起来或看起来像空的一样。要禁用这种行为,需启用hide选项
/usr/bin/exportfs
用于服务端维护NFS分享资源,可以重新加载/etc/exports文件的配置
exportfs
-a //输出在/etc/exports文件中所设置的所有目录
-r //重新读取/etc/exports文件中的设置,并使其立即生效,无需重启服务
-u //停止输出某一目录
-v //在输出目录时将目录显示到屏幕上
/var/lib/nfs/etab
主要记录了 NFS 所分享出来的目录的完整权限设定值
##例子
/nfs/upload 172.16.104.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
/usr/sbin/showmount
用于客户端查看服务端共享的NFS目录资源
//语法:showmount [选项] [NFS服务器名称或地址]
//常用的选项有:
-a //显示指定NFS服务器的所有客户端主机及其所连接的目录
-d //显示指定的NFS服务器中已被客户端连接的所有输出目录
-e //显示指定的NFS服务器上所有输出的共享目录
2. RPC远程过程调用协议
RPC(Remote Procedure Call Protocol),远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务
RPC就是用来统一管理NFS端口的服务,并且统一对外的端口是111,RPC会记录NFS端口的信息,如此我们就能够通过RPC实现服务端和客户端沟通端口信息。
2.1 NFS服务端相关进程
idmapd //实现用户帐号的集中映射,把所有的帐号都映射为NFSNOBODY,但是在访问时却能以本地用户的身份去访问
mountd //用于验证客户端是否在允许访问此NFS文件系统的客户端列表中,在则允许访问,否则拒绝访问
//mountd的服务端口是随机的,由rpc服务(portmapper)提供随机端口号
nfsd //nfs的守护进程,监听在2049/tcp和2049/udp端口上
//不负责文件存储(由NFS服务器本地内核负责调度存储),用于理解客户端发起的rpc请求,并将其转交给本地内核,而后存储在指定的文件系统上
portmapper //NFS服务器的rpc服务,其监听于111/TCP和111/UDP套接字上,用于管理远程过程调用(RPC)
3.搭建NFS服务
3.1 安装nfs-util,rpcbind
- nfs-utils
提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其他相关 documents 与说明文件、执行文件等的软件!这个就是 NFS 服务所需要的主要软件。
- rpcbind
RPC主程序,提供port的映射(mapping)
## 客户端与服务端都需要下载这两个软件
yum -y install rpcbind nfs-utils
3.2 启动服务
- 服务端
在启动NFS SERVER之前,首先要启动RPC服务(即portmap服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行systemctl reload nfs或exportfs –rv即可使修改的/etc/exports生效
[root@vm3 upload]# systemctl start rpcbind
[root@vm3 upload]# systemctl enable rpcbind
[root@vm3 upload]# systemctl status rpcbind
● rpcbind.service - RPC Bind
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset:>
Active: active (running) since Sat 2020-10-10 09:59:14 CST; 1h 28min ago
Docs: man:rpcbind(8)
Main PID: 38185 (rpcbind)
[root@vm3 upload]# systemctl start nfs-server
[root@vm3 upload]# systemctl enable nfs-server
[root@vm3 upload]# systemctl status nfs-server
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor pres>
Drop-In: /run/systemd/generator/nfs-server.service.d
└─order-with-mounts.conf
Active: active (exited) since Sat 2020-10-10 09:59:16 CST; 1h 30min ago
Main PID: 38215 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 12322)
Memory: 0B
CGroup: /system.slice/nfs-server.service
- 客户端
[root@vm2 upload]# systemctl start rpcbind
[root@vm2 upload]# systemctl enable rpcbind
[root@vm2 upload]# systemctl status rpcbind
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-10-12 16:09:26 CST; 1h 34min ago
Main PID: 1439 (rpcbind)
CGroup: /system.slice/rpcbind.service
└─1439 /sbin/rpcbind -w
3.3 服务端编辑配置文件,加载配置
- 创建nfs共目录
[root@vm3 /]# mkdir -p nfs/{shared,upload}
[root@vm3 nfs]# chmod 777 shared upload
[root@vm3 /]# tree .
.
└── nfs
├── shared
└── upload
- /etc/exports
[root@vm3 upload]# vim /etc/exports
/nfs/shared *(rw,no_root_squash,all_squash)
/nfs/upload 172.16.104.0/24(rw,anonuid=1001,anongid=1001,all_squash)
- 加载配置文件
[root@vm3 upload]# systemctl reload nfs-server
### 或者
[root@vm3 upload]# exportfs -rv
exporting 172.16.104.0/24:/nfs/upload
exporting *:/nfs/shared
3.4 客户端挂载配置
- showmount 查看服务器共享文件
[root@vm2 upload]# showmount -e 172.16.104.132
Export list for 172.16.104.132:
/nfs/shared *
/nfs/upload 172.16.104.0/24
- 挂载共享目录
[root@vm2 mnt]# mkdir shared upload
[root@vm2 mnt]# vi /etc/fstab
172.16.104.132:/nfs/shared /mnt/shared nfs defaults,_netdev 0 0
172.16.104.132:/nfs/upload /mnt/upload nfs defaults,_netdev 0 0
[root@vm2 mnt]# mount -a
- 查看挂载状态
[root@vm2 mnt]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 979M 0 979M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /dev/shm
tmpfs tmpfs 991M 9.5M 981M 1% /run
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 1.4G 16G 9% /
/dev/sda1 xfs 1014M 137M 878M 14% /boot
tmpfs tmpfs 199M 0 199M 0% /run/user/0
172.16.104.132:/nfs/shared nfs4 17G 2.0G 16G 12% /mnt/shared
172.16.104.132:/nfs/upload nfs4 17G 2.0G 16G 12% /mnt/upload
3.5 测试效果
- 1
##服务端共享目录下创建文件
[root@vm3 nfs]# cd shared/
[root@vm3 shared]# touch abc
[root@vm3 shared]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 10 11:53 abc
[root@vm3 shared]# cd ..
[root@vm3 nfs]# cd upload/
[root@vm3 upload]#
[root@vm3 upload]# touch abc
[root@vm3 upload]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 10 11:54 abc
[root@vm3 nfs]# tree .
.
├── shared
│ └── abc
└── upload
└── abc
##查看客户端共享目录
[root@vm2 mnt]# cd shared/
[root@vm2 shared]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 10 11:53 abc
[root@vm2 shared]# cd ../upload/
[root@vm2 upload]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 10 11:54 abc
- 2
## 客户端上传文件到共享目录
[root@vm2 upload]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 10 11:54 abc
[root@vm2 upload]# touch vm2
[root@vm2 upload]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 10 11:54 abc
-rw-r--r--. 1 1001 1001 0 Oct 10 11:58 vm2
##客户端用户映射为anonuid=1001,anongid=1001
##查看服务端共享目录
[root@vm3 upload]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 10 11:54 abc
-rw-r--r--. 1 wisan wisan 0 Oct 10 11:58 vm2
[root@vm3 upload]# id wisan
uid=1001(wisan) gid=1001(wisan) groups=1001(wisan)
标签:upload,文件系统,网络,NFS,nfs,root,vm3,客户端 来源: https://www.cnblogs.com/fyjpeng/p/13806772.html