nfs服务器

nfs服务器

文章目录

NFS 服务

NFS(Network File System,网络文件系统)是一种实现不同计算机之间文件共享的经典技术。它允许网络中的客户端计算机像访问本地文件一样,透明地访问远程服务器上的文件资源,极大地简化了跨设备的数据共享与管理流程。作为一种成熟的网络文件共享技术,凭借其简洁、高效、跨平台等优势,在各类网络环境中得到了广泛应用。尽管存在一些局限性,但通过版本迭代和与其他技术的结合,NFS 仍然在网络存储领域发挥着重要作用。

核心架构

  • NFS 服务器:负责存储文件资源,并通过 NFS 协议将这些资源共享给授权的客户端。服务器上运行着 NFS 守护进程,用于监听客户端的请求、处理文件访问操作以及维护共享目录的权限控制。

  • NFS 客户端:通过 NFS 协议访问服务器上的共享文件。客户端需要挂载(Mount)服务器的共享目录到本地文件系统,之后就可以像操作本地文件一样对远程文件进行读写、创建、删除等操作。

工作原理

  1. 注册阶段:NFS服务端启动服务时,向RPC服务注册服务端口。
  2. 建立连接阶段:客户端向RPC服务器查询NFS服务器服务端口,然后再向NFS 服务器的服务端口发起挂载请求。
  3. 挂载阶段:服务器验证客户端的身份和权限,如果通过验证,则允许客户端将共享目录挂载到本地指定的挂载点。
  4. 文件访问阶段:挂载成功后,客户端对远程文件的操作(如读取、写入)会通过 RPC 协议转换为对服务器的远程过程调用。服务器接收到请求后,执行相应的文件操作,并将结果返回给客户端。
  5. 权限控制:NFS 通过文件系统的权限机制(如 UNIX 的用户 ID 和组 ID)来控制客户端对文件的访问。服务器会根据客户端的身份以及共享目录的权限设置,决定是否允许客户端的操作。

优势

  • 透明性:客户端访问远程文件的方式与访问本地文件几乎一致,用户无需关注文件的实际存储位置,降低了使用复杂度。

  • 跨平台性:NFS 支持多种操作系统,如 UNIX、Linux、macOS 等,能够实现不同操作系统之间的文件共享。

  • 高效性:通过优化的数据传输机制和缓存策略,NFS 能够提供较高的文件访问性能,满足多数网络环境下的文件共享需求。

  • 易于管理:NFS 的配置相对简单,管理员可以通过修改配置文件轻松设置共享目录、访问权限等,便于集中管理网络中的文件资源。

共享目录

NFS服务器主要配置文件是**/etc/exports**,目录**/etc/exports.d中任何以.exports**结尾且不以点(.)开头的文件也会生效。 所有这些文件都使用相同的语法

server端

bash 复制代码
[root@server ~ 09:00:12]# yum install -y nfs-utils

[root@server ~ 09:30:17]# mkdir -p /shares/webapp

[root@server ~ 09:32:12]# ll -d /shares/webapp
drwxr-xr-x 2 root root 6 Nov 21 09:32 /shares/webapp

[root@server ~ 09:32:52]# chown demo01 /shares/webapp

[root@server ~ 09:33:11]# ll -d /shares/webapp
drwxr-xr-x 2 demo01 root 6 Nov 21 09:32 /shares/webapp

[root@server ~ 09:33:13]# cat /etc/exports

[root@server ~ 09:34:34]# vim /etc/exports

/shares/webapp 10.1.8.0/24(rw)

[root@server ~ 09:39:06]# systemctl status rpcbind
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
   Active: inactive (dead)
   
[root@server ~ 09:40:02]# systemctl enable nfs-server.service --now

Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

[root@server ~ 09:40:33]# systemctl status rpcbind
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2025-11-21 09:40:33 CST; 1s ago
  Process: 11434 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 11437 (rpcbind)
   CGroup: /system.slice/rpcbind.service
           └─11437 /sbin/rpcbind -w

Nov 21 09:40:33 server.demo.cloud systemd[1]: Starting RPC bind service...
Nov 21 09:40:33 server.demo.cloud systemd[1]: Started RPC bind service.

