-
打赏
jQuery火箭图标返回顶部代码</h1>
<div style="border: 1px solid #dfdfdf;border-top:none;"></div>
<div style=" height: 200px; overflow:hidden;">
<span class="pre-scrollable"><div id="cnblogs_post_body" class="blogpost-body">
<h2><span style="font-family: 隶书;">什么是文件系统,NFS文件系统又是什么?</span></h2>
<p>简单的说,文件系统就是通过软件对磁盘上的数据进行组织和管理的一种机制,对其的一种封装或透视。</p>
<p><img src="https://images2018.cnblogs.com/blog/1430251/201809/1430251-20180913144514830-1342954188.png" alt="" /></p>
<p>你女朋友拍了美美的暧昧照片,放一个文件夹里发送给了A服务器,当你来访问的时候,被F5路由给B服务器了,然后你找不到资源了,你女朋友给你闹,你就不性福了哈哈,所以我们很容易想到,是不是可以把文件上传到一个公用的服务器上呢? 这样不管访问的是A还是B,读、取文件都只存在一份。答案是肯定的,这个公用的服务器我们也称之为文件服务器,NFS,Network File System。顾名思义,网络文件系统,即通过网络,对在不同主机上的文件进行共享。</p>
<h2><span style="font-family: 隶书;">NFS包括两部分,服务端(servlet)及客户端(client)</span></h2>
<p>由于NFS服务功能很多,会有很多端口,这些端口还有可能不固定,(pc -ef | egrep nfs 我们可以看到nfs 不同的端口号)那么客户端就无法与服务器进行通信,因为程序间通信必须通过端口(tcp/udp都是端到端通信),那么就需要一个中间的桥接机制,RPC进程即充当这样一个角色,RPC的端口是一定的(111),当NFS启动时,会向RPC进行注册, (rpc 一定是在nfs启动前,就已经启动了,)那么客户端PRC就能与服务器RPC进行通信, 从而进行文件的传输。</p>
<p>当客户端用户打开一个文件或目录时,内核会判断,该文件是本地文件还是远程共享目录文件(如果是远程共享文件就都挂载mount 到/etc/init.d/rc.local下面),如果是远程文件则通过RPC进程访问远程NFS服务端的共享目录,如果是本地文件,则直接打开。<br />为了更好的并发,RPC进程及NFS进程都有多个。</p>
<div class="cnblogs_code">
<pre> ps -ef |egrep <span style="color: #800000;">"</span><span style="color: #800000;">rpc|nfs</span><span style="color: #800000;">" < #这样我们可以查看到的进程</span></pre>
</div>
<table style=" 620px;" border="2" align="center">
<tbody>
<tr>
<td style="text-align: center;" colspan="2"><strong>NFS服务进程启动说明表格</strong></td>
</tr>
<tr>
<td>服务(进程名字)</td>
<td>用途说明</td>
</tr>
<tr>
<td>nfsd(rpc.nfsd)</td>
<td>rpc.nfsd主要功能就是管理NFS客户端是否能够登陆NFS服务器主机(登陆着id判别)</td>
</tr>
<tr>
<td>mountd(rpc.mountd)</td>
<td>rpc.mountd管理nfs文件系统,当nfs客户端顺利通过rpc.nfsd服务端后,它可以使用NFS服务器提供数据,读取NFS的配置文件/etc/exports来进行文件系统权限比对</td>
</tr>
<tr>
<td>rpc.statd</td>
<td>检查文件的一致性</td>
</tr>
<tr>
<td colspan="2">这些进程都可以执行man 进程名 来查看进程的详细功能</td>
</tr>
</tbody>
</table>
<h2><span style="font-family: 隶书;">NFS配置文件</span></h2>
<h4>NFS配置文件定义</h4>
<div>NFS的配置文件为 /etc/exports,内容格式,如:<共享目录> 客户端1(选项) [客户端2(选项) ...]</div>
<div>共享目录:NFS共享给客户机的目录。</div>
<div>客户端 :网络中可以访问此目录的主机。多个客户端以空格分隔。<br clear="none" />选项 :设置目录的访问权限、用户映射等,多个选项以逗号分隔。</div>
<div>例如:<span style="background-color: #ffff00;">/data 192.168.1.0/24(rw,insecure,sync,all_squash,anonuid= 65534,anongid=65534)</span></div>
<h4>NFS配置文件路径</h4>
<table style=" 620px;" border="2" align="center">
<tbody>
<tr>
<td>NFS常用路径</td>
<td>说明</td>
</tr>
<tr>
<td>/etc/exports</td>
<td><span style="background-color: #ffff00;">NFS服务主配置文件</span>,配置NFS具体共享服务的地点,默认内容是空的</td>
</tr>
<tr>
<td>/usr/sbin/exports</td>
<td>NFS服务的管理命令
<div>exportfs<br clear="none" /> 不重启nfs服务应用更新,相关选项如下:</div>
<div> -a 全部挂载或卸载 /etc/exports中的内容<br clear="none" /> -r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab<br clear="none" /> -u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)<br clear="none" /> -v 在export的时候,将详细的信息输出到屏幕上。<br clear="none" /><br clear="none" />nfsstat<br clear="none" /> 查看NFS的运行状态。</div>
<div> </div>
<div>rpcinfo</div>
<div> 查看rpc服务注册情况。</div>
<div> 相关选项:</div>
<div> -p 显示所有的端口与程序信息。</div>
<div> 示例:</div>
<div> rpcinfo -p localhost #列出本机的RPC注册状况。</div>
<div><br clear="none" />showmount<br clear="none" />
<div> 查询nfs共享目录信息,相关选项如下:</div>
-a 显示已经于客户端连接上的目录信息<br clear="none" /> -e IP或者hostname 显示此IP地址分享出来的目录</div>
<div> </div>
<div> 示例:</div>
<div> showmount -e localhost #查询本机nfs共享目录情况</div>
<div> showmount -a localhost #查询本机共享目录连接情况</div>
</td>
</tr>
<tr>
<td>/usr/sbin/showmount</td>
<td>用来查看客户度那,查看NFS配置及挂载结果的命令</td>
</tr>
<tr>
<td>/var/lib/nfs/etab</td>
<td>NFS配置文件的完成参数设定的文件</td>
</tr>
</tbody>
</table>
<h4> NFS配置参数权限</h4>
<p><span style="background-color: #ff0000;">rw </span> 表示可读写权限。</p>
<p><span style="background-color: #ff0000;">sync</span> 请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回。</p>
<p><span style="background-color: #ffffff;"><span style="background-color: #ff0000;">async</span> </span>写入数据时会先写到内存缓冲区,直到硬盘有空档才会在写入磁盘,这样可以提升写入效率。风险是若服务器宕机或不正常关机,会损失缓冲区中未写入硬盘的数据(解决办法:服务器主板电池或UPS不间断电源)。</p>
<p><span style="background-color: #ff0000;">all_squash</span> 不管访问NFS Server共享目录的用户身份如何,它的权限都将被压缩为匿名用户,同时它的UID和GID都会变成nfsnobody账号身份,在生产环境中配置NFS的重要技巧:</p>
<p> 1)确保所有客户端服务器对NFS共享目录具备相同的用户访问权限,all_squash把所有客户端都压缩成匿名用户(UID相同),就是anonuid,anongid指定的UID和GID相同,</p>
<p> 2)所有的客户端和服务器端都需要有一个相同的UID和GID的用户,nfsnodoby(UID必须相同)</p>
<p><span style="background-color: #ff0000;">anonuid</span> 参数以anon*开头即值anonymous匿名用户,这个用户的UID设置值通常为nfsnobody的UID值,当然我们也可以自行设置这个UID值。但是,UID必须存在于/etc/passwd中。在多个NFS Clients时,如多台web server共享一个NFS目录时,通过这个参数可以使得不同的NFS Clients写入的数据对所有NFS Clients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用。一般默认就好</p>
<p><span style="background-color: #ff0000;">anongid</span> 同anonuid,区别是把uid(用户id)换成gid(组id)</p>
<p><span style="background-color: #ff0000;">ro</span> 表示只有只读权限</p>
<p>sync是synchronized的缩写,意为同步,async是asynchonous的缩写意为异步,怎么理解同步和异步的,比如:你女朋买了一张票等你下班一起看电影,她会亲自给你电影票然后一起看电影,在比如生产者跟消费者,(要实现这个问题,需要用到多线程,要实现多线程,就需要继承(extend)Thread类,实现Runnable,Future接口并写run方法,,,线程有6中状态,初始,运行,阻塞,等待,等待超时,结束,,,咳咳咳跑题了)我们常常加同步锁synchronized,这样就是生产一个,消费一个(Linux分为实时同步和定时同步)。异步,在比如生产者跟消费者,生产100个产品,消费者只能消费50个,那么就会把生产者的产品放在超市,消费者就会去超市买东西,</p>
<div>总结NFS服务的配置过程:</div>
<div>--服务端--</div>
<div>
<p>1)查看系统版本,并检测有没有安装nfs和rpcbind服务,如果没有安装就执行:</p>
<div class="cnblogs_code">
<pre>yum install nfs-utils rpcbind -y</pre>
</div>
<p><img src="https://images2018.cnblogs.com/blog/1430251/201809/1430251-20180912155442215-661837597.png" alt="" /></p>
</div>
<div>2.启动服务(先启动rpcbind)</div>
<div>
<div class="cnblogs_code">
<pre>/etc/init.d/rpcbind start</pre>
</div>
</div>
<div>3.设置开机自启动</div>
<div>
<div class="cnblogs_code">
<pre><span style="color: #000000;">chkconfig nfs on
chkconfig rpcbind on</span></pre>
</div>
</div>
<div>4.配置NFS服务</div>
<div>
<div class="cnblogs_code">
<pre>echo <span style="color: #800000;">"</span><span style="color: #800000;">/data 192.168.1.8/24(rw,sync)</span><span style="color: #800000;">"</span><span style="color: #000000;">
mkdir </span>-p /<span style="color: #000000;">data
chown </span>-R nfsnobody.nfsnobody /data</pre>
</div>
<p>5.重新加载服务</p>
</div>
<div>
<div class="cnblogs_code">
<pre>/etc/init.d/nfs reload <#相当于 exportfs -r</pre>
</div>
</div>
<div>6.检查或测试挂载</div>
<div>
<div class="cnblogs_code">
<pre>showmount -<span style="color: #000000;">e localhost
mount </span>-t nfs <span style="color: #800080;">192.168</span>.<span style="color: #800080;">1.8</span>:/data /<span style="color: #000000;">mnt<br /></span></pre>
</div>
</div>
<div>--客户端-</div>
<div>1.安装软件</div>
<div>
<div class="cnblogs_code">
<pre>yum install -y nfs-utils rpcbind</pre>
</div>
</div>
<div>2.启动rpcbind</div>
<div>
<div class="cnblogs_code">
<pre>/etc/init.d/rpcbind start</pre>
</div>
</div>
<div>3.配置开机自启动</div>
<div>
<div class="cnblogs_Highlighter">
<pre class="csharp;gutter:true;">chkconfig rpcbind on</pre>
</div>
</div>
<div>4.测试服务端共享情况</div>
<div>
<div class="cnblogs_code">
<pre>show -e <span style="color: #800080;">192.168</span>.<span style="color: #800080;">1.8</span></pre>
</div>
</div>
<div>5.挂载</div>
<div>
<div class="cnblogs_code">
<pre>mkdir -p /<span style="color: #000000;">data
mount </span>-t nfs <span style="color: #800080;">192.168</span>.<span style="color: #800080;">1.8</span>:/data /tmp</pre>
</div>
</div>
<div>如果客户端没有写权限,就检查共享文件的配置是否是rw权限,检查共享的文件的本身是否是rw 权限(也就是检查/data ls -li /data 如果不是655 就chmod 655 /data)</div>
<div>常见错误</div>
<div>1.df -h 检查服务端的NFS服务是不是启动成功,</div>
<div>2.确认NFS客户端showmount是否OK。</div>
<div>3.确认rpcbind上是否有NFS注册,(rpcbind必须先启动)</div>
<div>3.确认网络是否通畅</div>
<div>4.确认是否因为防火墙挡住(一般内网不需要开启防火墙,在出口加防火墙就够了)(/etc/init.d/iptables stop/start)</div>
</div>
</span>
</div>
<div style="text-align: center;">
<a href="https://www.cnblogs.com/liang-io/p/9640274.html" target="_blank" style="font-size: 16px;background-color: rgb(24, 144, 255); color: white;padding: 8px;padding-left: 30px;padding-right: 30px;border-radius: 2rem;">查看全文</a>
</div>
</li>
<div style="border: 1px solid #dfdfdf;border-top:none;"></div>
<li class="ul-li" style="padding-left:15px;padding-right: 15px;">
<b>相关阅读:</b><br>
<nobr>
<a href="fengchuiguobanxia-p-14603998.html" target="_blank">大二下学期第一次结对作业(第二阶段)</a>
<br/><a href="fengchuiguobanxia-p-14599463.html" target="_blank">大二下学期阅读笔记(人月神话)</a>
<br/><a href="fengchuiguobanxia-p-14912487.html" target="_blank">大二下每周总结</a>
<br/><a href="fengchuiguobanxia-p-14593523.html" target="_blank">大二下学期第一次结对作业(第二阶段)</a>
<br/><a href="fengchuiguobanxia-p-14593445.html" target="_blank">大二下学期第一次结对作业(第二阶段)</a>
<br/><a href="chong-zuo3322-p-13879862.html" target="_blank">elasticsearch mappings之dynamic的三种状态</a>
<br/><a href="chong-zuo3322-p-13879804.html" target="_blank">elasticsearch mapping映射属性_source、_all、store和index</a>
<br/><a href="wrljzb-p-14170745.html" target="_blank">Java学习</a>
<br/><a href="wrljzb-p-14170735.html" target="_blank">Java学习</a>
<br/><a href="wrljzb-p-14170728.html" target="_blank">Java学习</a>
<br/> </nobr>
</li>
<div style="border: 1px solid #dfdfdf;border-top:none;"></div>
<li class="list-group-item from-a mb-2" style="margin:15px;">
原文地址:https://www.cnblogs.com/liang-io/p/9640274.html
</li>
</ul>
</div>
<!-- 右侧开始 -->
<div class="right-kd" style="margin: auto;margin: 0px;float: left;">
<ul class="right-kd" style="word-break:break-all;border: 1px solid #dfdfdf;border-radius: 3px 3px 3px 3px;padding: 0px;margin: 0px;">
<li class="ul-li-bg ul-li-title" aria-current="true" style="padding-left:15px;padding-right: 15px;">
最新文章
</li>
<li class="ul-li" style="padding-left:15px;padding-right:15px;">
<nobr>
<a href="amize-p-14861440.html" target="_blank">git的gitignore配置</a>
<br/><a href="amize-p-14843872.html" target="_blank">常用cmd命令</a>
<br/><a href="amize-p-14833666.html" target="_blank">node.js实际应用【readFile在on里面还是外面】</a>
<br/><a href="amize-p-14832198.html" target="_blank">flask展示mysql数据【利用pandas 】</a>
<br/><a href="Sakuraba-p-14909604.html" target="_blank">软工划水报告-paddle教程阅读 4/13</a>
<br/><a href="Sakuraba-p-14909561.html" target="_blank">软工划水日报-Springboot学习笔记 4/12</a>
<br/><a href="Sakuraba-p-14909480.html" target="_blank">软工划水日报-paddle的试运行 4/11</a>
<br/><a href="Sakuraba-p-14909374.html" target="_blank">软工划水日报-《构建之法》阅读笔记SONO.4 4/10</a>
<br/><a href="Sakuraba-p-14909322.html" target="_blank">软工划水日报-中国软件杯赛题可行性分析(自我中心) 4/9</a>
<br/><a href="Sakuraba-p-14909224.html" target="_blank">软工划水日报-问卷星最简单代签法 4/8</a>
<br/> </nobr>
</li>
</ul>
<ul class="right-kd" style="word-break:break-all;border: 1px solid #dfdfdf;border-radius: 3px 3px 3px 3px;padding: 0px;margin-top: 10px;">
<li class="list-group-item ul-li-bg ul-li-title" aria-current="true" style="padding-left:15px;padding-right: 15px;">
热门文章
</li>
<li class="ul-li" style="padding-left:15px;padding-right: 15px;">
<nobr>
<a href="Sakuraba-p-14909159.html" target="_blank">软工划水日报-vue概述2 4/7</a>
<br/><a href="Sakuraba-p-14909107.html" target="_blank">软工划水日报-返校请假 4/5</a>
<br/><a href="Sakuraba-p-14909095.html" target="_blank">软工划水日报-vue概述 4/4</a>
<br/><a href="Sakuraba-p-14909003.html" target="_blank">软工划水日报-《构建之法》阅读笔记SONO.3 4/3</a>
<br/><a href="xlwu-p-13568167.html" target="_blank">多线程</a>
<br/><a href="fengchuiguobanxia-p-14641157.html" target="_blank">大二下学期项目练习(滑屏数据展示)</a>
<br/><a href="fengchuiguobanxia-p-14912505.html" target="_blank">大二下每周总结</a>
<br/><a href="fengchuiguobanxia-p-14616137.html" target="_blank">大二下学期三人结组作业(需求讨论)</a>
<br/><a href="fengchuiguobanxia-p-14616130.html" target="_blank">大二下学期第一次结对作业(第二阶段)</a>
<br/><a href="fengchuiguobanxia-p-14616124.html" target="_blank">大二下学期第一次结对作业(第二阶段)</a>
<br/> </nobr>
</li>
</ul>
</div>
</div>
</div>
<div style="clear: both;"></div>
<!-- 栅栏结束 -->
<div class="kd" style="margin: auto;">
<div style="font-size:0.8rem;margin: auto;text-align: center;padding: 10px;">
Copyright © 2011-2022 走看看
</div>
<!-- 引入底部 -->
<!-- 百度自动推送js -->
<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https'){
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else{
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
<!-- 百度自动推送js -->
</div>
</div>
<script src="https://common.cnblogs.com/scripts/jquery-2.2.0.min.js"></script>
<script src="https://www.cnblogs.com/js/blog-common.min.js"></script>
<script src="http://common.cnblogs.com/script/encoder.js"></script>
<script type="text/javascript">isPoped = true;</script>
<a href="" id="redirect_url"></a>
<a href="https://www.cnblogs.com/liang-io/p/9640274.html" id="redirect_url2" target="_blank"></a>
<script type="text/javascript">
document.onclick = function()
{
if (!isPoped)
{
document.getElementById("redirect_url").click();
document.getElementById("redirect_url2").click();
isPoped = true;
}
}
</script>
</body>
</html>