NFS简介NFS(Network File System)网络文件系统,由NFS服务器端和NFS客户端构成,通过网络(一般是局域网)使不同主机系统,可以彼此共享文件。NFS客户端mount挂载NFS服务器端共享的文件目录到NFS客户端本地系统的某一个挂载点下,NFS客户端本地访问挂载点的共享目录时,像是访问本地的磁盘分区或目录一样,实际上访问的是挂载的NFS服务器目录。
RPC远程过程调用
NFS服务器端和客户端之间的数据传输通过相对应网络端口,由于NFS支持的功能比较多,不同的功能会使用不同的程序启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能对应的端口不固定,那么造成NFS服务器和NFS客户端数据传输的通信障碍(NFS客户端必须知道NFS服务器端的数据传输端口才能通信进行数据交互)则需要RPC(Remote procedure Call)远程过程调用来统一管理NFS端口,并且统一对外的端口是111,RPC会记录NFS端口的信息,这样就可以通过RPC实现NFS服务器和NFS客户端的端口通信。(RPC指定每个NFS功能所对应的端口,并且通知客户端,使客户端可连接到相应的端口上)
NFS工作流程
先启动NFS服务器端的RPC服务并开启111端口,然后启动NFS服务器端,NFS会随机使用一些端口,然后NFS就向PRC注册这些端口,RPC记录这些端口等待客户端RPC的请求,启动客户端RPC,向服务器端PRC请求服务器端NFS端口,服务器端的RPC将之前记录的NFS端口信息告知客户端,客户端通过获取到的NFS端口来建立和服务器端的NFS连接进行数据传输。
注:在启动服务器端NFS前启动RPC服务,否则服务器端NFS无法向RPC注册;如果PRC服务重启,之前注册好的NFS端口数据会全部丢失。
搭建NFS共享存储服务1、查看系统环境准备相应的安装包
部署NFS服务需要NFS和RPC软件包
linux-szge:~ # uname -a
Linux linux-szge 3.0.76-0.11-default #1 SMP Fri Jun 14 08:21:43 UTC 2013 (ccab990) x86_64 x86_64 x86_64 GNU/Linux
linux-szge:~ # cat /etc/issue
Welcome to SUSE Linux Enterprise Server 11 SP3 (x86_64) - Kernel \r (\l).
注:内核和操作系统不同,使用的安装包的版本也有差异,故需要根据操作系统和内核准备相应的软件包
2、检查是否安装NFS和RPC
linux-szge:~ # rpm -qa | egrep "nfs|rpcbind"
3、安装NFS和RPC
linux-szge:~ # zypper install rpcbind*
linux-szge:~ # zypper install nfs*
linux-szge:~ # rpm -qa | egrep "nfs|rpcbind"
nfsidmap-0.25-0.11.29
nfs-doc-1.2.3-18.29.1
rpcbind-0.1.6+git20080930-6.18.1
nfs-client-1.2.3-18.31.1
nfs-kernel-server-1.2.3-18.29.1
或者到下载相应的源码包或rpm包安装
注:服务器端和客户端本地都需要安装NFS和RPC
4、启动RPC
linux-szge:~ # service rpcbind start 启动RPC
linux-szge:~ # netstat -anpp | grep rpcbind 查看监听的端口是111
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2641/rpcbind
linux-szge:~ # rpcinfo -p localhost 未启动NFS前查看NFS服务向RPC注册的端口信息
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
...
详情请看rpcinfo --help详解
linux-szge:~ # chkconfig rpcinfo on rpcinfo设置为开机自启动
linux-szge:~ #chkconfig --list rpcinfo
rpcinfo 0:off 1:off 2:off 3:on 4:off 5:on 6:off
详情请看chkconfig --help详解
5、配置及启动NFS
配置NFS服务器端
linux-szge: ~ # mkdir /data/lml;chmod 666 /data/lml/ 创建共享目录/data/lml并设置权限
linux-szge:~ # vim /etc/exports 编辑NFS主要配置文件exports(默认是空的)
/data/lml 172.30.3.73(rw,sync,no_root_squash,no_all_squash) 172.30.3.73可读写共享目录/data/lml
注:在172.30.3.73和(之间不能有空格,否则nfs写入时会报错read-only file system
NFS配置exports文件格式
注:客户端地址可以写IP,网段,主机名
NFS常用配置参数
启动NFS服务器端
linux-szge:~ # service nfsserver start 启动服务器端NFS
注:如果已启动服务器端NFS,后修改了/etc/exports配置,需要重新加载NFS或者重启RPC和NFS
linux-szge:~ # service nfsserver reload 重新加载服务器NFS
linux-szge:~ # exportfs -rv 重新加载服务器NFS(r表示重启,v表示显示export的选项)
linux-szge:~ # service rpcbind restart 先重启RPC
linux-szge:~ # service nfsserver restart 后重启NFS
linux-szge:~ # rpcinfo -p localhost 启动NFS后查看RPC注册的端口信息
program vers proto port service
100000 4 tcp 111 portmapper
...
100003 4 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
...
linux-szge:~ # chkconfig nfs on NFS设置为开机自启动
linux-szge:~ #chkconfig --list nfs
nfs 0:off 1:off 2:off 3:on 4:off 5:on 6:off
服务器端测试是否可联机
linux-szge:~ # showmount -e 测试是否可联机
Export list for linux-szge:
/data/lml 172.30.3.73
详情请看showmount --help详解
配置NFS客户端
linux: ~ # mkdir /getshare 创建共享目录
linux:~ # service rpcbind restart先重启RPC
linux:~ # showmount -e 172.30.1.199 扫描服务器端NFS目录(172.30.1.199是服务器端NFS的IP)
mount挂载NFS服务器端的共享目录/data/lml到客户端本地的/getshare下
linux:~ # mount -t nfs 172.30.1.199:/data/lml /getshare
挂载格式
mount -t nfs 主机名或IP:/共享目录 /挂载点
linux:~ # df 查看挂载情况
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 40G 28G 11G 73% /
...
172.30.1.199:/data/lml 26G 8K 26G 1% /getshare
注:访问本地的/getshare相当于访问172.30.1.199的共享目录/data/lml
6、测试NFS能否正常使用
172.30.3.73客户端
挂载点创建文件test
linux:~ #cd /getshare ;echo "llalala" > test;ls -l
-rw-r--r-- 1 root root 8 May 7 15:28 test
172.30.1.199服务器端
共享目录查看是否有挂载点创建的test文件,有表示NFS可正常使用
linux-szge:~ # cd /data/lml;ls -l
-rw-r--r-- 1 root root 8 May 7 15:28 test
举报/反馈