linux 配置NFS

简介: NFS(Network File System)是跨平台的网络文件系统,允许不同操作系统和硬件通过RPC协议共享文件系统。服务端启动RPC服务和NFS,注册端口信息。客户端请求服务器的NFS端口,建立连接进行数据传输。优点包括配置简单、数据可靠、支持多系统间文件共享。缺点包括端口不固定、数据明文传输、安全性较低(基于IP认证)。在Redhat 9环境下,通过安装nfs-utils和rpcbind,配置共享目录和exports文件,设置权限,客户端安装相同软件包,使用showmount命令查看共享,挂载NFS目录,实现透明访问。


1、NFS简介
NFS 是Network File System的缩写,即⽹络⽂件系统。NFS 的基本原则是“容许不同的客户 端及服务端通过⼀组RPC分享相同的⽂件系统”,它是独⽴于操作系统,容许不同硬件及操作 系统的系统共同进⾏⽂件的分享。 NFS在⽂件传送或信息传送过程中依赖于RPC协议。nfs服务也是基于C/S架构⼯作的。

NFS 在文件传送或信息传送过程中依赖于 RPC(Remote Procedure Call) 协议,即远程过程调用, NFS 的各项功能都必须要向 RPC 来注册,如此一来 RPC 才能了解 NFS 这个服务的各项功能 Port、PID、NFS 在服务器所监听的 IP 等,而客户端才能够透过 RPC 的询问找到正确对应的端口,所以,NFS 必须要有 RPC 存在时才能成功的提供服务,NFS是 一个文件存储系统,而 RPC 是负责信息的传输。

NFS分为客户端与服务器端,⼀般设置为⼀个Server端,多个客户端,也可设置为多对多,当 服务器端设置好共享⽬录/data后,客户端通过相应的访问权限,将共享⽬录挂载到本地系统 的某个⽬录下,就可以透明的看到共享⽬录⾥的⽂件了,依据服务器制定的相应权限做操作

2、NFS服务器与客户端的通信原理
客户端NFS和服务端NFS通讯过程

1.⾸先服务器端启动RPC服务,并开启111端⼝

2.启动NFS服务,并向RPC注册端⼝信息

3.客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端 ⼝

4.服务端的RPC(portmap)服务反馈NFS端⼝信息给客户端。

5.客户端通过获取的NFS端⼝来建⽴和服务端的NFS连接并进⾏数据的传输。

3、nfs服务特点
优点:

nfs服务配置简单,部署⽅便,数据可靠,服务稳定,满⾜中⼩企业需求。

nfs客户端可以透明地读写位于远端nfs服务器上的⽂件,就像访问本地⽂件⼀样。

nfs不仅适⽤于Linux与Unix之间实现⽂件共享,也能实现Linux与Windows间的⽂件共享 功能

缺点:

nfs是运⾏在应⽤层的协议,其监听端⼝较多,⽽且这些端⼝不固定。

nfs数据明⽂,并不对数据做任何校验。 nfs存在单点故障,如果构建⾼可⽤维护较复杂。

客户端认证是基于IP地址(没有⽤户名和密码的说法),安全性不⾼(内⽹)。

环境
Redhat 9

192.168.200.133 服务端

192.168.200.129 客户端

步骤:
更名

[root@admin ~]# hostname server
[root@admin ~]# bash
[root@server ~]#
[root@AI ~]# hostname client
[root@AI ~]# bash
[root@client ~]#
安装nfs服务软件包

[root@server ~]# yum -y install nfs-utils
正在更新 Subscription Management 软件仓库。
无法读取客户身份

本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。

上次元数据过期检查:1 day, 0:44:54 前,执行于 2024年03月30日 星期六 13时50分28秒。

依赖关系解决。

软件包 架构 版本 仓库 大小

