ubuntu 22.04安装NFS
<h1>一、概述</h1><h2>1. <span>定义</span></h2>
<div class="paragraph">NFS(Network File System)是一种分布式文件系统协议,最初由 Sun Microsystems 开发,并于1984年发布。它允许不同主机通过网络共享文件和目录,就像这些文件和目录是本地存储的一部分<span class="rag-tag" data-v-933efebc="" data-index="0,1" data-site-name="">。</span></div>
<h2>2. <span>工作原理</span></h2>
<ul>
<li>
<div class="paragraph"><span>客户端-服务器架构:NFS 的核心工作原理是其客户端-服务器架构。NFS 服务器提供文件系统资源,客户端通过网络请求访问这些资源<span class="rag-tag" data-v-933efebc="" data-index="2" data-site-name="">。</span></span></div>
</li>
<li>
<div class="paragraph">远程过程调用(RPC):NFS 依赖于 RPC 机制来实现客户端与服务器之间的通信。RPC 允许客户端直接调用服务器上的服务或函数,为文件操作定义标准接口<span class="rag-tag" data-v-933efebc="" data-index="3" data-site-name="">。</span></div>
</li>
<li>
<div class="paragraph">端口管理:NFS 在操作期间使用多个端口,其中端口 111 作为 RPC Portmapper 服务端口,端口 2049 作为文件系统的标准 NFS 服务端口<span class="rag-tag" data-v-933efebc="" data-index="4" data-site-name="">。</span></div>
</li>
</ul>
<h2>3. <span>架构</span></h2>
<ul>
<li>
<div class="paragraph">NFS 服务器:负责管理远程文件系统并将其共享给网络中的客户端。</div>
</li>
<li>
<div class="paragraph"><span>客户端:通过挂载远程文件系统,使得用户可以像访问本地文件一样访问远程文件。</span></div>
</li>
<li>
<div class="paragraph">传输协议:NFS 使用 TCP/IP 协议进行通信,并基于 RPC 协议来传输数据和控制信息<span class="rag-tag" data-v-933efebc="" data-index="5" data-site-name="">。</span></div>
</li>
</ul>
<h2>4. 版本演进</h2>
<ul>
<li>
<div class="paragraph"><span>NFSv4.2:当前最广泛使用的版本,结合了现代网络存储技术的优势,适用于各种应用场景,包括虚拟化和云存储<span class="rag-tag" data-v-933efebc="" data-index="6" data-site-name="">。</span></span></div>
</li>
</ul>
<h2>5. <span>应用场景</span></h2>
<ul>
<li>
<div class="paragraph">企业级文件共享:在企业环境中,NFS 用于不同工作站和服务器之间共享文件和目录,方便团队协作<span class="rag-tag" data-v-933efebc="" data-index="7" data-site-name="">。</span></div>
</li>
<li>
<div class="paragraph">虚拟化环境:在虚拟化平台中,NFS 可作为存储后端,提供虚拟机磁盘映像的存储和共享<span class="rag-tag" data-v-933efebc="" data-index="8" data-site-name="">。</span></div>
</li>
<li>
<div class="paragraph">高性能计算(HPC):在高性能计算集群中,NFS 被用作节点之间的共享文件系统,允许计算节点访问共享数据集和中间结果<span class="rag-tag" data-v-933efebc="" data-index="9" data-site-name="">。</span></div>
</li>
<li>
<div class="paragraph">数据备份和恢复:NFS 可用于集中存储备份数据,简化数据备份和恢复流程<span class="rag-tag" data-v-933efebc="" data-index="10" data-site-name="">。</span></div>
</li>
<li>
<div class="paragraph"><span>多平台数据访问:NFS 支持多种操作系统,包括 Unix、Linux 和 Windows,使得不同平台之间的文件共享变得容易<span class="rag-tag" data-v-933efebc="" data-index="11" data-site-name="">。</span></span></div>
</li>
<li>
<div class="paragraph"><span>媒体和内容制作:在视频编辑和媒体制作领域,NFS 可以用来共享大容量的媒体文件,多个编辑人员可以同时访问和编辑同一素材<span class="rag-tag" data-v-933efebc="" data-index="12" data-site-name="">。</span></span></div>
</li>
<li>
<div class="paragraph"><span>数据库文件存储:一些数据库系统支持将数据库文件存储在 NFS 共享中,便于跨多个数据库实例和应用程序共享数据<span class="rag-tag" data-v-933efebc="" data-index="13" data-site-name="">。</span></span></div>
</li>
</ul>
<h2>6. <span>优势</span></h2>
<ul>
<li>
<div class="paragraph"><span>简单易用:NFS 提供了透明的文件访问方式,用户可以像访问本地文件一样访问远程文件。</span></div>
</li>
<li>
<div class="paragraph">跨平台支持:支持多种操作系统,包括 Unix、Linux 和 Windows。</div>
</li>
<li>
<div class="paragraph">高效的数据共享:可以在多个客户端之间高效地共享文件,支持大量用户同时访问相同数据。</div>
</li>
<li>
<div class="paragraph"><span>集中管理:通过 NFS,文件可以集中存储在服务器上,简化了备份和管理。</span></div>
</li>
<li>
<div class="paragraph">灵活的权限管理:支持 UNIX 文件权限模型,允许细粒度的访问控制。</div>
</li>
<li>
<div class="paragraph">良好的扩展性:可以轻松扩展,以适应更多的用户和更大的数据集<span class="rag-tag" data-v-933efebc="" data-index="14" data-site-name="">。</span></div>
</li>
</ul>
<h2>7. <span>缺点</span></h2>
<ul>
<li>
<div class="paragraph">安全性问题:早期版本的 NFS 在安全性方面存在一些问题,但后续版本通过引入身份验证和加密机制有所改善。</div>
</li>
<li>
<div class="paragraph"><span>性能依赖于网络:NFS 的性能很大程度上依赖于网络的带宽和延迟。</span></div>
</li>
<li>
<div class="paragraph"><span>配置复杂性:在某些情况下,配置 NFS 可能会比较复杂,尤其是在涉及多个客户端和复杂权限管理时。</span></div>
</li>
<li>
<div class="paragraph">文件锁定问题:在多客户端同时访问同一文件时,可能会出现文件锁定问题,需要通过锁管理服务来解决<span class="rag-tag" data-v-933efebc="" data-index="15" data-site-name="">。</span></div>
</li>
</ul>
<div class="paragraph">NFS 是一种强大的分布式文件系统协议,广泛应用于各种场景,从企业级文件共享到高性能计算和虚拟化环境。其灵活性和高效性使其成为现代计算环境中的重要工具。</div>
<div class="paragraph"> </div>
<h1 class="paragraph">二、安装</h1>
<div class="paragraph">
<p>1.安装 NFS 服务端<br>在需要共享文件的服务器上安装 NFS 服务端:</p>
<p>更新列表</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> apt update</pre>
</div>
<p>安装nfs</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> apt <span style="color: rgba(0, 0, 255, 1)">install</span> -y nfs-kernel-server</pre>
</div>
<p> </p>
<p>2. 创建共享目录<br>创建一个目录作为 NFS 共享目录(例如/data /nfs_share):</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">mkdir</span> -p /data/nfs_share</pre>
</div>
<p> </p>
<p>设置共享目录的权限(确保其他用户可以访问):</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">chmod</span> <span style="color: rgba(128, 0, 128, 1)">777</span> /data/nfs_share</pre>
</div>
<p> </p>
<p>3. 配置 NFS 共享<br>编辑 NFS 配置文件 /etc/exports,添加共享目录的配置:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">vi</span> /etc/exports</pre>
</div>
<p> </p>
<p>在文件中添加以下内容(根据需要修改):</p>
<div class="cnblogs_code">
<p>/data/nfs_share *(rw,sync,no_all_squash,no_root_squash,no_subtree_check)</p>
</div>
<p> </p>
<p>参数解释:</p>
<p>/data/nfs_share:共享的目录路径。<br>*:允许访问的客户端 IP 范围,*表示所有ip(可以根据实际情况修改,例如:192.168.1.0/24)。<br>rw:允许读写权限。<br>sync:同步写入磁盘。</p>
<p>no_all_squash,不将所有用户映射为匿名用户<br>no_root_squash,允许客户端的 root 用户以 root 身份访问</p>
<p>no_subtree_check:减少子树检查,提高性能。</p>
<p> </p>
<p><span style="color: rgba(255, 0, 0, 1)"><strong>注意:K8S挂载NFS,请确保no_all_squash,no_root_squash这2个参数必须存在!!!</strong></span></p>
<p><span style="color: rgba(255, 0, 0, 1)"><strong>否则会出现文件无法写入的情况</strong></span></p>
<p> </p>
<p>4. 导出共享目录<br>运行以下命令使配置生效:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> exportfs -a</pre>
</div>
<p> </p>
<p>5. 启动 NFS 服务<br>启动 NFS 服务并设置开机自启:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> systemctl start nfs-kernel-<span style="color: rgba(0, 0, 0, 1)">server<br>
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> systemctl enable nfs-kernel-server</pre>
</div>
<p> </p>
<p>6. 安装 NFS 客户端<br>在需要挂载共享目录的客户端上安装 NFS 客户端:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> apt update<br>
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> apt <span style="color: rgba(0, 0, 255, 1)">install</span> -y nfs-common</pre>
</div>
<p> </p>
<p>7. 挂载共享目录(客户端)<br>在客户端上挂载 NFS 服务端的共享目录:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">mkdir</span> -p /mnt/<span style="color: rgba(0, 0, 0, 1)">nfs_share<br>
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">mount</span> -t nfs <span style="color: rgba(128, 0, 128, 1)">10.0</span>.<span style="color: rgba(128, 0, 128, 1)">2.15</span>:/data/nfs_share /mnt/nfs_share</pre>
</div>
<p> </p>
<p>参数解释:<br>10.0.2.15:NFS 服务端的 IP 地址。<br>/data/nfs_share:服务端的共享目录。<br>/mnt/nfs_share:客户端的挂载点。</p>
<p>验证挂载是否成功:</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(255, 0, 0, 1)">df -hT|grep nfs
</span><span style="color: rgba(128, 0, 128, 1)">10.0</span>.<span style="color: rgba(128, 0, 128, 1)">2.15</span>:/data/nfs_share nfs4 49G 14G 34G <span style="color: rgba(128, 0, 128, 1)">29</span>% /mnt/nfs_share</pre>
</div>
<p>有一条挂载信息,就说明挂载成功了</p>
<p> </p>
<p>查看文件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">ls</span> /mnt/nfs_share</pre>
</div>
<p> </p>
<p>8.配置自动挂载(可选)<br>如果希望在客户端开机时自动挂载 NFS 共享目录,可以编辑 /etc/fstab 文件:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">vi</span> /etc/fstab</pre>
</div>
<p> </p>
<p>添加以下内容:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">10.0</span>.<span style="color: rgba(128, 0, 128, 1)">2.15</span>:<span style="color: rgba(0, 128, 0, 1)">/data/</span><span style="color: rgba(0, 128, 0, 1)">nfs_share /mnt/nfs_share nfs defaults 0 0</span></pre>
</div>
<p>保存并退出编辑器。</p>
<p><br>9. 防火墙配置(可选)<br>如果服务端或客户端启用了防火墙,需要允许 NFS 服务通过:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> ufw allow nfs</pre>
</div>
<p> </p>
<p>或者手动允许 NFS 使用的端口(默认是 2049):</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> ufw allow <span style="color: rgba(128, 0, 128, 1)">2049</span></pre>
</div>
<p> </p>
<p>10. 测试和验证<br>在服务端创建一个测试文件:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Hello from NFS server</span><span style="color: rgba(128, 0, 0, 1)">"</span> | <span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">tee</span> /data/nfs_share/test.txt</pre>
</div>
<p> </p>
<p>在客户端检查是否可以访问该文件:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">cat</span> /mnt/nfs_share/test.txt</pre>
</div>
<p>如果显示 Hello from NFS server,说明 NFS 配置成功。</p>
<p> </p>
<p>常见问题</p>
<p>1.权限问题:确保共享目录的权限设置正确(如777)。<br>2.防火墙问题:检查防火墙是否阻止了 NFS 的端口(2049)。</p>
<p>3.挂载失败:</p>
<p>检查服务端的/etc/exports 配置是否正确,并运行sudo exportfs -ra 重新导出。</p>
<p>4.网络问题:</p>
<p>确保客户端和服务端的网络连接正常。</p>
<p> </p>
<p>通过以上步骤,你就可以在 Ubuntu 上成功安装和配置 NFS 了!</p>
</div>
<div class="paragraph"> </div>
<div class="paragraph"> </div><br><br>
来源:https://www.cnblogs.com/xiao987334176/p/18809415
頁:
[1]