0

0

linux下NFS安装配置的方法是什么

PHPz

PHPz

发布时间:2023-05-19 19:46:10

|

2202人浏览过

|

来源于亿速云

转载

1,服务器端软件:安装nfs-utils和portmap(rpcbind)
nfs-utils: 提供rpc.nfsd 及 rpc.mountd这两个nfs daemons的套件
portmap: nfs其实可以被看作是一个rpc server program,而要启动一个rpc server program,都要做好port的对应工作,而且这样的任务就是由portmap来完成的。通俗的说portmap就是用来做port的mapping的。
nfs需要启动的daemons

  • pc.nfsd:主要复杂登陆权限检测等 必须

  • portmap:处理rpc程序客户端和服务器端的端口对应 必须

  • rpc.mountd:负责nfs的档案系统,当client端通过rpc.nfsd登陆server后,对clinet存取server的文件进行一系列的管理 必须

  • lockd:处理通过rpc包的锁定请求

  • statd:为nfs锁定服务提供crash恢复功能

  • rquotad:处理当用户通过nfsmount到远程服务器时的配额

  • 守护进程启动顺序:rpc.portmap, rpc.mountd, rpc.nfsd, rpc.statd, rpc.lockd (新版本会自动跟着nfsd启动起来), rpc.rquotad

nf服务器端命令:

•yum install nfs-utils portmap
•chkconfig rpcbind on #chkconfig:更新和查询各运行级别的系统服务
•chkconfig nfs on
•service rpcbind start
•service nfs start

2,服务器端配置文件/etc/exports:指定要共享的目录及权限 man exports

复制代码 代码如下:

95Shop仿醉品商城
95Shop仿醉品商城