[root@server ~ 09:40:34]# ss -lnt4
State      Recv-Q Send-Q Local Address:Port                Peer Address:Port              
LISTEN     0      64                 *:33932                          *:*                  
LISTEN     0      128                *:57004                          *:*                  
LISTEN     0      128                *:111                            *:*                  
LISTEN     0      128                *:20048                          *:*                  
LISTEN     0      128                *:22                             *:*                  
LISTEN     0      100        127.0.0.1:25                             *:*                  
LISTEN     0      64                 *:2049                           *:*              

[root@server ~ 09:40:48]# ss -lpt4
State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port                
LISTEN     0      64               *:33932                          *:*                    
LISTEN     0      128              *:57004                          *:*                     users:(("rpc.statd",pid=11432,fd=9))
LISTEN     0      128              *:sunrpc                         *:*                     users:(("rpcbind",pid=11437,fd=8))
LISTEN     0      128              *:mountd                         *:*                     users:(("rpc.mountd",pid=11445,fd=8))
LISTEN     0      128              *:ssh                            *:*                     users:(("sshd",pid=923,fd=3))
LISTEN     0      100      127.0.0.1:smtp                           *:*                     users:(("master",pid=1064,fd=13))
LISTEN     0      64               *:nfs                            *:*                    

[root@server ~ 09:41:02]# exportfs
/shares/webapp	10.1.8.0/24

[root@server ~ 09:42:50]# exportfs -v
/shares/webapp	10.1.8.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

[root@server ~ 09:43:10]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
     
[root@server ~ 09:45:17]# echo hello world from nfs > /shares/webapp/index.html

[root@server ~ 09:43:53]# curl http://10.1.8.11
hello world from nfs

[root@server ~ 10:22:56]# vim /etc/exports

/shares/webapp 10.1.8.0/24(rw,no_root_squash)

[root@server ~ 10:24:21]# exportfs -r


/shares/webapp 10.1.8.0/24(rw,no_root_squash)

client端

bash 复制代码
[root@client ~ 09:58:2]# yum install -y nfs-utils

[root@client ~ 09:58:9]# showmount -e server

[root@client ~ 09:58:20]# yum install -y nginx

[root@client ~ 09:58:29]# mount -t nfs 10.1.8.10:/shares/webapp /usr/share/nginx/html

[root@client ~ 09:58:35]# systemctl enable nginx.service --now
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

[root@client ~ 10:00:12]# df /usr/share/nginx/html/
Filesystem               1K-blocks    Used Available Use% Mounted on
10.1.8.10:/shares/webapp  52403200 1648256  50754944   4% /usr/share/nginx/html

#在/etc/exports里添加no_root_squash后才可以修改文件

[root@client ~ 10:16:21]# cd /usr/share/nginx/html/

[root@client html 10:21:05]# echo hello world > web1.html

[root@client html 10:24:55]# useradd tom

[root@client html 10:26:05]# su tom

[tom@client html 10:26:09]$ echo hello world > web1.html
bash: web1.html: Permission denied


#持久化挂载在/etc/fstab最后一行添加

#10.1.8.10:/shares/webapp /usr/share/nginx/html nfs defaults        0 0

yum故障分析

bash 复制代码
[root@client ~ 09:56:35]# cd /etc/yum.repos.d/

[root@client yum.repos.d 09:57:00]# mv old/* .

[root@client yum.repos.d 09:57:08]# mv dvd.repo old
bash 复制代码
[root@client ~ 09:56:35]# cd /etc/yum.repos.d/

[root@client yum.repos.d 09:57:00]# mv old/* .

[root@client yum.repos.d 09:57:08]# mv dvd.repo old
相关推荐
此生只爱蛋1 天前
【Linux】正/反向代理
linux·运维·服务器
qq_5470261791 天前
Linux 基础
linux·运维·arm开发
zfj3211 天前
sshd除了远程shell外还有哪些功能
linux·ssh·sftp·shell
废春啊1 天前
前端工程化
运维·服务器·前端
我只会发热1 天前
Ubuntu 20.04.6 根目录扩容(图文详解)
linux·运维·ubuntu
爱潜水的小L1 天前
自学嵌入式day34,ipc进程间通信
linux·运维·服务器
保持低旋律节奏1 天前
linux——进程状态
android·linux·php
zhuzewennamoamtf1 天前
Linux I2C设备驱动
linux·运维·服务器
zhixingheyi_tian1 天前
Linux 之 memory 碎片
linux
邂逅星河浪漫1 天前
【域名解析+反向代理】配置与实现(步骤)-SwitchHosts-Nginx
linux·nginx·反向代理·域名解析·switchhosts