(一)NFS工作原理

1.什么是NFS服务器

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

2.NFS的挂载原理

AIX nfs挂盘 nfs挂载原理_服务器


如上图所示,我们将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.linuxidc.com/Linux/2018-03/151384.html