《全面掌握 NFS:从安装到自动挂载的详细实验指南》

        Linux系统中,NFS(Network File System)网络文件系统允许客户端通过网络挂载远程服务器上的文件系统。

        在这篇博客中,我们将深入探讨 NFS(网络文件系统)及其在 Linux 环境中的实际应用。通过四个实验,帮助您全面了解 NFS 的安装、配置和使用,适合所有希望学习文件共享的用户。

一、环境准备

假设我们有两台机器:

  • NFS服务器:nfs-server.example.com(IP: 192.168.220.80)
  • NFS客户端:nfs-client.example.com(IP: 192.168.220.123)

实验 1:一般的操作


1.1安装NFS服务器软件包

 1.1.1如果不知道具体的名称,我们可以先搜索一下需要安装软件的具体名称是什么:

[root@server ~]# yum search nfs

1.1.2然后下载刚刚搜索出来的:nfs-utils.x86_64:

[root@server ~]# yum install nfs-utils.x86_64

1.1.3我这里提醒我已经安装好了的,没有需要安装的内容。

1.2 启动 NFS 服务

1.2.1下载好了之后就启动 NFS 服务:

[root@server ~]# systemctl start nfs-server.service 

1.3创建并配置共享目录

1.3.1这里我创建了一个实验用的目录:/div/div1 

[root@server ~]# mkdir -p /div/div1

1.3.2修改权限为757:

[root@server ~]# chown 757 /div/div1
  • 所有者: 读取、写入、执行
  • : 读取、执行
  • 其他人: 读取、执行、写入

1.4 编辑 NFS 配置文件 /etc/exports

1.4.1新建并编辑/etc/exports.d/Chen.exports文件,添加共享目录配置:

[root@server ~]# vim /etc/exports.d/Chen.exports

1.4.2vim里面添加以下行:将 /div/div1 目录导出给指定的客户端地址或者一个网段也可以是*表示所有。

/div/div1    192.168.220.0/24(rw,sync)
  • /div/div1 是共享目录的路径。

  • 本次实验给出的是一个网段,也可以是台主机或者只用* 表示允许任何主机访问。

  • rw 表示读写权限。

  • sync 确保所有的写操作在返回之前会被写入磁盘。

1.5重新启动NFS服务

[root@server ~]# systemctl restart nfs-server.service 

1.6关闭防火墙、导出共享目录

1.6.1运行以下命令来关闭防火墙:

[root@server ~]# systemctl stop firewalld.service

1.6.2运行以下命令来导出共享的 NFS 目录:

[root@server ~]# exportfs -ra

1.7在客户端安装 NFS 客户端

1.7.1在 NFS 客户端上也需要安装 NFS 客户端:

[root@client ~]# yum install nfs-utils
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Error: There are no enabled repositories in "/etc/yum.repos.d", "/etc/yum/repos.d", "/etc/distro.repos.d".

1.7.2我们发现报错了,提示我们没有仓库,这时候就需要我们去配置一个仓库,如果你懒得写可以把服务器的仓库给拷贝过来,我们接下来进行一个拷贝操作:

[root@client ~]# scp 192.168.220.80:/etc/yum.repos.d/redhat.repo /etc/yum.repos.d/redhat.repo

1.7.3下方代码询问我们是否 要连接服务器那台主机:yes,然后输入服务器主机的密码。就可以看见拷贝完成。

[root@client ~]# scp 192.168.220.80:/etc/yum.repos.d/redhat.repo /etc/yum.repos.d/redhat.repo
The authenticity of host '192.168.220.80 (192.168.220.80)' can't be established.
ED25519 key fingerprint is SHA256:IeAJ+MnUouBCj8SWNMeSwT9PzuvCEtOkq+/1J+a7ToI.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.220.80' (ED25519) to the list of known hosts.
root@192.168.220.80's password: 
redhat.repo                                                                              100%  477   215.3KB/s   00:00 

 1.7.4然后我们也可以查看仓库是否成功的被拷贝过来了没有。

