Linux系统之间的文件共享(NFS)

287 阅读3分钟

一、NFS共享服务

1 NFS简介

NFS(Network File System 网络文件服务),是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。

NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。(远端过程调用:自己没有这种功能,调用别人的功能) NFS 也是 NAS 存储 设备必然支持的一种协议,以完成远程到本地的映射过程。

在 CentOS 7 系统中,需要安装 nfs-utils、rpcbind 软件包来提供 NFS 共享服务,前者用于 NFS 共享发布和访问,后者用于 RPC 支持。手动加载 NFS 共享服务时,应该先启动 rpcbind,再启动 nfs。

NFS的特点:

  • 采用TCP/IP传输网络文件
  • 安全性低
  • 简单易操作
  • 适合局域网环境

2 NFS 原理

image.png

3 NFS软件介绍

软件包 (包括服务器端和客户端):

  • nfs-utils (nfs端口号 2049/tcp)
  • rpcbind (RPC端口号 111/tcp)

相关软件包(可不安装):tcp_wappers

NFS服务主要进程:

  • rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
  • rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
  • rpc.lockd 非必要,管理文件锁,避免同时写出错
  • rpc.statd 非必要,检查文件一致性,可修复文件

二 NFS共享存储服务配置的相关步骤

2.1 服务器端

#关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

#2.安装软件包 
[root@localhost ~]# yum install nfs-utils rpcbind -y

#3新建共享目录,在目录内创建文件  
[root@localhost ~]# mkdir /share  
[root@localhost ~]# touch /share/f1.txt

#4 修改权限
[root@localhost ~]# chmod -R 777 /share/

#5 编辑nfs配置文件 
[root@localhost ~]# vim /etc/exports 
/share  192.168.72.0/24

#6 #.启动两个服务,查看详细的nfs信息  

[root@localhost ~]# systemctl start nfs  
[root@localhost ~]# systemctl start rpcbind  
[root@localhost ~]# showmount -e         //查看本机发布的NFS共享目录  Export list for localhost.localdomain:  
/share 192.168.72.0/24  
[root@localhost ~]# exportfs -v       //查看NFS共享目录的详细信息  
/share     192.168.72.0/24(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash

2.2 客户端

2、客户端设置:

 #1.检查nfs-utils和rpcbind两个软件是否已安装。
 [root@localhost ~]# rpm -q rpcbind
 rpcbind-0.2.0-42.el7.x86_64
 [root@localhost ~]# rpm -q nfs-utils
 nfs-utils-1.3.0-0.48.el7.x86_64
 ​
 #2.将服务端的共享目录/share,挂载到本地的/mnt目录下。
 [root@localhost ~]# mount  192.168.72.10:/share  /mnt
 [root@localhost ~]# df -Th
 文件系统                类型      容量  已用  可用 已用% 挂载点
 /dev/mapper/centos-root xfs        17G  5.0G   13G   29% /
 devtmpfs                devtmpfs  897M     0  897M    0% /dev
 tmpfs                   tmpfs     912M     0  912M    0% /dev/shm
 tmpfs                   tmpfs     912M  9.1M  903M    1% /run
 tmpfs                   tmpfs     912M     0  912M    0% /sys/fs/cgroup
 /dev/sda1               xfs      1014M  179M  836M   18% /boot
 tmpfs                   tmpfs     183M   12K  183M    1% /run/user/42
 tmpfs                   tmpfs     183M     0  183M    0% /run/user/0
 192.168.72.10:/share    nfs4       10G  4.0G  6.1G   40% /mnt
 ​
 #3.查看共享目录内的文件
 [root@localhost ~]# ls /mnt
 f1.txt

2.3 测试在服务端的共享目录中新建文件f2,观察客户端能否查看到

 #1.服务端,在/share目录中新建文件f2
 [root@localhost ~]# cd /share
 [root@localhost share]# touch f2
 [root@localhost share]# ls
 f1.txt  f2
 ​
 #2.客户端,查看共享目录挂载点内的文件
 [root@localhost ]# ls /mnt
 f1.txt  f2

附加福利

参数作用
ro只读
rw读写
sync同步写入。同时将数据写入到内存与硬盘中,保证不丢失数据
async异步写入。优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
root_squash当NFS客户端以root访问时,映射为NFS服务器的匿名用户
no_root_quash当NFS客户端以root访问时,映射为NFS服务器的root用
all_squash无论NFS客户端使用什么身份登录,都映射为NFS服务器的匿名用户
no_all_squash(默认)访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组;
anonuid=< UID>指定匿名访问用户的本地用户UID,默认为nfsnobody(65534)
anongid=< GID>指定匿名访问用户的本地用户组GID,默认为nfsnobody(65534)