nfs之脚气
nfs工作模式参考
一、NFs是什么
NFS是Network File System的缩写,即网络文件系统。客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下。
nfs为什么需要RPC?
因为NFS支持的功能很多,不同功能会使用不同程序来启动,因此,NFS对应的功能所对应的端口无法固定。
端口不固定造成客户端与服务端之间的通信障碍,所以需要RPC来从中帮忙。
NFS启动时会随机取用若干端口,然后主动向RPC服务注册取用相关端口和功能信息,RPC使用固定端口111来监听来自NFS客户端的请求,
并将正确的NFS服务端口信息返回给客户端,这样客户端与服务端就可以进行数据传输了。
二、NFS的工作流程
|
1
2
3
4
|
1、由程序在NFS客户端发起存取文件的请求,客户端本地的RPC(rpcbind)服务会通过网络向NFS服务端的RPC的111端口发出文件存取功能的请求。2、NFS服务端的RPC找到对应已注册的NFS端口,通知客户端RPC服务。3、客户端获取正确的端口,并与NFS daemon联机存取数据。4、存取数据成功后,返回前端访问程序,完成一次存取操作。 |
所以无论客户端,服务端,需要使用NFS,必须安装RPC服务。
三、NFS服务安装配置
nfs-utils、rpcbind
查看是否安装NFS
|
1
2
|
> rpm -qa nfs-utils rpcbind> yum install nfs-utils rpcbind |
四、启动rpcbind服务
启动rpc服务
|
1
|
> systemctl start/stop/status rpcbind.service |
查看rpc端口,111是主端口,是客户端通信的端口
|
1
2
|
> lsof -i :111> netstat -lntup|grep rpcbind |
如果出现-bash未找到命令可执行下面命令
|
1
|
> yum install net-tools lsof |
查看nfs服务向rpc注册的端口信息
|
1
|
> rpcinfo -p localhost |
五、启动NFS服务
|
1
|
> systemctl start/stop/status nfs.service |
再次查看rpc注册的端口信息
|
1
|
> rpcinfo -p localhost |
六、NFS常见进程详解
|
1
|
> ps -ef|egrep "rpc|nfs" |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
rpc 101101 1 0 17:11 ? 00:00:00 /sbin/rpcbind -wrpcuser 101188 1 0 17:22 ? 00:00:00 /usr/sbin/rpc.statd --no-notifyroot 101190 2 0 17:22 ? 00:00:00 [rpciod]root 101200 1 0 17:22 ? 00:00:00 /usr/sbin/rpc.idmapdroot 101201 1 0 17:22 ? 00:00:00 /usr/sbin/rpc.mountdroot 101206 2 0 17:22 ? 00:00:00 [nfsd4]root 101207 2 0 17:22 ? 00:00:00 [nfsd4_callbacks]root 101213 2 0 17:22 ? 00:00:00 [nfsd]root 101214 2 0 17:22 ? 00:00:00 [nfsd]root 101215 2 0 17:22 ? 00:00:00 [nfsd]root 101216 2 0 17:22 ? 00:00:00 [nfsd]root 101217 2 0 17:22 ? 00:00:00 [nfsd]root 101218 2 0 17:22 ? 00:00:00 [nfsd]root 101219 2 0 17:22 ? 00:00:00 [nfsd]root 101220 2 0 17:22 ? 00:00:00 [nfsd]root 101243 100830 0 17:28 pts/0 00:00:00 grep -E --color=auto rpc|nfs |
nfsd(rpc.nfsd)主进程,主要是管理客户端能否登入服务端,登入者ID判别。
mountd(rpc.mountd)管理NFS文件系统,登入者的权限管理
rpc.lockd(非必要)用来锁定文件,用于客户端同时写入
rpc.statd(非必要)检查文件一致性
rpc.idmapd 名字映射后台进程
七、配置NFS/RPCBIND开机自启动
|
1
2
|
> systemctl enable rpcbind.service> systemctl enable nfs.service |
八、NFS服务端配置文件
exports文件配置格式:
|
1
|
NFS共享的目录 NFS客户端地址1(参数1,参数2,...) 客户端地址2(参数1,参数2,...) |
说明:
NFS共享目录:
|
1
|
要用绝对路径,可被nfsnobody读写。 |
NFS客户端地址:
|
1
2
3
4
5
|
指定IP: 192.168.0.1指定子网所有主机: 192.168.0.0/24指定域名的主机: test.com指定域名所有主机: *.test.com所有主机: * |
参数:
|
1
2
3
4
5
6
7
8
9
10
|
ro:目录只读rw:目录读写sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性async:将数据先保存在内存缓冲区中,必要时才写入磁盘all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody)no_all_squash:与all_squash取反(默认设置)root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置)no_root_squash:与rootsquash取反anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx)anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户 |
例如:
|
1
|
/data/tmp 192.168.1.0/24(rw,sync,all_squash) |
创建需要共享的目录
|
1
2
|
> mkdir -p /data/tmp> chown -R nfsnobody.nfsnobody /data/tmp |
重新加载nfs配置
|
1
|
> exportfs -rv/systemctl reload nfs.service |
查看nfs服务器挂载情况
|
1
|
> showmount -e localhost |
九、客户端挂载测试/本地也可以
安装rpc
yum -y install nfs-utils rpcbind
systemctl start rpcbind.start
创建目录
|
1
2
|
> mkdir -p /data/tmp2> mount -t nfs 192.168.1.233:/data/tmp /data/tmp2 |
查看挂载
|
1
|
> df -h |
在tmp下创建文件
|
1
|
> touch /data/tmp/1.txt |
查看tmp2下是否有文件
|
1
|
> ls /data/tmp2 |
卸载挂载
|
1
|
> umount /data/tmp2 |
注意:
我们服务器和客户端都要安装nfs-utils、rpcbind
mount: wrong fs type, bad option, bad superblock on 125.64.41.244:/data/img,
missing codepage or helper program, or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount.<type> helper program)
In some cases useful info is found in syslog - try
dmesg | tail or so
根据错误提示,查看/sbin/mount.<type>文件,果然发现没有/sbin/mount.nfs的文件,安装nfs-utils即可
还可以通过/etc/fstab自动加载,但是会存在问题,因为系统加载是先走/etc/fstab,后走网络,我们的nfs是基于网络的,方法是有的,这里不一一说了,建议将挂载写入到/etc/rc.local即可
10. 应用实践
服务器端
[root@Poppy ~]# yum install rpcbind nfs-utils
[root@joker ~]# cat /etc/exports
# share /nfsbackup by joker for poppy at today
/nfsbackup nfs客户端ip(rw,sync,all_squash,anonuid=1006,anongid=1006) # 开启本地账号映射,就是远程过来的用户相当于本地账号www
[root@joker ~]# id www
uid=1006(www) gid=1006(www) groups=1006(www)
[root@joker ~]# ls -ld /nfsbackup/
drwxr-xr-x 3 www www 4096 Jun 12 18:01 /nfsbackup/
[root@joker ~]# systemctl start nfs.service
[root@joker ~]# showmount -e 127.0.0.1
Export list for 127.0.0.1:
/nfsbackup nfs客户端ip
客户端
[root@Poppy ~]# yum install rpcbind nfs-utils
[root@Poppy ~]# systemctl start rpcbind.service
[root@Poppy ~]# mount -t nfs nfs服务器ip/nfsbackup /joker/
/joker/的目录最好是应用的软件有写的权限
nfs之脚气的更多相关文章
- nfs 笔记 2
http://woxihuanpes.blog.163.com/blog/static/12423219820097139145238/ http://blog.csdn.net/willvc123/ ...
- linux NFS 配置步骤
转载 http://woxihuanpes.blog.163.com/blog/static/12423219820097139145238/ NFS server可以看作是一个FILE SERVER ...
- ubuntu 14.04LTS 环境下配置NFS服务
简言之,NFS(Network FileSystem,网络文件系统)用于在不同机器,不同操作系统之间通过网络互相分享各自的文件.NFS设计之初就是为了在不同的系统间使用,所以它的通讯协议设计与主机及操 ...
- 【Oracle 集群】11G RAC 知识图文详细教程之RAC在LINUX上使用NFS安装前准备(六)
RAC在LINUX上使用NFS安装前准备(六) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇 ...
- Ubuntu搭建NFS
NFS全称是Network File System,网络文件系统.它可以通过网络实现文件共享.其结构图大概是这样的: 在机器E上开启NFS服务,机器ABCD都挂载NFS,这样可以实现机器ABCD共享文 ...
- nfs挂载配置
nfs挂载步骤 服务器端 1.安装nfs-utils rpcbind $sudo yum –y install nfs-utils rpcbind 2.文件开放出去配置/etc/exports 例子: ...
- NFS服务器搭建——可用于共享文件或负载均衡文件共享服务器使用
一.软件包安装 yum -y install nfs-utils rpcbind 二.服务器端配置共享目录 1. 在服务器上创建NFS共享目录:mkdir /usr/local/test 2. 设置 ...
- NFS网络共享服务部署
10.3 NFS服务端部署环境准备 10.3.1 NFS服务部署服务器准备 服务器系统 角色 IP Centos6.7 x86_64 NFS服务器端(NFS-server) 192.168.1.14 ...
- Linux NFS服务器的安装与配置
一.NFS服务简介 NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操 ...
随机推荐
- 《Effective C++》第5章 实现-读书笔记
章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...
- asp.net button浏览器端事件和服务器端事件
OnClientClick:触发浏览器端的响应,OnClick触发服务器端响应; 在服务器aspx.cs脚本中设置按钮属性: this.btnTest.Attributes["OnClick ...
- c++下基于windows socket的服务器客户端程序(基于UDP协议)
前天写了一个基于tcp协议的服务器客户端程序,今天写了一个基于UDP协议的,由于在上一篇使用TCP协议的服务器中注释已经较为详细,且许多api的调用是相同的,故不再另外注释. 使用UDP协议需要注意几 ...
- MySQL笔记之多表
貌似很久不写博客了,趁着项目刚完结,记录一下这段时间了解到的一些认识,或许有些地方理解的还不够到位,看到的希望能不吝赐教. 外键 概念 与索引的关系 写法 查询 一对多多对一查询 多对多查询 插入 多 ...
- clean-css 安装 使用
https://github.com/jakubpawlowicz/clean-css-cli https://davidwalsh.name/clean-css
- iOS下简单实现滑动导航条
功能介绍 最近在做一款ios的app,其中有一个页面需要分成三个版块,版块之间可以通过左右滑动来进行切换,也可以通过点击上方的按钮来切换,好像在android中可以用过ViewPager + Frag ...
- Git 中文教程
以下内容转载自:http://www.open-open.com/lib/view/open1328928294702.html Git是一个分布式的版本控制工具,本篇文章从介绍Git开始,重点 在于 ...
- iOS内存管理(objective-c)
移动app开发中,由于移动设备内存的限制,内存管理是一个非常重要的话题.objective-c的内存管理,不仅是面试当中老生常谈的一个必问话题,也是日常项目开发中,特别需要重视的环节.对于笔者这种以j ...
- KT板
前言 好吧,我是学计算机的,现在的职位是网站美工,只是自己学了点PS.AI的,其实对材质什么的也不太了解.以下的一些信息,基本都是自己先网上查,最后找厂商确认的,不能保证完全精确,但求基本符合事实. ...
- margin top 无效
常出现两种情况: (一)margin-top失效 两个层box1和box2,box1具有浮动属性,box2没有,这时候设置box2的上边距margin-top没有效果. 解决办法: 1.box2增加f ...