码迷,mamicode.com
首页 > 其他好文 > 详细

NFS

时间:2017-10-18 20:06:51      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:nfs

一、NFS介绍

1、NFS简介

NFS (Network File System,网络文件系统),通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。 NFS 的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,允许不同硬件及操作系统的系统共同进行文件的分享。

NFS在文件传送或信息传送过程中依赖于RPC协议。RPC, (Remote Procedure Call,远程过程调用)是能使客户端执行其他系统中程序的一种机制,RPC采用C/S模式。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序;或者说NFS也是一个RPC SERVER,所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。

注意:RPC服务启动之后才能启动nfs服务,因为nfs服务要到RPC注册端口号。

2、NFS工作机理

技术分享

(1)客户端向NFS服务器发送资源请求时,客户端RPC服务通过网络向NFS服务器的RPC(111端口)服务发出资源请求。

(2)NFS服务器的RPC端口获取到服务器端nfs服务注册端口,通知客户端RPC服务器

(3)客户端收取到正确的端口之后,直接与服务端的nfs服务建立通信。

(4)服务器nfs服务接受到请求资源之后本地响应读取本地磁盘中的内容,然后返回至客户端这样就完成一次存取操作。

3、NFS优势

(1)节省本地存储空间

(2)用户不需要再网络中的每个机器上都建有home目录

4、NFS版本对比

NFS v2NFS v3NFS v4
只支持32位文件传输,最大文件数为4G支持64位传输CentOS 7 默认使用NFS v4,实现伪根挂载,辅助服务不需要,完全支持kerberos
文件传输尺寸限制在8K没有文件尺寸限制
v3增加和完善了许多错误和成功信息的返回,对于服务器的设置和管理能带来很大好处改进了INTERENT上的存取和执行效能在协议中增强了安全方面的特性
只提供了对UDP协议的支持,在一些高要求的网络环境中又很大限制增加了对TCP传输协议的支持,有更好的I/O性能只支持TCP传输,通过一个安全的带内系统,协商在服务器和客户端之间使用的安全性类型使用字符串而不是整数俩表示用户和组标识符

5、NFS服务主要进程

rpm.nfsd 最主要的NFS进程,管理客户端是否可登陆,登入者ID的判断。监听在2049端口

rpc.mount 主要功能管理NFS的文件系统。当客户端通过rpc.nfsd登入主机后,使用NFS服务器提供的文件之前,还会经过文件使用权限的认证程序。读取/etc/exports配置文件来对比客户端的权限;如果权限认证通过,客户端就可以使用NFS提供的文件了。

rpc.lockd 管理文件锁,避免同时写错

rpc.statd 检查文件一致性,可修复文件

6、NFS配置文件

软件包名:nfs-utils

配置文件

/etc/exports.d和/etc/exports

配置NFS使用固定端口

RQUOTAD_PORT 
LOCKD_TCPPORT
LOCKD_UDPPORT
MOUNTD_PORT
STATD_PORT  rpc.statd监听端口
STATD_OUTGONING_PORT outgoing设置端口

锁配置文件

/etc/modprobe.d/lockd.conf

nfs服务启动配置文件

/etc/sysconfig/nfs

命令配置文件

/sbin/mount.nfs
/sbin/mount.nfs4
/sbin/osd_login
/sbin/rpc.statd
/sbin/umount.nfs
/sbin/umount.nfs4

7、/etc/exports配置文件

格式

/DIR(共享的文件或目录) 主机1(opts) 主机2(opts)

主机格式:

单个主机:IPv4 IPv6 FQDN
IP network:两种掩码格式均支持
   0.0.0.0/24
   0.0.0.0/255.0.0.0
wildcards:主机名通配,例如*.localhost.com
netgroups:NIS域主机组,@group_name
anonymous:表示使用*通配所有客户端

ops:

secure:使用了1024以下的TCP/IP端口实现NFS的连接。
insecure:允许客户端从大于1024的TCP/IP端口实现NFS连接。
rw:允许NFS客户机进行读写访问
ro:允许NFS客户机进行只读访问
async:异步,数据变化后不立即写磁盘,可以改进性能
no_wdelay:关闭写延时;如果设置了async,NFS会忽略这个选项
nohide:如果将一个目录挂载到另外一个目录上,那么原来的目录通常就被隐藏起来,这个选项禁用这种行为。
hide:隐藏原来目录中的内容
no_stbtree_check:关闭子树检查;子树检查会执行一些不想忽略的安全性检查。默认启用子树检查
mp(mountpoint=path):NFS要求挂载所导出的目录
no_auth_nlm:NFS守护进程不要对加锁请求进行认证。默认为auth_nlm或secure_locks
fsid=num|root|uuid:NFS需要识别每个文件系统。
crossmnt:这个选项类似于nohide,使得客户端能访问挂载目录下的文件。例如如果B目录挂载A目录上,设置crossmnt在A目录上不被隐藏。

