当前位置: 首页 > news >正文

NFS文件共享

2. NFS文件共享

NFS 叫网络文件系统,用于多个服务之间进行数据共享。它也是主从架构,需要有服务来暴露共享的目录,然后客户通过挂载的形式与服务进行连接。

要想使用 NFS 功能,服务端和客户端都需要安装 nfs-utils 工具包。

dnf install nfs-utils -y

注意:服务端和客户端都要安装。

2.1 配置服务端

1、创建共享目录

[root@server ~]# mkdir /opt/nfs/data -p

2、将这个目录暴露出去,需要修改 /etc/exports 文件。

[root@server ~]# vim /etc/exports

在文件中添加如下的内容:

/opt/nfs/data   192.168.72.0/24(rw,sync)

[!CAUTION]

这个文件配置需要注意如下几点:

  1. 每一行代表暴露一个目录
  2. IP地址可以写成主机名,也可定成IP,还可以写成IP段。多个 IP 之间使用空格分隔
  3. IP地址和后面的圆括号之间不能有空格。
  4. 圆括号中都有默认值,但是值与值之间使用逗号分隔且不能有空格。

4、防火墙放行相关服务

# 查看目录放行的服务
[root@server ~]# firewall-cmd --list-service
cockpit dhcpv6-client ntp ssh[root@server ~]# firewall-cmd --permanent --add-service=nfs --add-service=rpc-bind --add-service=mountd 
success
[root@server ~]# firewall-cmd --reload 
success
[root@server ~]# firewall-cmd --list-services 
cockpit dhcpv6-client mountd nfs ntp rpc-bind ssh

5、启动NFS服务

[root@server ~]# systemctl start nfs-server
[root@server ~]# systemctl status nfs-server
● nfs-server.service - NFS server and servicesLoaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; preset: disabled)Active: active (exited) since Wed 2025-10-29 20:36:40 CST; 6s agoDocs: man:rpc.nfsd(8)man:exportfs(8)Process: 13571 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)Process: 13572 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS)Process: 13593 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited>Main PID: 13593 (code=exited, status=0/SUCCESS)CPU: 28msOct 29 20:36:40 server systemd[1]: Starting NFS server and services...
Oct 29 20:36:40 server systemd[1]: Finished NFS server and services.

2.2 配置客户端

1、创建挂载点

[root@client ~]# mkdir /opt/data -p

2、将挂载点与共享目录关联

