NSF服务器原理及应用

(一)NFS工作原理

1.什么是NFS服务器

NFS即Nerwork File System(网络文件系统)的缩写,NFS最大的作用是可以通过网络让不同的机器、不同的平台彼此之间能够共享资源。

2.NFS的挂载原理

NSF服务器原理及应用_第1张图片
如上图所示,我们将NFS服务器设置一个共享目录/home/public,有权访问NFS服务器的NFS客户端就可以将共享目录挂在到自己文件系统的某个挂载点上。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。挂载后,NFS客户端查看磁盘信息命令:#df –h。

NFS服务器和客户端进行网络通讯之前,必须知道对方的对应的端口号才能进行数据传输,这就需要用到RPC(Remote Procedure Call)服务,即远程过程调用服务。

(3)NFS和RPC协同工作

NFS支持的功能有很多,启动不同的功能会启用不同的程序,同时会使用一些端口(小于1024)来传输数据,因此NFS的功能所对应的端口号并不固定。(ps:因为功能程序的启动时间和顺序是不固定的,端口号也是随机分配的,所以NFS服务的功能所对应的端口号也是不固定的。)RPC就是用来统一管理NFS服务器端口的。

启用顺序

  1. 服务器端先启用RPC(portmap,端口映射器)服务,并且对外端口111打开,等待客户端的连接请求。
  2. 服务器端启用NFS服务,这时NFS服务会用到一些端口,同时NFS会向RPC去注册这些端口,RPC就会记录下这些端口信息。
  3. 客户端启用RPC(portmap,端口映射器)服务,并向服务器发起连接请求,服务器端的RPC服务就会将端口信息传给客户端。
  4. 客户端通过获取的端口信息来和服务器端的NFS服务建立连接并进行数据传输。

(二)Ubuntu系统下配置NFS服务

1.查看系统信息的一些常用命令

命令 解释
uname -a 查看内核/操作系统/CPU信息
head -n 1 /etc/issue 查看操作系统版本
cat /proc/cpuinfo 查看CPU信息
hostname 查看计算机名
lspci -tv 列出所有PCI设备
lsusb -tv 列出所有USB设备
lsmod 列出加载的内核模块
env 查看环境变量资源
free -m 查看内存使用量和交换区使用量
df -h 查看各分区使用情况
du -sh <目录名> 查看指定目录的大小
grep MemTotal /proc/meminfo 查看内存总量
grep MemFree /proc/meminfo 查看空闲内存量
uptime 查看系统运行时间、用户数、负载
cat /proc/loadavg 查看系统负载磁盘和分区
mount column -t
fdisk -l 查看所有分区
swapon -s 查看所有交换分区
hdparm -i /dev/hda 查看磁盘参数(仅适用于IDE设备)
dmesg grep IDE
ifconfig 查看所有网络接口的属性
iptables -L 查看防火墙设置
route -n 查看路由表
netstat -lntp 查看所有监听端口
netstat -antp 查看所有已经建立的连接
netstat -s 查看网络统计信息进程
ps -ef 查看所有进程
top 实时显示进程状态用户
w 查看活动用户
id <用户名> 查看指定用户信息
last 查看用户登录日志
cut -d: -f1 /etc/passwd 查看系统所有用户
cut -d: -f1 /etc/group 查看系统所有组
crontab -l 查看当前用户的计划任务服务
chkconfig –list 列出所有系统服务
chkconfig –list grep on
rpm -qa 查看所有安装的软件包

2.NFS服务器的安装

一共需要安装两款软件,分别是支持RPC服务的rpcbind和支持NFS服务的nfs-server

rpcbind的安装

NFS的服务都是通过RPC来具体实现的,所以要正常使用NFS服务,需要启动== rpcbind==来实现端口的映射工作。执行如下命令,安装并启动rpcbind:

sudo apt-get install rpcbind

nfs-kernel-server的安装

nfs-kernel-server是提供nfs服务器的软件,提供文件系统的完整功能。这里要提醒一下,NFS服务器会直接使用到内核的模块,所以内核必须要支持 NFS 才行。如果操作系统的版本是自行编译的内核的话,需要注意编译NFS的内核支持。安装命令:

sudo apt-get install nfs-kernel-server

3.配置NFS服务器

NFS服务器的主要配置文件就是:/etc/exports。不过这个配置文件不一定会存在,可能需要使用 vim 主动新建这个文件。
/etc/exports文件由以下两个选项构成:

[共享目录] [主机名或IP(权限参数,权限参数)]

每一行最前面是要分享出来的目录,目录可以依照不同的权限分享给不同的主机。若权限参数不止一个时,则以逗号 (,) 分开;且主机名与小括号是连在一起的。其中权限参数是可选的,当不指定权限参数时,nfs将使用默认选项。默认的共享选项是 sync,ro,root_squash,no_delay 当主机名或IP地址为空时,则代表共享给任意客户机提供服务。

NFS共享的常用参数

  • 访问权限参数:
参数 解释
rw 设置输出目录具有读写权限
ro 设置输出目录只有读权限
  • 用户映射参数
参数 解释
all_squash squash翻译为压制,即将所有的远程访问用户(包括root)及其所属组的权限都压制到匿名用户或用户组(nfsnobody)
no_all_squash 与all_squash取反(默认设置)
root_squash root用户压制(释权),当登录NFS主机使用共享目录的使用者是root时,其权限将被转换成为匿名使用者,通常它的UID与GID都会变成nobody身份
no_root_squash 如果登录NFS主机使用共享目录的使用者是root,那么对于这个共享的目录来说,它具有root的权限(默认设置)
anonuid=xxx 将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx)
anongid=xxx 将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx)
  • 其他参数
参数 解释
secure 限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置)
insecure 允许客户端从大于1024的tcp/ip端口连接服务器
sync 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
async 将数据先保存在内存缓冲区中,必要时才写入磁盘
wdelay 检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置)
no_wdelay 若有写操作则立即执行,应与sync配合使用
subtree 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置)
no_subtree 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率

4.启动NFS服务器

配置完/etc/exports后,就可以启动NFS服务器了。

为了使NFS服务器能正常工作,需要启动rpcbind和nfs-kernel-server两个服务,并且rpcbind一定要先于nfs-kernel-server启动。

  • 启动命令:
sudo service rpcbind start
sudo service nfs-kernel-server start

有时RPC服务的服务不叫rpcbind,叫portmap,启动不成功时可以换一下程序名试试。

若要开机自启动nfs服务,可以通过sysv-rc-conf配置自启动服务。

 sudo sysv-rc-conf --level 35 rpcbind on
 sudo sysv-rc-conf --level 35 nfs-kernel-server on

5.NFS客户端的挂载

首先在客户端上建立一个挂载点:

sudo mkdir /mnt/nfs

然后将ip地址为192.168.12的NFS服务器的共享目录/tmp/mnt/nfs挂载到客户端的/mnt/nfs上:

sudo mount -t /mnt/nfs 192.168.12:/tmp/mnt/nfs

接着你就可以在客户端上访问服务器上的文件了。

参考链接:https://www.cnblogs.com/me80/p/7464125.html
参考链接:https://www.linuxidc.com/Linux/2018-03/151384.html

你可能感兴趣的:(一些零碎的知识)