用户映射

通过NFS中的用户映射,可以将伪或实际用户和组的表示赋给一个正在对NFS卷进行操作的用户,这个NFS用户具有映射所允许的用户和组的许可权限。对NFS卷使用一个通过的用户/组可以提供一定的安全性和灵活性。

在使用NFS挂载的文件系统上的文件时,用于的访问通常都会受到限制,都是以匿名用户的身份对文件进行访问的,这些用户缺省的情况下对这些文件只有只读权限。NFS允许指定访问远程文件用户通过用户标识号和组标识号,可以禁用正常的squash行为

用户映射选项

root_squash:将root用户及所属组映射为匿名用户或用户组,默认选项
no_root_squash:允许root用户访问挂载NFS卷
all_squash:对于公共访问的NFS卷时非常有用的,它会限制所有的UID和GID,只使用匿名用户(nfsnobody)访问NFS卷
anonuid:将远程访问的所有用户都映射为匿名用户,并制定该用户为本地用户(UID=NUM)
anongid:将远程用户的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=NUM)

客户端NFS挂载选项

fg:前台挂载
bg:后台挂载
hard:持续请求
soft:非持续请求
rsize:从服务器中读取的字节数
wsize:写入服务器的字节数,默认为1024,如果使用比较高的值,可以提高传输速度
_netdev:网络设备挂载,如果检测到网络自动挂载

8、管理命令

(1)exportfs 管理当前NFS共享文件系统列表

-a 打开或取消所有目录共享
-o 指定一列共享选项
-i  忽略`/etc/exports`文件,从而只是用默认的和命令行指定的选项
-r 重新读共享所有目录。它是/etc/exportfs和/var/lib/nfs/xtab同步。
-u 取消一个或多个目录共享
-v 输出详细信息

(2)showmount 查询mountd守护进程,以显示NFS服务器加载的信息

-d 仅显示以被NFS客户端加载的目录
-e 显示NFS服务器上的所有共享目录

(3)rpcinfo 显示portmap的有关信息

-p 列出所有host用portmap注册的RPC程序,如果没有指定host,就查找本机上RPC程序
-u RPC调用host程序program的version版本,并报告是否接受到相应
-t TCP RPC调用host程序program的version版本,并报告是否接收到响应
-n 根据-t或者-u,使用编号为port的端口,而不是portmap指定的端口
-d 将程序program的version版本从本机的RPC注册表中删除。注意只用root权限的用户才可以使用此选项。
-s 查看RPC注册程序

(4)mount.nfs 挂载NFS

-r 只读挂载
-w 读写挂载
-f 假挂载,不实际调用mount
-n 不更新/etc/mtab

三、示例

1、基本挂载并分享

(1)CentOS 7 共享目录/app/testnfs

[root@localhost/app]#vim /etc/exports

 1 /app/testnfs    192.168.4.132

(2)使用命令exportfs重读

[root@localhost/app]#exportfs -r

(3)CentOS 6使用showmount命令查看

[root@localhost/app]#showmount -e 192.168.4.60

(4)挂载

[root@localhost ~]# mount -t nfs 192.168.4.60:/app/testnfs /mnt/nfs/

如果不NFS服务器中挂载不添加任何选项,默认为

ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash

如果客户对文件有写权限,但是此目录NFS设为只要只读权限,所以对NFS写不进去文件或创建目录等等操作。如果需要这种操作需要确保文件对此目录是否有写权限,并且NFS共享时是否设置了读写权限;只有两者同时具备才可以写操作。

这时我们开启NFS共享文件的权限

[root@localhost/app]#chmod 777 /app/testnfs

再次写去测试即可创建

2、实现NFS伪根

(1)创建一个目录并在目录下在创建目录

[root@localhost/app/testnfs]#mkdir nfs1 [root@localhost/app/testnfs]#mkdir nfs2

(2)配置共享文件

[root@localhost/app/testnfs]#vim /etc/exports

1 /app/testnfs    192.168.4.132(rw,fsid=0,crossmnt)
2 /app/testnfs/nfs1       192.168.4.132(rw,root_squash)
3 /app/testnfs/nfs2       192.168.4.132(ro)

[root@localhost/app/testnfs]#exportfs -v