[root@client ~]# showmount -e 192.168.72.133
Export list for 192.168.72.133:
/opt/nfs/data 192.168.72.0/24# 将共享目录挂载到挂载点
[root@client ~]# mount -t nfs 192.168.72.133:/opt/nfs/data /opt/data
[root@client ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
devtmpfs                      4.0M     0  4.0M   0% /dev
tmpfs                         966M     0  966M   0% /dev/shm
tmpfs                         387M  5.7M  381M   2% /run
efivarfs                      256K   56K  196K  23% /sys/firmware/efi/efivars
/dev/mapper/rhel-root          65G  1.9G   63G   3% /
/dev/nvme0n1p2                960M  200M  761M  21% /boot
/dev/nvme0n1p1                599M  7.1M  592M   2% /boot/efi
/dev/sr0                       12G   12G     0 100% /mnt
/dev/mapper/rhel-home          32G  258M   32G   1% /home
tmpfs                         194M     0  194M   0% /run/user/0
192.168.72.133:/opt/nfs/data   65G  1.9G   63G   3% /opt/data

上面是临时挂载,如果要想永久挂载我们可以有两种方式:

  1. 修改 /etc/fstab 文件,在文件的最后添加如下内容:

    192.168.72.133:/opt/nfs/data	/opt/data	nfs	defaults 0 0
    

    添加好后执行 mount -a 测试,如果没有错误信息则表示成功。

  2. 第二种方式是安装 autofs 软件,然后再进行配置。

2.3 共享测试

2.3.1 服务端测试

1、在服务端创建文件

[root@server ~]# cd /opt/nfs/data/
[root@server data]# mkdir d1
[root@server data]# touch f1

2、在客户端查看

[root@client ~]# cd /opt/data/
[root@client data]# ls
d1  f1

2.3.2 客户端测试

1、在客户端创建文件

[root@client data]# mkdir d2
mkdir: cannot create directory ‘d2’: Permission denied
[root@client data]# touch f2
touch: cannot touch 'f2': Permission denied

发现不能成功创建!

为了解决这个问题,我们先将服务端的共享目录设置权限为 777:

[root@server data]# ll -d /opt/nfs/data
drwxr-xr-x. 3 root root 26 Oct 29 20:45 /opt/nfs/data
[root@server data]# chmod 777 /opt/nfs/data -R
[root@server data]# ll -d /opt/nfs/data
drwxrwxrwx. 3 root root 26 Oct 29 20:45 /opt/nfs/data

设置好后,我们再在客户端来创建文件:

[root@client data]# mkdir d2
[root@client data]# touch f2
[root@client data]# ll
total 0
drwxrwxrwx. 2 root   root   6 Oct 29 20:45 d1
drwxr-xr-x. 2 nobody nobody 6 Oct 29 20:49 d2
-rwxrwxrwx. 1 root   root   0 Oct 29 20:45 f1
-rw-r--r--. 1 nobody nobody 0 Oct 29 20:49 f2

可以发现,此时能够创建成功,但是所创建的文件的所有者和所属组都是 nobody,这个用户从哪里来的?

[root@client data]# grep nobody /etc/passwd
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin

可以发现这个用户是一个系统用户,但是这个用户不能进行登录。而我们前面讲过,系统用户的 UID 范围在 201 ~ 999,普通用户的 UID 范围在 1000 ~ 60000 之间,而这个用户的 UID 不在这两个范围之内。所以它是一个非常特殊的用户。

因此,我们可以将服务端的共享目录的所有者和所属组设置为 nobody,而不要设置 777。

[root@server data]# chmod u=rwx,g=rx,o=rx /opt/nfs/data
[root@server data]# ll -d /opt/nfs/data
drwxr-xr-x. 4 root root 46 Oct 29 20:49 /opt/nfs/data
[root@server data]# chown -R nobody: /opt/nfs/data
[root@server data]# ll -d /opt/nfs/data
drwxr-xr-x. 4 nobody nobody 46 Oct 29 20:49 /opt/nfs/data

设置好后,我们再次通过客户端来测试。

[root@client data]# mkdir d3
[root@client data]# touch f3
[root@client data]# echo hello > f1
[root@client data]# cat f1
hello

2.4 查看服务相关端口

[root@server data]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      13570/rpc.mountd    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:46127           0.0.0.0:*               LISTEN      13566/rpc.statd     
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      941/sshd: /usr/sbin 
tcp        0      0 0.0.0.0:35239           0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::20048                :::*                    LISTEN      13570/rpc.mountd    
tcp6       0      0 :::35783                :::*                    LISTEN      -                   
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::2049                 :::*                    LISTEN      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      941/sshd: /usr/sbin 
tcp6       0      0 :::42425                :::*                    LISTEN      13566/rpc.statd     
udp        0      0 127.0.0.1:323           0.0.0.0:*                           1641/chronyd        
udp        0      0 0.0.0.0:47591           0.0.0.0:*                           -                   
udp        0      0 0.0.0.0:20048           0.0.0.0:*                           13570/rpc.mountd    
udp        0      0 0.0.0.0:37698           0.0.0.0:*                           13566/rpc.statd     
udp        0      0 127.0.0.1:1023          0.0.0.0:*                           13566/rpc.statd     
udp        0      0 0.0.0.0:111             0.0.0.0:*                           1/systemd           
udp        0      0 0.0.0.0:123             0.0.0.0:*                           1641/chronyd        
udp6       0      0 ::1:323                 :::*                                1641/chronyd        
udp6       0      0 :::60877                :::*                                13566/rpc.statd     
udp6       0      0 :::20048                :::*                                13570/rpc.mountd    
udp6       0      0 :::51236                :::*                                -                   
udp6       0      0 :::111                  :::*                                1/systemd        

或者使用如下命令:

[root@server data]# ss -lntup
Netid State  Recv-Q Send-Q Local Address:Port  Peer Address:Port Process                                                     
udp   UNCONN 0      0          127.0.0.1:323        0.0.0.0:*     users:(("chronyd",pid=1641,fd=5))                          
udp   UNCONN 0      0            0.0.0.0:47591      0.0.0.0:*                                                                
udp   UNCONN 0      0            0.0.0.0:20048      0.0.0.0:*     users:(("rpc.mountd",pid=13570,fd=4))                      
udp   UNCONN 0      0            0.0.0.0:37698      0.0.0.0:*     users:(("rpc.statd",pid=13566,fd=8))                       
udp   UNCONN 0      0          127.0.0.1:1023       0.0.0.0:*     users:(("rpc.statd",pid=13566,fd=7))                       
udp   UNCONN 0      0            0.0.0.0:111        0.0.0.0:*     users:(("rpcbind",pid=13564,fd=5),("systemd",pid=1,fd=77)) 
udp   UNCONN 0      0            0.0.0.0:123        0.0.0.0:*     users:(("chronyd",pid=1641,fd=7))                          
udp   UNCONN 0      0              [::1]:323           [::]:*     users:(("chronyd",pid=1641,fd=6))                          
udp   UNCONN 0      0               [::]:60877         [::]:*     users:(("rpc.statd",pid=13566,fd=10))                      
udp   UNCONN 0      0               [::]:20048         [::]:*     users:(("rpc.mountd",pid=13570,fd=6))                      
udp   UNCONN 0      0               [::]:51236         [::]:*                                                                
udp   UNCONN 0      0               [::]:111           [::]:*     users:(("rpcbind",pid=13564,fd=7),("systemd",pid=1,fd=79)) 
tcp   LISTEN 0      4096         0.0.0.0:20048      0.0.0.0:*     users:(("rpc.mountd",pid=13570,fd=5))                      
tcp   LISTEN 0      4096         0.0.0.0:111        0.0.0.0:*     users:(("rpcbind",pid=13564,fd=4),("systemd",pid=1,fd=76)) 
tcp   LISTEN 0      4096         0.0.0.0:46127      0.0.0.0:*     users:(("rpc.statd",pid=13566,fd=9))                       
tcp   LISTEN 0      64           0.0.0.0:2049       0.0.0.0:*                                                                
tcp   LISTEN 0      128          0.0.0.0:22         0.0.0.0:*     users:(("sshd",pid=941,fd=3))                              
tcp   LISTEN 0      64           0.0.0.0:35239      0.0.0.0:*                                                                
tcp   LISTEN 0      4096            [::]:20048         [::]:*     users:(("rpc.mountd",pid=13570,fd=7))                      
tcp   LISTEN 0      64              [::]:35783         [::]:*                                                                
tcp   LISTEN 0      4096            [::]:111           [::]:*     users:(("rpcbind",pid=13564,fd=6),("systemd",pid=1,fd=78)) 
tcp   LISTEN 0      64              [::]:2049          [::]:*                                                                
tcp   LISTEN 0      128             [::]:22            [::]:*     users:(("sshd",pid=941,fd=4))                              
tcp   LISTEN 0      4096            [::]:42425         [::]:*     users:(("rpc.statd",pid=13566,fd=11))   
http://www.dtcms.com/a/546805.html

相关文章:

  • 丹棱县 网站建设大型自助建站平台
  • 泰钢材企业网站源码wordpress wp_postmeta
  • 福建省住房城乡和城乡建设厅网站爱采购下载app
  • 做网站入门看什么书重庆企业网站开发服务
  • windows Qt6 vs2022编译配置以及使用QtXlsx库【超详细】
  • 网站文风wordpress 获取第一张图片
  • tp框架做网站的优点免费网络电话无限打不用充值
  • 做网站有送企业邮箱吗政务大厅网站建设管理制度
  • 营销型网站建设专家外贸在哪些网站开发客户
  • spring boot项目快速整合xxl-job实现定时任务
  • 防疫站24小时在线咨询建设教育网站怎么样
  • 将电脑做的网站放到外网住建部网站2015年城市建设统计
  • 站酷设计网站官网入口插画设计济宁亿峰科技做网站一年多少费用
  • 网站备案域名更改公司濮阳网络直播
  • 自学网站建设多久如何做网络推广人员
  • 荣成做网站中国建设法律法规网官方网站
  • 临海建设局官方网站文昌网站建设 myvodo
  • 运城住房和建设局网站新网站建设一般多少钱
  • W3C WSDL 活动:推动Web服务互操作性的关键力量
  • 婚庆网站建设的需求分析wordpress注册授权
  • 三维重建【0-D】3D Gaussian Splatting:相机标定原理与步骤
  • 中国企业商务网站建设河南seo网站多少钱
  • 做预算兼职的网站东莞设计网站企业
  • 网站建设项目工作分解结构建设银行交学费网站
  • Python导入opencv报错“DLL load failed while importing cv2: 找不到指定的模块”排错过程记录
  • 黄金外汇网站建设网站备案在哪查
  • 大二java学习笔记:子类与继承
  • 网站毕设代做免费seo网站诊断
  • 旅游网站分析广告喷绘制作公司介绍
  • 解决 IsaacSim 5.0 与 ROS2 Python 版本冲突的完整指南