linux 中nfs原理,NFS服务原理与应用

一、RPC服务:

RPC称作Remote Procedure Call Protocol,远程过程调用协议。RPC可以实现客户端向远程主机请求服务(调用函数),而不需要了解底层协议(可以理解是一个框架)。RPC负责处理来自RPC客户端的请求,所以RPC需要有一个服务端程序监听在一个套接字上(TCP/111,UDP/111)。

二、NFS:

NFS是RPC协议的一种具体的实现,NFS全称为Network File System,网络文件系统。NFS可以实现类Unix主机之间文件系统的共享。NFS的底层依赖于RPC,当客户端向NFS通信的时候,RPC接收用户的请求,并将其转交给NFS,所以NFS需要RPC服务代替NFS监听某个特定端口。启动NFS服务的时候,需要事先启动RPC服务。

NFS只能在类Unix系统之间提供文件系统的共享服务,原因在于NFS功能是由内核模块提供的,所以只能在内核提供了NFS功能的系统上使用。而大多数类Unix系统都具有该功能。

三、配置NFS服务:

1.配置NFS需要先启动rpc服务,rpc服务程序由rpcbind这个包提供。安装rpcbind

1

2

3

4

5[iyunv@localhost ~]# yum install -y rpcbind

[iyunv@localhost ~]# rpm -ql rpcbind

/etc/rc.d/init.d/rpcbind    #启动脚本

/sbin/rpcbind    #rpcbind程序

......

2.启动rpcbind服务:

1

2

3

4

5

6[iyunv@localhost ~]# service rpcbind start

Starting rpcbind:                                          [  OK  ]

[iyunv@localhost ~]# ss -ntl

State      Recv-Q Send-Q                  Local Address:Port                    Peer Address:Port

LISTEN     0      128                                :::111                               :::*

LISTEN     0      128                                 *:111                                *:*

3.安装NFS相关程序并启动,NFS程序由nfs-utils提供:

1

2

3

4

5

6

7

8

9[iyunv@localhost ~]# yum install -y nfs-utils

[iyunv@localhost ~]# rpm -ql nfs-utils

/etc/nfsmount.conf   #挂载NFS配置

/etc/rc.d/init.d/nfs  #nfs服务脚本,负责处理请求

/etc/rc.d/init.d/nfslock  #nfs锁服务

/etc/rc.d/init.d/rpcgssd  #rpcgssd

/etc/rc.d/init.d/rpcidmapd  #rpc的ID映射服务

/etc/rc.d/init.d/rpcsvcgssd  #rpcsvcgssd

....

1

2

3

4

5

6[iyunv@localhost ~]# service nfs start

Starting NFS services:                                     [  OK  ]

Starting NFS quotas:                                       [  OK  ]

Starting NFS mountd:                                       [  OK  ]

Starting NFS daemon:                                       [  OK  ]

Starting RPC idmapd:                                       [  OK  ]

NFS的四个主要服务:

1

2

3

4quotas:限额设置

mountd:挂载程序,等待用户使用挂载申请,并验证客户来源

daemon:NFS的主程序

idmapd:负责NFS服务的id映射

4./etc/exports导出文件:

NFS共享文件系统使用/etc/exports文件导出,其格式:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18/Dire(FileSystem)    允许的范围(属性)

#####各分支格式####

范围格式:

host:单一主机地址,例如localhost、192.168.1.1

域匹配:例如*.magedu.com

网络地址:192.168.10.0/24、192.168.10.0/255.255.255.255

导出属性:

rw:读写权限

ro:读权限

async:异步写入

sync:同步写入;默认项

nohide:允许递归挂载,就是NFS的/shared目录中的a目录挂载了其他的NFS目录,当其他主机挂载/shared目录的时候,允许这个主机访问/shared/a目录

root_squash:压缩root用户,如果用户使用的root用户将NFS挂载在本地的,则把root映射为来宾用户;此选项为默认选项

no_root_squash:不压缩root用户。

all_squash:将所有用户映射为来宾用户

anonuid/anongid:设置来宾用户/组的ID,默认是nobody用户。由rpcidmapd映射。

5.配置/etc/exports文件:

1

2[iyunv@localhost ~]# vim /etc/exports

/shared    10.10.10.0/24(rw,no_root_squash,async)

共享/shared这个目录,安全起见,建议将分区挂载到/shared上,我这里是实验环境,就不做此操作了。

6.导出命令:

1

2

3

4

5导出配置使用exportfs命令:

exportfs [arg]

-a:处理/etc/exports文件中定义的所有项

-r:重新导出,一般结合a参数

-u:取消导出,一般结合a参数

1[iyunv@localhost ~]# exportfs -ra   #重新导出所有/etc/exports文件中定义的项

7.查看命令:

1

2

3

4

5查看使用showmount命令:

showmount [options] [host]

-e [host]:查看指定NFS服务器共享的文件系统