/app/testnfs    192.168.4.132(rw,sync,wdelay,hide,crossmnt,no_subtree_check,fsid=0,sec=sys,secure,root_squash,no_all_squash)
/app/testnfs/nfs1
       192.168.4.132(rw,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
/app/testnfs/nfs2
       192.168.4.132(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)

我们也可以通过 /var/lib/nfs/etab

[root@localhost/app/testnfs]#cat /var/lib/nfs/etab

/app/testnfs/nfs2   192.168.4.132(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,secure,root_squash,no_all_squash)
/app/testnfs/nfs1   192.168.4.132(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,secure,root_squash,no_all_squash)
/app/testnfs    192.168.4.132(rw,sync,wdelay,hide,crossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,fsid=0,anonuid=65534,anongid=65534,sec=sys,secure,root_squash,no_all_squash)    

(3)测试

[root@localhost ~]# showmount -e 192.168.4.60

[root@localhost ~]# mount -t nfs 192.168.4.60:/ /mnt/nfs/

[root@localhost nfs1]# touch nfs.txt

[root@localhost nfs1]# ll

-rw-r--r--. 1 nfsnobody nfsnobody 0 Oct 15  2017 nfs.txt

此时我们看创建文件的所有者及所属组都为nfsnobody,这里就验证了我们刚刚前面提到的root用户映射为匿名用户nfsnobody。

[joah@localhost nfs1]$ ll

-rw-rw-r--. 1 joah      joah      0 Oct 15  2017 nfs2.txt
-rw-r--r--. 1 nfsnobody nfsnobody 0 Oct 15  2017 nfs.txt

通过上述查看非系统账号创建的文件的所有者及所属组为自己本身。

此时我们在NFS服务器上查看文件

[root@localhost/app/testnfs/nfs1]#ll

-rw-rw-r--. 1       500       500 0 Oct 15 23:45 nfs2.txt
-rw-r--r--. 1 nfsnobody nfsnobody 0 Oct 15 23:42 nfs.txt

在客户端创建的文件在NFS服务器上的所有者和所属组都为500。而客户端joah的所有者和所属组的id也为500,这也验证了上述说明的用户映射。如果服务器500这个id号被占用如何处理?

[root@localhost/app/testnfs/nfs1]#ll

-rw-rw-r--. 1 li              500 0 Oct 15 23:45 nfs2.txt

此时所有者不一样了。这样有时就会出现问题。

关于权限

(1)客户端连接时候,对普通用户检查

a、如果明确设定了普通用户被压榨,那么此时客户端用户的身份转换为指定用户
b、如果没有明确指定,那么此时用户身份被压榨成nfsnobody

(2)客户端连接时,对root的检查

a、如果设置no_root_squash,此时root用户身份被压榨成NFS服务器上的root
b、如果设置了all_squash、anonuid、anongid,此时root的身份被压榨为指定用户
c、如果没有明确指定,root被压榨为nfsnobody
d、如果同时指定no_root_squash和all_squash用户将被压榨为nfsnobody;如果设置了anonuid、anongid将被压榨为指定用户与组

四、自动挂载

1、auto简介

Autofs与Mount/Umount的不同之处在于,它是一种看守程序。如果它检测到用户正试图访问一个尚未挂接的文件系统,它就会自动检测该文件系统,如果存在,那么Autofs会自动将其挂接。另一方面,如果它检测到某个已挂接的文件系统在一段时间内没有被使用,那么Autofs会自动将其卸载。因此一旦运行了Autofs后,用户就不再需要手动完成文件系统的挂接和卸载。

2、配置文件

主配置文件

/etc/autos.conf

配置挂载文件

/etc/auto.master

3、autofs挂载方式

(1)相对路径法

/etc/auto.master配置格式

DIRNAME     子配置文件

子配置文件格式

BASENAME    需要挂载的文件等

示例 :

[root@localhost ~]# vim /etc/auto.master

/mnt    /etc/auto.nfs

[root@localhost ~]# vim /etc/auto.nfs

nfs     -fstype=nfs     192.168.4.60:/

重启服务测试即可

[root@localhost ~]# cd /mnt/nfs/ [root@localhost nfs]# ls

fstab  nfs1  nfs2

(2)绝对路径法

/etc/auto.master配置格式

/-      子配置文件

子配置文件格式

挂载点路径   被挂载文件等

示例:

[root@localhost ~]# vim /etc/auto.master

/-    /etc/auto.nfs

[root@localhost ~]# vim /etc/auto.nfs

/mnt/nfs     -fstype=nfs     192.168.4.60:/

重启服务测试即可

[root@localhost ~]# cd /mnt/nfs/ [root@localhost nfs]# ls

fstab  nfs1  nfs2

注意:如果父目录不存在时,会自动创建。使用绝对路径不会隐藏原来目录下目录中的内容。


本文出自 “Joah” 博客,请务必保留此出处http://merit.blog.51cto.com/10757694/1973787

NFS

标签:nfs

原文地址:http://merit.blog.51cto.com/10757694/1973787

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!