NFS 服务器搭建

NFS(网络文件系统)用于Unix/Linux之间的文件共享,NFS在文件传送过程中依赖与RPC(远程过程调用)协议。NFS本身是没有提供信息传送的协议和功能。只要用到NFS的地方都需要启动RPC服务,不论是NFS的服务端还是客户端。

在启动NFS服务之前,首先要启动RPC服务(CentOS5是portmap服务,CentOS6.6以后的版本是rpcbind服务),否则NFS服务器无法向RPC服务注册。另外,RPC服务如果重启,原来以及有的NFS端口就会丢失,因此,只要RPC服务重启,NFS服务就要重启向RPC重新注册新的随机端口号。一般修改NFS配置文件后,不需要重启服务,直接平滑重启即可,命令:/etc/init.d/nfs reload或者exportfs -rv就可以修改/etc/exports生效。

相关软件包:nfs-utils(NFS服务主程序)、rpcbind(PRC服务程序)

  • nfsd监听的端口: 2049/tcp, 2049/udp
  • portmapper监听的端口: 111/tcp, 111/udp
  • 相关配置文件:
    • /etc/exports
    • /etc/sysconfig/nfs
    • /etc/nfsmount.conf
    • /etc/nfs.conf

1. 安装并启动nfs-utils、rpcbind

CentOS和Ubuntu安装的软件包有差异,下面分别介绍两个系统下的安装方法,其他操作基本没有差异

1==CentOS下安装的软件包为nfs-utils和rpcbind 2# yum -y install nfs-utils rpcbind 3启动顺序很关键,必须先启动rpcbind服务,使得nfs服务可以像rpc服务注册端口 4# systemctl restart rpcbind 5# systemctl restart nfs 6 7==Ubuntu下安装的软件包为nfs-kernel-server和rpcbind 8$ sudo apt install -y nfs-kernel-server rpcbind 9启动顺序很关键,必须先启动rpcbind服务,使得nfs服务可以像rpc服务注册端口 10$ systemctl restart rpcbind 11$ systemctl restart nfs-kernel-server 12 13查看NFS服务向rpc注册的端口信息,主端口号是:111 14# rpcinfo -p 192.168.10.10 15 program vers proto port service 16 100000 4 tcp 111 portmapper 17 100000 3 tcp 111 portmapper 18 100000 2 tcp 111 portmapper 19 100000 4 udp 111 portmapper 20 100000 3 udp 111 portmapper 21 100000 2 udp 111 portmapper 22 100005 1 udp 20048 mountd 23 100005 1 tcp 20048 mountd 24 100005 2 udp 20048 mountd 25 100005 2 tcp 20048 mountd 26 100005 3 udp 20048 mountd 27 100005 3 tcp 20048 mountd 28 100003 3 tcp 2049 nfs 29 100003 4 tcp 2049 nfs 30 100227 3 tcp 2049 nfs_acl 31 100003 3 udp 2049 nfs 32 100003 4 udp 2049 nfs 33 100227 3 udp 2049 nfs_acl 34 100021 1 udp 37633 nlockmgr 35 100021 3 udp 37633 nlockmgr 36 100021 4 udp 37633 nlockmgr 37 100021 1 tcp 44262 nlockmgr 38 100021 3 tcp 44262 nlockmgr 39 100021 4 tcp 44262 nlockmgr

2. 添加共享条目

1编辑/etc/exports文件添加共享条目 2# vim /etc/exports 3/shared 192.168.10.0/24(rw,sync,all_squash,anonuid=505,anongid=505) 192.168.20.0/24(rw) 4 5修改共享目录权限和属主属组 6# mkdir /shared 7# chown -R nfsnobody:nfsnobody /shared 8# chmod -R 760 /shared 9 10# 重新导出共享目录 11# exportfs -arv 12 13测试 14# showmount -e 192.168.10.10 15Export list for 192.168.10.10: 16/shared 192.168.10.0/24 17测试成功 18 19 20条目格式:(man exports查看man手册) 21共享目录 NFS客户端地址(属性1,属性2) 22 23- ro: 只读 24- rw: 读写(还需要配置共享目录有读写权限) 25- sync: 数据同步写入NFS服务器端的硬盘中 26- async: 数据先写到缓存区,再写到磁盘里中 27- root_squash: NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份 28- no_root_squash: NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的 29- all_squash: 不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限 30- anonuid:指定匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定 31- anongid: 指定匿名用户的GID

3. 客户端挂载使用