-d:只显示客户端挂载的文件系统

-a:以 HostName :Directory 格式显示所有客户端挂载信息

1

2

3

4[iyunv@localhost ~]# showmount -e localhost  #查看本机共享的文件系统

Export list for localhost:

/shared 10.10.10.0/24    #共享/shared这个目录,仅允许10.10.10.0/24这个网段挂载使用

[iyunv@localhost ~]#

8.客户端测试挂载:

1

2

3

4

5

6

7

8

9

10

11

12

13[iyunv@client ~]# mount -t nfs 10.10.10.11:/shared /mnt/nfs

[iyunv@client ~]# mount

/dev/mapper/VolGroup-lv_root on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")

/dev/sda1 on /boot type ext4 (rw)

/dev/mapper/VolGroup-lv_home on /home type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

nfsd on /proc/fs/nfsd type nfsd (rw)

10.10.10.11:/shared on /mnt/nfs type nfs (rw,vers=4,addr=10.10.10.11,clientaddr=10.10.10.11)

可以看到已经挂载了,可以使用showmount在服务器上查看一下:

在客户端的/mnt/nfs中写入一个b文件,并查看服务器端的/shared目录:

客户端写入:

1

2

3

4[iyunv@client nfs]# cp /etc/fstab /mnt/nfs

[iyunv@client nfs]# ls

/etc/fstab

[iyunv@client nfs]

服务器端查看:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20[iyunv@localhost ~]# ls /shared/

fstab

[iyunv@localhost ~]# cat /shared/fstab

#

# /etc/fstab

# Created by anaconda on Sat Dec  5 11:32:13 2015

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1

UUID=1a04e551-c2f2-4d1d-8d9a-948e2a2d4be6 /boot                   ext4    defaults        1 2

/dev/mapper/VolGroup-lv_home /home                   ext4    defaults        1 2

/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

[iyunv@localhost ~]#

9.NFS的启动配置

NFS启动时端口不固定,带来一些麻烦,可以使用启动脚本的配置文件(/etc/sysconfig/nfs)。

10.RPC服务管理查看:

可以使用rpcinfo -p命令,显示所有基于rpc的服务:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34[iyunv@localhost ~]# rpcinfo -p

program vers proto   port  service

100000    4   tcp    111  portmapper

100000    3   tcp    111  portmapper

100000    2   tcp    111  portmapper

100000    4   udp    111  portmapper

100000    3   udp    111  portmapper

100000    2   udp    111  portmapper

100011    1   udp    875  rquotad

100011    2   udp    875  rquotad

100011    1   tcp    875  rquotad

100011    2   tcp    875  rquotad

100005    1   udp  50980  mountd

100005    1   tcp  59447  mountd

100005    2   udp  46689  mountd

100005    2   tcp  34305  mountd

100005    3   udp  56518  mountd

100005    3   tcp  47681  mountd

100003    2   tcp   2049  nfs

100003    3   tcp   2049  nfs

100003    4   tcp   2049  nfs

100227    2   tcp   2049  nfs_acl

100227    3   tcp   2049  nfs_acl

100003    2   udp   2049  nfs

100003    3   udp   2049  nfs

100003    4   udp   2049  nfs

100227    2   udp   2049  nfs_acl

100227    3   udp   2049  nfs_acl

100021    1   udp  41169  nlockmgr

100021    3   udp  41169  nlockmgr

100021    4   udp  41169  nlockmgr

100021    1   tcp  34117  nlockmgr

100021    3   tcp  34117  nlockmgr

100021    4   tcp  34117  nlockmgr

11.修改/etc/sysconfig/nfs配置文件,将rquotad进程的端口改为876(默认为875):

1

2

3

4

5

6

7[iyunv@client ~]# rpcinfo -p|grep rquotad

100011    1   udp    875  rquotad

100011    2   udp    875  rquotad

100011    1   tcp    875  rquotad

100011    2   tcp    875  rquotad

[iyunv@client ~]# vim /etc/sysconfig/nfs

RQUOTAD_PORT=876

重启服务已经变为876端口了:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17[iyunv@localhost ~]# service nfs restart

Shutting down NFS daemon:                                  [  OK  ]

Shutting down NFS mountd:                                  [  OK  ]

Shutting down NFS quotas:                                  [  OK  ]

Shutting down NFS services:                                [  OK  ]

Shutting down RPC idmapd:                                  [  OK  ]

Starting NFS services:                                     [  OK  ]

Starting NFS quotas:                                       [  OK  ]

Starting NFS mountd:                                       [  OK  ]

Starting NFS daemon:                                       [  OK  ]

Starting RPC idmapd:                                       [  OK  ]

[iyunv@localhost ~]# rpcinfo -p|grep rquotad

100011    1   udp    876  rquotad

100011    2   udp    876  rquotad

100011    1   tcp    876  rquotad

100011    2   tcp    876  rquotad

[iyunv@localhost ~]#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值