95Shop可以免费下载使用,是一款仿醉品商城网店系统,内置SEO优化,具有模块丰富、管理简洁直观,操作易用等特点,系统功能完整,运行速度较快,采用ASP.NET(C#)技术开发,配合SQL Serve2000数据库存储数据,运行环境为微软ASP.NET 2.0。95Shop官方网站定期开发新功能和维护升级。可以放心使用! 安装运行方法 1、下载软件压缩包; 2、将下载的软件压缩包解压缩,得到we

下载


#:允许ip地址范围在192.168.0.*的计算机以读写的权限来访问/home/work 目录。
/home/work 192.168.0.*(rw,sync,root_squash)
/home  192.168.1.105 (rw,sync)
/public  * (rw,sync)

配置文件每行分为两段:第一段为共享的目录,使用绝对路径,第二段为客户端地址及权限。
地址可以使用完整ip或网段,例如10.0.0.8或10.0.0.0/24,10.0.0.0/255.255.255.0当然也可以地址可以使用主机名,dns解析的和本地/etc/hosts解析的都行,支持通配符,例如:*.chengyongxu.com

权限有:
rw:read-write,可读写;    注意,仅仅这里设置成读写客户端还是不能正常写入,还要正确地设置共享目录的权限,参考问题7
ro:read-only,只读;
sync:文件同时写入硬盘和内存;
async:文件暂存于内存,而不是直接写入内存;
no_root_squash:nfs客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。
root_squash:nfs客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;
all_squash:不论nfs客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
anonuid:匿名用户的uid值,通常是nobody或nfsnobody,可以在此处自行设定;
anongid:匿名用户的gid值。

nfs客户端用户映射:客户端登陆用户为root或者其他用户,然后根据服务器端nfs server配置,相应客户端连接映射到nfs服务器端的用户为root或者指定用户(通过anonuid或者anongid来设定)、nfsnobody等。最后这个映射用户和共享目录的权限共同影响该客户端连接是否有读写权限。
手动设定客户端、服务器端用户映射,参数:map_static=/etc/nfs.map
/etc/nfs.map文件映射内容如下:
# remote local
gid 500 1000
uid 500 2003

参考:关于nfs客户连接用户身份的描述,没有验证过下述的描述:

•客户端连接时候,对普通用户的检查,no.1如果明确设定了普通用户被压缩的身份,那么此时客户端用户的身份转换为指定用户,no.2如果nfs server上面有同名用户,那么此时客户端登录账户的身份转换为nfs server上面的同名用户,no.3如果没有明确指定,也没有同名用户,那么此时 用户身份被压缩成nfsnobody
•客户端连接的时候,对root的检查,no.1如果设置no_root_squash,那么此时root用户的身份被压缩为nfs server上面的root,no.2如果设置了all_squash、anonuid、anongid,此时root 身份被压缩为指定用户,no.3如果没有明确指定,此时root用户被压缩为nfsnobody,no.4如果同时指定no_root_squash与all_squash 用户将被压缩为 nfsnobody,如果设置了anonuid、anongid将被压缩到所指定的用户与组

3,防火墙设置修改

默认情况下,centos6服务器版安装完成后,防火墙iptables配置中只放开了22端口。
在nfs配置文件/etc/sysconfig/nfs中指定nfs服务相关端口,并修改防火墙放开相应端口

复制代码 代码如下:


#port rpc.mountd should listen on. 
#mountd_port=892 
 
#port rpc.statd should listen on. 
#statd_port=662 
 
#/usr/sbin/rpc.rquotad port rquotad should listen on. 
#rquotad_port=875 
 
#tcp port rpc.lockd should listen on. 
#lockd_tcpport=32803 
 
#udp port rpc.lockd should listen on. 
#lockd_udpport=32769  

修改iptables配置文件/etc/sysconfig/iptables,放开111(portmap服务端口),2049(nfs服务端口)

4,/etc/hosts.allow配置修改
/etc/hosts.allow,/etc/hosts.deny 描述哪些主机允许使用本地的inet服务。
默认这里好像可以不需要修改,不过最好设置成只允许需要的客户端机器连接,然后其他机器的连接都deny
#服务进程名:主机列表:当规则匹配时可选的命令操作
server_name:hosts-list[:command]
在/etc/hosts.allow中添加允许客户端访问的规则
all:127.0.0.1         #允许本机访问本机所有服务进程
all:192.168.0.135     #允许192.168.0.135客户端机器访问本机所有服务进程
smbd:192.168.0.0/255.255.255.0    #允许网段的ip访问smbd服务
sshd:192.168.100.0/255.255.255.0        #允许192.168.100.网段的ip访问服务器上的sshd进程
sshd:60.28.160.244                                  #允许外网的60.28.160.244访问这个服务器上的sshd进程
在/etc/hosts.deny中 被禁制登陆的尝试连接信息也可以设置成记录下来并发到用户邮箱
sshd:all    #禁止所有

5,修改共享出去的目录权限为760,并修改目录所有组为nfsnobody
参考:问题7

6,客户端挂载:执行下面的指令就可以把nfs服务器(ip地址为192.168.1.45)共享出来的/home挂装到本地的/mnt/nfs/home目录下。
showmount -e nfs-serverip: 查看nfs服务器共享出来的资源
mount -t nfs 192.168.1.45:/home /mnt/nfs/home

7,nfs性能测试:

•根据命令time dd if=/dev/zero of=/mnt/home bs=16k count=16384 来设置合理的wsize,rsize值
•根据nfs客户端数,在/etc/sysconfig/nfs配置文件中设置合适的nfs服务器端进程数rpcnfsdcount,默认为8

exportfs命令:如果我们在启动了nfs之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs命令来使改动立刻生效,该命令格式如下:
exportfs [-aruv] -a :全部mount或者unmount /etc/exports中的内容 -r :重新mount /etc/exports中分享出来的目录 -u :umount 目录 -v :在 export 的時候,将详细的信息输出到屏幕上。
showmount命令:显示nfs服务器的挂载信息。
showmount -e [nfs-server]:显示指定的nfs server上export出来的目录,不指定后面ip时查看的是本机作为nfs server时,对外共享的目录。。
rpcinfo -p命令:显示rpc信息  -p参数:用rpc协议来探测主机host上使用的rpcbind,并显示所有已注册的rpc程序。
nfsstat命令:查看nfs的运行状态,对于调整nfs的运行有很大帮助

过程中出现的问题解决:

1, 通过yum或者rpm安装完portmap后,发现执行命令service portmap start时报如下错误:portmap: unrecognized service。
centos6(linux kernel 2.6.32)中,portmap已经被rpcbind代替了,仔细查看安装信息就会发现,执行命令yum install portmap时安装的就是rpcbind。安装完成后也可以通过命令:yum whatprovides portmap来查看详细信息。

2, 客户端挂载时,报错误mount clntudp_create: rpc: port mapper failure - rpc: unable to receive。

•1,通过命令rpcinfo -p来查看portmap服务时候正常启动以及相应的端口(默认111)
•2,检查/etc/sysconfig/iptables防火墙设置,允许tcp,udp的111端口访问,然后service iptables restart
•3,检查/etc/hosts.deny,/etc/hosts.allow看客户端连接是否被阻止了

3, 客户端执行命令showmount -e nfs-server时,报错误:mount clntudp_create: rpc: program not registered。
nfs、rpcbind服务没有启动,使用chkconfig把nfs、rpcbind加到系统服务中并用service来启动
或者在/etc/hosts.allow中添加允许客户端访问的规则 all:192.168.0.135

4, 客户端执行命令showmount -e nfs-server时,报错误:rpc mount export: rpc: unable to receive; errno = no route to host
配置文件:/etc/sysconfig/nfs
找到nfs服务相关端口设置的地方,并移除注释后,在iptables防火墙设置中指定允许相应端口的udp,tcp流通过。
#mountd_port=892
#statd_port=662
#lockd_tcpport=32803
#lockd_udpport=32769
iptables -a input -p tcp --dport 662 -m state --state new -j accept
iptables -a input -p udp --dport 661 -m state --state new -j accept

5, showmount -e nfs-server成功,正式挂载时报错:mount: mount to nfs server '192.168.1.5' failed: system error: no route to host.这是由于nfs服务的默认端口2049被防火墙阻塞了,和上面类似修改iptables允许2049端口通过

6, showmount -e nfs-server成功,正式挂载时报错:mount: mount to nfs server '192.168.1.5' failed: timed out (retrying).
编辑/etc/sysconfig/iptables时,相关端口的tcp端口允许通过,而udp不允许。其他可能的原因参考:mount command fails with nfs server failed error.
disable name lookup requests from nfs server to a dns server. 
or  nfs version used by the nfs client is other than version 3.

7,exports配置文件中目录权限属性设置为rw(默认为root_squash),但是在客户端mount目录执行touch命令时报错误:touch: cannot touch `a': permission denied。解决:

•服务器端共享目录权限查看ll -d /home
•修改服务器端共享目录权限chown 760 /home(文件所有者root有全权限、文件所有组用户有读写权限、其他用户无权限,然后把目录的组设置为nfsnobody)
•修改服务器端共享目录权限组拥有者为nfsnobody(cat /etc/passwd | grep nob)
•chgrp nfsnobody /home
•成功在客户端创建新的文件!

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

760

2023.08.22

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.11.20

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

188

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

288

2023.10.25

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

60

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

40

2025.11.27

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.6万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号