[root@client ~]# ll /etc/yum.repos.d
total 4
-rw-r--r--. 1 root root 477 Jan  8 14:17 redhat.repo
[root@client ~]# cat /etc/yum.repos.d/redhat.repo
#
# Certificate-Based Repositories
# Managed by (rhsm) subscription-manager
#
# *** This file is auto-generated.  Changes made here will be over-written. ***
# *** Use "subscription-manager repo-override --help" if you wish to make changes. ***
#
# If this file is empty and this system is subscribed consider
# a "yum repolist" to refresh available repos

[appStream]
name=1
baseurl=/mnt/AppStream
enable=1
gpgcheck=0
[app]
nane=2
baseurl=/mnt/BaseOS
enable=1
gpgcheck=0

 1.7.5仓库拷贝好了之后我们别忘记了还要挂载一下光盘,提示我们挂载成功了:

[root@client ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.

1.7.6挂载完成时候就可以开始继续安装我们需要的软件了:

[root@client ~]# yum install nfs-utils

1.8重新启动客户端软件

1.8.1和服务器一样,我们安装完成之后就把软件启动一下:

[root@client ~]# systemctl start nfs-utils.service 

 1.8.2这里还得再启动另外一个服务:rpcbind.service。如果服务器没有启动这个服务也是需要启动一下的:

[root@client ~]# systemctl start rpcbind.service

1.8.3我们查看一下有没有服务器导出来的一个目录,发现有的,就是刚刚创建的/div/div1。

[root@client ~]# showmount -e 192.168.220.80
Export list for 192.168.220.80:
/div/div1 192.168.220.0/24

1.9 挂载 NFS 共享

1.9.1然后我们进行一个挂载操作,假设我们使用/opt作为挂载点:

[root@client ~]# mount  192.168.220.80:/div/div1  /opt

 1.9.2检查挂载的文件系统,确认 NFS 共享已经挂载成功:

df -h

实验 2:指定挂载项


2.1新建文件验证共享

我们查看了/opt下面没有文件或目录,我们尝试给他创建一个文件file1,发现可以成功创建,原因就是我们刚刚给服务器的/div/div1的其他用户权限是可读可写可执行:

[root@client ~]# touch /opt/file1
[root@client ~]# ll /opt
total 0
-rw-r--r--. 1 nobody nobody 0 Jan  8 14:55 file1

通过上述代码我们发现root_squash默认情况下客户端root用户创建的文件的所属用户和组会映射到nobody,如果需要指定一个用户和组需要更改我们的/etc/exports.d/Chen.exports文件,更改为:

/div/div1 192.168.220.0/24(rw,root_squash,anonuid=用户uid,anongid=组uid)
  • root_squash,anonuid=用户uid,anongid=组uid   :客户端root用户映射到指定uid\gid的用户\组

        如:root_squash,anonuid=10086,anongid=24578 

  • no_all_squash:客户端的普通用户,默认不做映射。也就是客户端用户的 uid是什么,在服务端uid就是什么。

  • no_root_squash 在客户端用 root 用户身份进行的所有操作将被视为在 NFS 服务器上的有效 root 用户访问。

  • all_squash,anonuid=1008,anongid=1999   :客户端的普通用户映射到指定uid\gid的用户\组。

  • 记得在每次更改配置完成后,重新启动该服务:systemctl restart nfs-server.service 并使用:exportfs -ra 命令重新导出 NFS 共享,使更改生效。

实验 3:开机自动挂载


3.1创建一个挂载目录

创建一个目录作为挂载点:bendi_dir

[root@client ~]# mkdir /bendi_dir

3.2 编辑 /etc/fstab

3.2.1为了使 NFS 共享在系统启动时自动挂载,请编辑 /etc/fstab 文件:

[root@client ~]# vim /etc/fstab

  并添加新的一行: 

192.168.220.80:/div/div1   /bendi_dir                   nfs    defaults        0 0

 3.2.1然后先查看挂载,发现挂载在/opt上面

[root@client ~]# df -h
Filesystem                Size  Used Avail Use% Mounted on
devtmpfs                  4.0M     0  4.0M   0% /dev
tmpfs                     866M     0  866M   0% /dev/shm
tmpfs                     347M  7.2M  340M   3% /run
/dev/mapper/rhel-root      47G  4.7G   42G  10% /
/dev/nvme0n1p2            960M  293M  668M  31% /boot
/dev/nvme0n1p1            599M  7.0M  592M   2% /boot/efi
tmpfs                     174M  128K  174M   1% /run/user/0
/dev/sr0                  9.9G  9.9G     0 100% /mnt
192.168.220.80:/div/div1   65G  4.8G   60G   8% /opt

3.2.3取消挂载:

[root@client ~]# umount /opt

3.2.4再次查看发现取消挂载已经完成:

[root@client ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               4.0M     0  4.0M   0% /dev
tmpfs                  866M     0  866M   0% /dev/shm
tmpfs                  347M  7.2M  340M   3% /run
/dev/mapper/rhel-root   47G  4.7G   42G  11% /
/dev/nvme0n1p2         960M  293M  668M  31% /boot
/dev/nvme0n1p1         599M  7.0M  592M   2% /boot/efi
tmpfs                  174M  128K  174M   1% /run/user/0
/dev/sr0               9.9G  9.9G     0 100% /mnt

3.2.5  然后我们这里mount -a 一下,确保可以正确挂载,它用于挂载 /etc/fstab 文件中列出的所有文件系统。这个命令通常用于在系统启动时自动挂载所有文件系统,也可以在修改 /etc/fstab 后使用,以确保所有配置的文件系统均被正确挂载。

[root@client ~]# mount -a
[root@client ~]# df -h
Filesystem                Size  Used Avail Use% Mounted on
devtmpfs                  4.0M     0  4.0M   0% /dev
tmpfs                     866M     0  866M   0% /dev/shm
tmpfs                     347M  7.2M  340M   3% /run
/dev/mapper/rhel-root      47G  4.7G   42G  11% /
/dev/nvme0n1p2            960M  293M  668M  31% /boot
/dev/nvme0n1p1            599M  7.0M  592M   2% /boot/efi
tmpfs                     174M  128K  174M   1% /run/user/0
/dev/sr0                  9.9G  9.9G     0 100% /mnt
192.168.220.80:/div/div1   65G  4.8G   60G   8% /bendi_dir

3.2.6  再次取消挂载:

[root@client ~]# umount /bendi_dir

3.3验证开机自动挂载 

3.3.1  关机重启,看它是否会开机自动挂载:

[root@client ~]# reboot

3.3.2  重新启动后输入:df -h查看挂载情况,发现已经帮我们挂载好了 ,包含 /bendi_dir下的NFS 共享:192.168.220.80:/div/div1   65G  4.8G   60G   8% /bendi_dir

[root@redhat-9 ~]# df -h
Filesystem                Size  Used Avail Use% Mounted on
devtmpfs                  4.0M     0  4.0M   0% /dev
tmpfs                     866M     0  866M   0% /dev/shm
tmpfs                     347M  7.2M  340M   3% /run
/dev/mapper/rhel-root      47G  4.7G   42G  11% /
/dev/nvme0n1p2            960M  293M  668M  31% /boot
/dev/nvme0n1p1            599M  7.0M  592M   2% /boot/efi
192.168.220.80:/div/div1   65G  4.8G   60G   8% /bendi_dir
tmpfs                     174M   56K  174M   1% /run/user/42
tmpfs                     174M   40K  174M   1% /run/user/0

3.3.3  也可以成功看见里面的内容,所以说是没有问题的

[root@redhat-9 ~]# ll /bendi_dir
total 0
-rw-r--r--. 1 nobody nobody 0 Jan  8 14:55 file1

实验 4:自动挂载


这是在客户机上进行的操作,先取消自动挂载一下:

[root@redhat-9 ~]# umount /bendi_dir

4.1 安装 autofs 

 4.1.1  我们可以先搜索一下需要安装软件的具体名称是什么:

[root@client ~]# yum search autofs
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Repository 'app' is missing name in configuration, using id.
Last metadata expiration check: 3:37:22 ago on Wed 08 Jan 2025 02:58:30 PM CST.
============================================== Name Exactly Matched: autofs ===============================================
autofs.x86_64 : A tool for automatically mounting and unmounting filesystems
============================================= Name & Summary Matched: autofs ==============================================
libsss_autofs.x86_64 : A library to allow communication between Autofs and SSSD

4.1.2  然后下载刚刚搜索出来的:autofs.x86_64

[root@client ~]# yun install autofs.x86_64 -y

4.1.3  发现系统报错了,校验码不正确 

[root@client ~]# yum install autofs.x86_64 -y
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Repository 'app' is missing name in configuration, using id.
Last metadata expiration check: 3:40:14 ago on Wed 08 Jan 2025 02:58:30 PM CST.
Dependencies resolved.
===========================================================================================================================
 Package                          Architecture              Version                           Repository              Size
===========================================================================================================================
Installing:
 autofs                           x86_64                    1:5.1.7-55.el9                    app                    392 k
Installing dependencies:
 libsss_autofs                    x86_64                    2.9.1-2.el9                       app                     44 k

Transaction Summary
===========================================================================================================================
Install  2 Packages

Total download size: 436 k
Installed size: 1.1 M
Downloading Packages:
Error opening /mnt/BaseOS/Packages/autofs-5.1.7-55.el9.x86_64.rpm: No such file or directory
Package "autofs-1:5.1.7-55.el9.x86_64" from local repository "app" has incorrect checksum
Error opening /mnt/BaseOS/Packages/libsss_autofs-2.9.1-2.el9.x86_64.rpm: No such file or directory
Package "libsss_autofs-2.9.1-2.el9.x86_64" from local repository "app" has incorrect checksum
Error: Some packages from local repository have incorrect checksum

4.1.4为了解决这个问题,我们需要重新挂载一下光盘:

[root@client ~]# ll /mnt
total 0
drwxr-xr-x. 2 root root 6 Jan  8 09:54 hgfs
[root@client ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.

4.1.5  查看一下发现挂载成功了的:

[root@client ~]# ll /mnt
total 44
drwxr-xr-x. 1 root root  2048 Oct 25  2023 AppStream
drwxr-xr-x. 1 root root  2048 Oct 25  2023 BaseOS
drwxrwxr-x. 1 root root  2048 Oct 25  2023 EFI
-r--r--r--. 1 root root  8154 Oct 25  2023 EULA
-r--r--r--. 1 root root  1455 Oct 25  2023 extra_files.json
-r--r--r--. 1 root root 18092 Oct 25  2023 GPL
drwxrwxr-x. 1 root root  2048 Oct 25  2023 images
drwxrwxr-x. 1 root root  2048 Oct 25  2023 isolinux
-r--r--r--. 1 root root   103 Oct 25  2023 media.repo
-r--r--r--. 1 root root  1669 Oct 25  2023 RPM-GPG-KEY-redhat-beta
-r--r--r--. 1 root root  3682 Oct 25  2023 RPM-GPG-KEY-redhat-release

4.1.6  然后继续刚才的安装,发现成功的完成了软件的安装:

[root@client ~]# yum install autofs.x86_64 -y
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Repository 'app' is missing name in configuration, using id.
Last metadata expiration check: 3:47:28 ago on Wed 08 Jan 2025 02:58:30 PM CST.
Dependencies resolved.
===========================================================================================================================
 Package                          Architecture              Version                           Repository              Size
===========================================================================================================================
Installing:
 autofs                           x86_64                    1:5.1.7-55.el9                    app                    392 k
Installing dependencies:
 libsss_autofs                    x86_64                    2.9.1-2.el9                       app                     44 k

Transaction Summary
===========================================================================================================================
Install  2 Packages

Total size: 436 k
Installed size: 1.1 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                   1/1 
  Installing       : libsss_autofs-2.9.1-2.el9.x86_64                                                                  1/2 
  Installing       : autofs-1:5.1.7-55.el9.x86_64                                                                      2/2 
  Running scriptlet: autofs-1:5.1.7-55.el9.x86_64                                                                      2/2 
  Verifying        : autofs-1:5.1.7-55.el9.x86_64                                                                      1/2 
  Verifying        : libsss_autofs-2.9.1-2.el9.x86_64                                                                  2/2 
Installed products updated.

Installed:
  autofs-1:5.1.7-55.el9.x86_64                               libsss_autofs-2.9.1-2.el9.x86_64                              

Complete!

4.1.7  安装完成后还是老规矩先启动服务,再检查服务的状态是否是开启,发现服务是active(running)开启状态的:

[root@client ~]# systemctl start autofs.service 
[root@client ~]# systemctl status autofs.service 
● autofs.service - Automounts filesystems on demand
     Loaded: loaded (/usr/lib/systemd/system/autofs.service; disabled; preset: disabled)
     Active: active (running) since Wed 2025-01-08 18:47:47 CST; 25s ago
   Main PID: 35873 (automount)
      Tasks: 6 (limit: 10681)
     Memory: 1.8M
        CPU: 15ms
     CGroup: /system.slice/autofs.service
             └─35873 /usr/sbin/automount --systemd-service --dont-check-daemon

Jan 08 18:47:47 redhat-9 systemd[1]: Starting Automounts filesystems on demand...
Jan 08 18:47:47 redhat-9 automount[35873]: setautomntent: lookup(sss): setautomountent: entry for map auto.master not found
Jan 08 18:47:47 redhat-9 automount[35873]: setautomntent: lookup(sss): setautomountent: entry for map auto_master not found
Jan 08 18:47:47 redhat-9 automount[35873]: setautomntent: lookup(sss): setautomountent: entry for map auto.master not found
Jan 08 18:47:47 redhat-9 systemd[1]: Started Automounts filesystems on demand.

 4.2 配置 autofs

4.2.1查看刚刚安装的软件在我们系统里面生成了哪些文件:

[root@client ~]# rpm -ql autofs

4.2.1  先修改一下配置文件:/etc/auto.master

[root@client ~]# vim /etc/auto.master

打开后在里面添加一行,内容如下: /nfs_share      /etc/auto.misc

4.2.3  更改配置文件:/etc/auto.misc

[root@client ~]# vim /etc/auto.misc

 在里面添加一行,添加内容如下: 

xixi            -fstype=nfs  192.168.220.80:/div/div1

4.2.4  保存退出后就重新启动该服务:

[root@client ~]# systemctl restart autofs.service 

4.2.5  我们查看发现现在是还没有挂载的情况:

[root@client ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               4.0M     0  4.0M   0% /dev
tmpfs                  866M     0  866M   0% /dev/shm
tmpfs                  347M  7.2M  340M   3% /run
/dev/mapper/rhel-root   47G  4.7G   42G  11% /
/dev/nvme0n1p2         960M  293M  668M  31% /boot
/dev/nvme0n1p1         599M  7.0M  592M   2% /boot/efi
tmpfs                  174M   56K  174M   1% /run/user/42
tmpfs                  174M   40K  174M   1% /run/user/0
/dev/sr0               9.9G  9.9G     0 100% /mnt

 4.3验证自动挂载

 4.3.1 访问进入到刚刚修改的配置文件的目录下:cd /nfs_share/xixi     可以看见服务器/div/div1下面的文件file1

[root@client ~]# cd /nfs_share/xixi
[root@client /nfs_share/xixi]# ll
total 0
-rw-r--r--. 1 nobody nobody 0 Jan  8 14:55 file1

4.3.2  这个时候我们再查看挂载发现已经成功挂载了: 192.168.220.80:/div/div1   65G  4.8G   60G   8% /nfs_share/xixi

[root@client /nfs_share/xixi]# df -h
Filesystem                Size  Used Avail Use% Mounted on
devtmpfs                  4.0M     0  4.0M   0% /dev
tmpfs                     866M     0  866M   0% /dev/shm
tmpfs                     347M  7.2M  340M   3% /run
/dev/mapper/rhel-root      47G  4.7G   42G  11% /
/dev/nvme0n1p2            960M  293M  668M  31% /boot
/dev/nvme0n1p1            599M  7.0M  592M   2% /boot/efi
tmpfs                     174M   56K  174M   1% /run/user/42
tmpfs                     174M   40K  174M   1% /run/user/0
/dev/sr0                  9.9G  9.9G     0 100% /mnt
192.168.220.80:/div/div1   65G  4.8G   60G   8% /nfs_share/xixi

总结


通过本实验,您学习了如何在 Linux 系统中设置和使用 NFS,包括基本操作、设置挂载选项、自动挂载和使用 autofs 配置自动挂载。NFS 在不同平台之间共享文件非常有效,尤其是在大规模网络环境中。

希望您通过此指南对 NFS 有更深入的理解!如有问题或建议,欢迎在下方留言讨论,我们共同探讨 NFS 的更多应用.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值