Linux网络服务之NFS

151 阅读3分钟

网络文件共享服务

NFS简介

NFS:Network File System 网络文件系统,基于内核的文件系统。Sun 公司开发,通过使用 NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol 远程过程调用)实现。

RPC采用C/S模式,客户机请求程序调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

NFS特点

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

NFS优势

节省本地存储空间,将常用的数据如:/home 目录,存放在NFS服务器上且可以通过网络访问,将减少本地磁盘的使用率。

NFS软件介绍

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

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

NFS服务主要进程:

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

配置文件

文件位置:/etc/exports

格式:

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

NFS 共享存储服务实验

1.服务端配置

 #1.关闭防火墙和selinux
 [root@localhost ~]# systemctl stop firewalld
 [root@localhost ~]# setenforce 0
 setenforce: SELinux is disabled
 
 #2.安装nfs-utils和rpcbind软件包
 [root@localhost ~]# yum install nfs-utils.x86_64 -y
 
 #3.新建共享目录,在目录内创建文件
 [root@localhost ~]# mkdir km
 
 #4.编辑nfs配置文件
 [root@localhost ~]# vim /etc/exports
 /km *(rw,all_squash,anonuid=1003,anongid=1003)
 
 #5.启动服务
 [root@localhost ~]# systemctl start nfs
 [root@localhost ~]# systemctl start rpcbind

image.png 2.客户端配置

 [root@localhost ~]# yum install nfs-utils.x86_64 -y
 
 [root@localhost ~]# showmount -e 192.168.10.90
 [root@localhost ~]# vim /etc/fstab
//末行加入如下代码

  192.168.10.90:/km  /mnt  nfs   _netdev  0   0
 
 [root@localhost ~]# mount -a  //重新挂载

image.png 3.服务端新建文件后去客户端查看是否能看到

服务端
[root@localhost ~]# cd /mnt
[root@localhost ~]# touch 1.txt
[root@localhost ~]# ll
1.txt
客户端
[root@localhost ~]# useradd -u 1003 km
[root@localhost ~]# cd km
[root@localhost km]# ls
1.txt