安装:
nfs-utils x86_64 1:2.5.4-18.el9 BaseOS 459 k
安装依赖关系:
gssproxy x86_64 0.8.4-4.el9 BaseOS 114 k
keyutils x86_64 1.6.3-1.el9 BaseOS 78 k
libev x86_64 4.33-5.el9 BaseOS 56 k
libnfsidmap x86_64 1:2.5.4-18.el9 BaseOS 66 k
libverto-libev x86_64 0.3.2-3.el9 BaseOS 15 k
rpcbind x86_64 1.2.6-5.el9 BaseOS 62 k
sssd-nfs-idmap x86_64 2.8.2-2.el9 BaseOS 44 k

事务概要

安装 8 软件包

总计:893 k
安装大小:2.1 M
下载软件包:
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
准备中 : 省略。。。。。

已更新安装的产品。

已安装:
gssproxy-0.8.4-4.el9.x86_64 keyutils-1.6.3-1.el9.x86_64 libev-4.33-5.el9.x86_64 libnfsidmap-1:2.5.4-18.el9.x86_64 libverto-libev-0.3.2-3.el9.x86_64
nfs-utils-1:2.5.4-18.el9.x86_64 rpcbind-1.2.6-5.el9.x86_64 sssd-nfs-idmap-2.8.2-2.el9.x86_64

完毕!
[root@server ~]#
重启nfs服务 并设置开机自启

[root@server ~]# systemctl restart nfs-server.service
[root@server ~]#
[root@server ~]# systemctl enable nfs-server.service
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.
[root@server ~]# ss -anltp | grep 2049
LISTEN 0 64 0.0.0.0:2049 0.0.0.0:
LISTEN 0 64 [::]:2049 [::]:

[root@server ~]#
查看RPC服务端口信息

[root@server ~]# ss -anltp | grep rpcbind
LISTEN 0 4096 0.0.0.0:111 0.0.0.0: users:(("rpcbind",pid=3270,fd=4),("systemd",pid=1,fd=227))
LISTEN 0 4096 [::]:111 [::]:
users:(("rpcbind",pid=3270,fd=6),("systemd",pid=1,fd=229))
[root@server ~]#
创建共享目录

[root@server ~]# mkdir /nfs-upload
[root@server ~]#
配置共享文件目录

[root@server ~]# cat /etc/exports
/nfs-upload 192.168.200.129(rw)
//共享文件夹路径 客户机地址(权限)
[root@server ~]#
[root@server ~]# exportfs -r

exportfs 命令主要⽤于管理当前NFS服务器的⽂件系统。exportfs 是在服务端上使⽤的命 令,主要⽤来操作挂载的⽬录,⽐如我们修改了NFS配置⽂件,需要重启NFS服务,如果客户 端正在读写,那么重启NFS服务对客户端是有影响的,因此 exportfs 命令的其中⼀个功能就 是不重启就能重新加载NFS配置⽂件。

exportfs [选项] [参数]
-r //重新读取/etc/exports⽂件中的设置,并使其⽴即⽣效,⽆需
重启服务
-u //取消⼀个或者多个NFS共享⽂件系统的共享
-a //exports配置⽂件中所有的共享⽬录
-v //显示执⾏过程
exportfs -r 或 systemctl reload nfs-server 可以实现不重启服务,重
新加载服务配置
重启nfs服务关闭防火墙和selinux

[root@server ~]# systemctl restart nfs-server.service
[root@server ~]# systemctl stop firewalld
[root@server ~]# setenforce 0
[root@server ~]#
客户端下载NFS-utils包

[root@client ~]# yum -y install nfs-utils
正在更新 Subscription Management 软件仓库。
无法读取客户身份

本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。

上次元数据过期检查:1 day, 0:29:17 前,执行于 2024年03月30日 星期六 14时25分54秒。

依赖关系解决。

软件包 架构 版本 仓库 大小

安装:
nfs-utils x86_64 1:2.5.4-18.el9 BaseOS 459 k
安装依赖关系:
gssproxy x86_64 0.8.4-4.el9 BaseOS 114 k
keyutils x86_64 1.6.3-1.el9 BaseOS 78 k
libev x86_64 4.33-5.el9 BaseOS 56 k
libverto-libev x86_64 0.3.2-3.el9 BaseOS 15 k
rpcbind x86_64 1.2.6-5.el9 BaseOS 62 k

安装 6 软件包