1客户端也要安装nfs-utils、rpcbind 2# yum -y install nfs-utils rpcbind 3 4客户端只需要启动rpcbind服务即可,不需要启动nfs服务 5# systemctl restart rpcbind 6 7列出服务端的共享目录 8# showmount -e 192.168.10.10 9Export list for 192.168.10.10: 10/shared 192.168.10.0/24 11 12挂载文件系统到本地 13# mount -t nfs 192.168.10.10:/shared /nfs 14# df -h 15192.168.10.10:/shared 17G 5.4G 12G 32% /nfs

4. 相关命令

showmount

显示NFS服务器的挂载信息

1showmount -e NFS_SERVER: 查看NFS服务器“导出”的各文件系统 2showmount -a NFS_SERVER: 查看NFS服务器所有被挂载的文件系统及其挂载的客户端对应关系列表 3showmount -d NFS_SERVER: 显示NFS服务器所有导出的文件系统中被客户端挂载了文件系统列表

exportfs

在修改了/etc/exports文件后执行此命令即可重新导出或者取消导出所有文件系统,而不需要重新启动nfs服务

1-a:跟-r或-u选项同时使用,表示重新挂载所有文件系统或取消导出所有文件系统; 2-r: 重新导出 3-u: 取消导出 4-v: 显示详细信息

rpcinfo

显示RPC信息

-p:用rpc协议来探测主机host上使用的rpcbind,并显示所有已注册的RPC程序

nfsstat

查看NFS的运行状态,对于调整NFS的运行有很大帮助

5.NFS性能调优

使用dd命令测试读写性能,并根据读写性能修改配置文件以允许最大nfs客户端连接数

1# time dd if=/dev/zero of=/nfs/test bs=10k count=10000 210000+0 records in 310000+0 records out 4102400000 bytes (102 MB) copied, 0.604919 s, 169 MB/s 5 6real 0m0.608s 7user 0m0.002s 8sys 0m0.078s 9 10修改配置文件/etc/sysconfig/nfs中的参数RPCNFSDCOUNT,该参数默认值为8

Q&A常见问题

  1. 客户端挂载时,报错误mount clntudp_create: RPC: Port mapper failure - RPC: Unable to receive
  • 通过命令rpcinfo -p来查看portmap服务是否正常启动以及相应的端口(默认111)
  • 检查防火墙设置,允许tcp,udp的111端口访问
  • 检查/etc/hosts.deny,/etc/hosts.allow看客户端连接是否被阻止了
  1. 客户端执行命令showmount -e NFS_SERVER_IP时,报错误:mount clntudp_create: RPC: Program not registered
  • nfs或rpcbind服务没有启动,使用chkconfig把nfs、rpcbind加到系统服务中并用service来启动
  1. 客户端执行命令showmount -e NFS_SERVER_IP时,报错误:rpc mount export: RPC: Unable to receive; errno = No route to host
  • 配置文件:/etc/sysconfig/nfs找到nfs服务相关端口设置的地方,并移除注释并配置指定端口,然后在iptables防火墙设置中指定允许相应端口的Udp,tcp流通过。
  1. 执行showmount -e NFS_SERVER_IP成功,但是挂载时报错:mount: mount to NFS server '192.168.10.10' failed: System Error: No route to host.
  • 这是由于nfs服务的默认端口2049被防火墙阻塞了,修改iptables允许2049端口通过
  1. 执行showmount -e NFS_SERVER_IP成功,但是挂载时报错:mount: mount to NFS server '192.168.10.10' failed: timed out (retrying).
  • 编辑iptables相关端口的tcp端口允许通过,而udp不允许。
  1. 服务端的/etc/exports配置文件中目录权限属性设置为rw(默认为root_squash),但是在客户端mount目录执行touch命令时报错误:touch: cannot touch a: Permission denied
  • 检查服务器端共享目录是否有写入权限 ll -d /shared
  • 修改服务器端共享目录权限 chown -R 760 /shared(文件所有者root有全权限、文件所有组用户有读写权限、其他用户无权限,然后把目录的组设置为nfsnobody)
  • 修改服务器端共享目录属主属组为nfsnobodychown -R nfsnobody:nfsnobody /shared

其他博文

http://server.51cto.com/sManage-150923.htm

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

mysql设置时区

mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0

Linux NFS 详解

目录:1、了解NFS服务2、NFS主要文件3、NFS安装4、NFS配置5、NFS客户端配置   6、固定NFS端口7、Windows挂载NFS1、了解NFS服务   NFS是Network