总计:783 k
安装大小:1.8 M
下载软件包:
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
准备中 : 省略 。。。。。。。

已安装:
gssproxy-0.8.4-4.el9.x86_64 keyutils-1.6.3-1.el9.x86_64 libev-4.33-5.el9.x86_64 libverto-libev-0.3.2-3.el9.x86_64 nfs-utils-1:2.5.4-18.el9.x86_64 rpcbind-1.2.6-5.el9.x86_64

完毕!
列出有哪些NFS共享资源:showmount -e 服务器地址

[root@client ~]# showmount -e 192.168.200.133
Export list for 192.168.200.133:
/nfs-upload 192.168.200.129
[root@client ~]#
创建挂载点 手动挂载NFS共享

[root@client ~]# mkdir /nfs-mount
[root@client ~]# mount 192.168.200.133:/nfs-upload /nfs-mount
[root@client ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 3.8G 0 3.8G 0% /dev/shm
tmpfs tmpfs 1.5G 9.8M 1.5G 1% /run
/dev/mapper/rhel-root xfs 66G 22G 44G 34% /
/dev/nvme0n1p1 xfs 1014M 292M 723M 29% /boot
/dev/sr0 iso9660 9.0G 9.0G 0 100% /mmt
/dev/mapper/rhel-home xfs 32G 260M 32G 1% /home
tmpfs tmpfs 767M 92K 767M 1% /run/user/0
192.168.200.133:/nfs-upload nfs4 66G 18G 48G 28% /nfs-mount
[root@client ~]#
客户端验证

[root@client ~]# cd /nfs-mount/
[root@client nfs-mount]# ls
[root@client nfs-mount]# touch abc
touch: 无法创建 'abc': 权限不够
[root@client nfs-mount]#
解释:默认客户端是以nfs⽤户身份访问远端的nfs服务器,如果nfs服务端共享
的⽬录属主为root⽤户,那客户端默认是没有写权限
修改服务端配置 重新加载配置

[root@server ~]# vim /etc/exports
[root@server ~]# cat /etc/exports
/nfs-upload 192.168.200.129(no_root_squash,rw)
[root@server ~]# exportfs -r
[root@server ~]#
常用共享目录访问权限:
只读:ro
读写:rw
sync:同步,数据同时写入内存与磁盘中,效率低,但可以保证数据的一致性(1.0.0版本后为默认);
async:异步,数据先保存在内存中,必要时写入磁盘,可提高性能但服务器意外停止会丢失数据;
all_squash:不论登陆者以什么身份,都会被映射为匿名用户(nfsnobody);
no_all_squash:以登陆者的身份,不做映射,包括文件所属用户和组(默认);
root_squash:将root用户及所属组都映射为匿名用户或用户组(默认);
no_root_squash:开放客户端使用root的身份来操作服务器文件系统;

回到客户端进行测试

[root@client nfs-mount]# touch abc.txt
[root@client nfs-mount]# ls
abc.txt
[root@client nfs-mount]#
设置开机自动挂载

[root@client ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 3.8G 0 3.8G 0% /dev/shm
tmpfs tmpfs 1.5G 9.8M 1.5G 1% /run
/dev/mapper/rhel-root xfs 66G 22G 44G 34% /
/dev/nvme0n1p1 xfs 1014M 292M 723M 29% /boot
/dev/sr0 iso9660 9.0G 9.0G 0 100% /mmt
/dev/mapper/rhel-home xfs 32G 260M 32G 1% /home
tmpfs tmpfs 767M 92K 767M 1% /run/user/0
192.168.200.133:/nfs-upload nfs4 66G 18G 48G 28% /nfs-mount
[root@client ~]# vim /etc/fstab
[root@client ~]# cat /etc/fstab
省略。。。。。。
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=4257c2e0-c8da-45a5-aada-14c0041af5d5 /boot xfs defaults 0 0
/dev/mapper/rhel-home /home xfs defaults 0 0
/dev/mapper/rhel-swap none swap defaults 0 0
192.168.200.133/nfs-upload /nfs-mount nfs4 defaults,_netdev 0 0
服务器地址:路径 挂载点路径 文件类型 格式默认 _netdev指网络设备
[root@client ~]#

目录
相关文章
|
7天前
|
Ubuntu Linux Shell
github用存在的私钥在Linux上配置免密登录
在Linux上配置GitHub免密登录,使用已有的私钥。系统环境为Ubuntu 22.04.3 LTS。步骤包括:1) 将名为`github`的私钥文件上传至`~/.ssh/github`;2) 设置正确权限`chmod 600 ~/.ssh/github`和`chmod 700 ~/.ssh`;3) 启动SSH代理并添加私钥`ssh-agent -s`和`ssh-add ~/.ssh/github`。完成上述步骤后,可以无缝使用GitHub。
14 0
|
29天前
|
消息中间件 安全 Linux
服务器(Linux)在线下载activeMQ以及配置打开
服务器(Linux)在线下载activeMQ以及配置打开
29 3
|
29天前
|
Ubuntu Linux 编译器
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
|
6天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch,帮助你快速搭建起这个强大的工具
【6月更文挑战第7天】本文档详细介绍了如何在Rocky Linux 8上安装和配置Elasticsearch,首先通过添加Elasticsearch仓库并使用yum安装。接着,配置Elasticsearch,包括修改`elasticsearch.yml`、设置内存和文件描述符,以及可选的安全设置。启动Elasticsearch后,通过验证日志和测试连接确保其正常运行。文章还列举了常见问题及解决方法,如启动失败、内存不足和网络问题。按照这些步骤,用户可以在Rocky Linux 8上成功部署Elasticsearch,为数据管理与分析提供强大支持。
26 5
|
7天前
|
Linux Shell
Linux配置uwsgi环境
Linux配置uwsgi环境
|
7天前
|
监控 Linux
探索 Linux 中的 Chronyc:一个用于配置和管理 Chrony 的实用工具
Chronyc 是一款用于配置和管理 Linux 系统中 Chrony 时间同步工具的命令行实用程序。Chrony 结合了 ntpd 和 ntpdate 的优点,提供高精度和灵活性。要安装 Chrony,可使用包管理器(如 `apt` 或 `yum/dnf`)。常用 `chronyc` 命令包括:查看时间源状态(`sources`)、跟踪信息(`tracking`)、添加或删除服务器、手动同步时间(`makestep`)以及查看其他信息和帮助。`chronyc` 提供了便捷的方式来监控和调整系统时间同步。
|
7天前
|
Linux Shell 开发者
深入了解 Linux 命令 `autoscan`:为自动配置脚本做准备
`autoscan` 是 Linux 和 Unix-like 系统中用于软件配置的工具,它扫描源代码并生成 `configure.scan` 文件,为 `autoconf` 创建初始模板。开发者通常将 `configure.scan` 重命名为 `configure.ac` 并进行编辑,然后用 `autoconf` 转换为可执行的 `configure` 脚本。在使用前,记得备份项目,确保权限,并安装 `autoconf`。`configure` 脚本能适应多种系统,检查环境并生成 `Makefile`。
|
8天前
|
Ubuntu Linux
ubuntu linux配置bond 网卡绑定 多个bond配置多网关
ubuntu linux配置bond 网卡绑定 多个bond配置多网关
|
10天前
|
Shell Linux 网络安全
27. 【Linux教程】配置环境变量
27. 【Linux教程】配置环境变量
12 0
|
18天前
|
缓存 Linux 编译器
Linux(CentOS7.5) 安装部署 Python3.6(超详细!包含 Yum 源配置!)
该指南介绍了在Linux系统中配置Yum源和安装Python3的步骤。首先,通过`yum install`和`wget`命令更新和备份Yum源,并从阿里云获取CentOS和EPEL的repo文件。接着,清理和更新Yum缓存。然后,下载Python3源代码包,推荐使用阿里云镜像加速。解压后,安装必要的依赖,如gcc。在配置和编译Python3时,可能需要解决缺少C编译器的问题。完成安装后,创建Python3和pip3的软链接,并更新环境变量。最后,验证Python3安装成功,并可选地升级pip和配置pip源以提高包下载速度。