文件服务器之一:nfs服务部署搭建

本文详细介绍NFS服务器的功能与部署过程,包括服务端与客户端的配置步骤,并提供实例演示如何实现不同权限设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见文件服务器的比较:

服务名称使用范围服务端客户端局限性
FTP局域网和公网Windows & LinuxWindows & Linux无法直接修改服务端的文件
NFS局域网和公网LinuxLinux只能在Linux之间使用
SAMBA局域网Windows & LinuxWindows & Linux只能在局域网中使用

一、NFS的由来与功能

1.1 什么是NFS

NFS(Network File System)是文件服务器之一。它的功能是可以通过网络,让不同的机器、不同的操作系统可以彼此共享数据文件。使用NFS要比SAMBA服务器快速且方便很多,且NFS配置较简单。
这个NFS服务器可以让PC将网络中的NFS服务器的共享目录挂载到本地端的文件系统中,而在本地端的系统中看来,那个远程主机的目录就好像自己的一个磁盘分区(partition)一样,在使用上相当便利。
NFS服务器共享目录与Client挂载示意图如下:
NFS共享目录挂载示意图
基本上nfs这个服务的端口开在2049,但是由于文件系统非常复杂,因此NFS还有其他的程序去启动额外的端口默认是随机的,小于1024的端口。

1.2 什么是RPC(remote procedure call)

PRC的主要功能是指定每个NFS功能所对应的port number,并且通知给客户端,让客户端可以连接到正确的端口上去。
注释:当服务器在启动nfs时会随机选取数个端口,并主动向RPC注册,因此RPC可以知道每个端口对应的NFS功能。
问:当客户端有NFS文件访问需求时,如何向服务器端请求数据呢?
1、客户端会向服务器端的RPC(port 111)发出NFS文件访问功能的查询需求
rpcbind不需要设置,只要直接启动它即可,启动之后,会在一个port 111 的sunrpc的服务,那就是rpcbind
2、服务器端找到对应的已注册的NFS daemon端口后,会通知客户端
3、客户端了解正确的端口后,就可以直接与NFS daemon连接

二、环境配置

ip备注
10.130.0.100NFS服务端
10.130.0.101NFS客户端

三、NFS Server 端配置

3.1 安装rpc、nfs服务

yum install rpcbind nfs-utils -y

nfs软件结构

  • 主要配置文件:/etc/exports
    nfs主要配置文件,不过系统并没有默认值,需要使用vim手动创建文件
  • nfs文件系统维护命令:/usr/sbin/exportfs
    这个是维护NFS共享资源的命令,我们可以利用这个命令重新共享/etc/exports更新的目录资源、将NFS Server共享的目录卸载或重新共享等。
  • 共享资源的日志文件:/var/lib/nfs/*tab
    在NFS文件服务器中,日志文件都放置在/var/lib/nfs目录中,有两个重要的日志文件:
    etab:主要记录nfs所共享出来的目录的完整权限设置值
    xtab:记录曾经链接到此NFS服务器的相关客户端的数据
  • 客户端查询服务器共享资源的命令:/usr/sbin/showmount
    exportfs用在NFS Server端,而showmount则主要用在Client端,这个showmount可以用来查看NFS共享出来的共享目录。

3.2 创建共享目录

mkdir /home/nfs/sharefile
chmod 666 /home/nfs/sharefile

3.3 修改nfs配置文件

vim /etc/exports
#在文件中添加如下内容,表示允许所有客户端挂载
/home/nfs/sharefile *(rw,sync,insecure,no_subtree_check,no_root_squash)

/etc/exports配置文件权限参数

参数值内容说明
rw / ro该目录共享的权限是可读写(read-write)或只读(read-only),但最终能不能读写 ,还是与文件系统的rwx及身份有关
sync / asyncsync代表数据会同步写入到内存与硬盘中,async则代表数据会暂存于内存当中,而非直接写入硬盘
no_root_squash / root_squash客户端使用NFS文件系统的帐号若为root时,系统该如何判断这个帐号的身份?默认情况下,客户端root的身份会由root_squash的设置压缩成nfsnobody,如此对服务器的系统会较有保障,但如果想要开放客户端使用root身份来操作服务器的文件系统,那么这里就需要开放no_root_squash才行
all_squash不论登录NFS的用户身份为何,他的身份都会被压缩成为匿名用户,通常也就是nobody(nfsnobody)
anonuid / anongidanon意指anonymouns(匿名用户)前面关于*_squash提到的匿名用户的UID的设置值,通常为nobody(nfsnobody),但是你可以自行设置这个UID的值,当然,这个UID必须要存在与/etc/passwd当中,anonuid指的是UID而anongid则是组的GID

问题1:仅给某个单一主机使用的目录设置
假如要将一个私人目录/home/test 开放给192.168.100.10这个client端的机器来使用,/etc/exports配置可如下:

$ vim /etc/exports
/home/nfs/sharefile *(rw,sync,insecure,no_subtree_check,no_root_squash)
/home/test  192.168.100.10(rw)

问题2:同一目录针对不同范围开放不同权限
假如要将一个公共目录/home/public开放,但是需要限定在局域网192.168.100.0/24这个网络加入vbirdgroup组的用户才能够读写,其他来源的用户只能读

$ mkdir /home/public
$ setfacl -m g:vbirdgroup:rwx /home/public
$ vim /etc/exports
/home/public 192.168.100.0/24(rw)   *(ro)
#将主机与网络分为两段,用空格隔开

注意:通配符仅能用在主机名的分辨上面,IP或网段只能用192.168.100.0/24的形式,不可以使用192.168.100.*

3.4 启动rpc、nfs服务

#先启动rpc服务,再启动nfs服务
systemctl start rpcbind.service 
systemctl status rpcbind.service
#启动nfs服务
systemctl start nfs-server.service
systemctl status nfs-server.service

查看服务端是否正常加载/etc/exports配置文件

$ showmount -e localhost
Export list for localhost:
/home/nfs/sharefile *

【注释】当重新设置完/etc/exports文件后不需要重新启动NFS,可以通过exportfs这个命令。如果重新启动NFS的话,得再向RPC注册,比较麻烦。

$ exportfs [-aruv]
选项与参数:
-a:全部挂载(或卸载)/etc/exports文件中的配置
-r:重新挂载/etc/exports里面的设置。此外,亦同步更新/etc/exports及/var/lib/nfs/xtab的内容
-u:卸载某一目录
-v:在export的时候,将共享的目录显示到屏幕上

1. 重新挂载一次 /etc/exports 的设置
$ exportfs -arv
2. 将已经共享的NFS目录资源,全部都卸载
exportfs -auv

查看注册的端口列表

rpcinfo -p localhost

NFS会开启很多port,主要的端口如下:

  • rpcbind 启动的port在111,同时启动在UDP与TCP
  • NFS本身的服务启动在port 2049上
  • 其他的rpc.*服务启动的port则是随机产生的,因此需要向port 111注册

四、NFS Client端配置

4.1 安装客户端软件nfs-utils

yum install nfs-utils -y

4.2 查看服务端可共享的目录

注释:10.130.0.100为NFS服务端ip

#查看服务器给client提供了哪些可以使用的资源
$ showmount -e 10.130.0.100
Export list for 10.130.0.100:
/home/nfs/sharefile *

4.3 挂载服务端共享目录

将服务端的共享目录挂载到本地/home/nfs目录下

mount 10.130.0.100:/home/nfs/sharefile /home/nfs -o proto=tcp -o nolock

4.4 卸载nfs目录挂载

umount /home/nfs

参考链接:
《鸟哥的Linux私房菜-服务器架设篇(第三版)》
https://blog.youkuaiyun.com/eijiyey/article/details/123184529

03-13
<think>好的,我现在需要回答用户关于NFS网络文件系统的介绍、原理、使用和配置的问题。首先,我应该先回顾用户提供的引用内容,确保信息准确并正确引用。 首先,用户提供了三个引用。引用[1]提到NFS网络文件系统,用于共享文件和目录,类似于Windows的网络共享,但用于企业集群,并提到了其他分布式文件系统。引用[2]说明NFS服务器配置主要通过/etc/exports文件,需要手动配置。引用[3]指出NFS允许透明访问远程文件,并具有跨平台性。 接下来,我需要组织这些信息,按照用户的要求分四个部分:介绍、原理、使用、配置。同时,需要遵循系统级指令,比如行内数学表达式用$...$,但这里可能用不上数学公式。不过要确保LaTeX语法正确,不过NFS的内容可能不涉及数学表达式,但需要检查是否有需要的地方。比如在配置示例中可能需要代码块,用户示例中的代码块是用```python,这里配置示例可能需要用类似的方式。 需要生成相关问题,放在最后。同时,回答要使用中文,结构清晰,分步骤说明。引用标识要自然地加在引用内容的末尾,例如[^1]。 首先,介绍部分,需要定义NFS,功能,类比Windows共享,应用场景,如企业集群,并引用[^1]和[^3]。 原理部分,可能需要解释NFS如何工作,比如基于RPC协议,客户端-服务器模型,透明访问,跨平台性,引用。 使用部分,包括如何挂载NFS共享,命令行示例,如mount命令,可能需要代码块。 配置部分,重点在/etc/exports文件的配置,说明语法,示例,然后如何启动服务,引用[^2]。 最后生成相关问题,比如与其他分布式系统的区别,权限管理,常见故障排除,安全性等。 需要检查是否符合所有系统级指令,特别是引用是否正确,是否有遗漏,以及结构是否清晰。确保每个引用只在第一次出现时标注,比如介绍部分引用[1]和[3],配置部分引用[2]。 另外,用户示例中的快速排序部分有代码块,所以配置示例也应该使用代码块,比如/etc/exports的配置示例和挂载命令的示例。 可能需要补充一些用户引用中没有提到的内容,比如NFS版本(如NFSv3、NFSv4),但用户引用中没有提到,所以可能不添加,或者简要提及。但根据用户提供的引用,可能不需要扩展太多,保持基于引用内容。 现在开始组织内容: 1. 介绍:定义NFS,功能,应用场景,类比Windows共享,引用[^1]。 2. 原理:客户端-服务器模型,RPC协议,透明访问,跨平台,引用。 3. 使用:挂载命令示例,使用mount。 4. 配置:/etc/exports文件格式,示例配置,启动服务步骤,引用。 然后生成相关问题,比如如何配置exports文件,权限设置,与其他文件系统的比较,故障排查等。 确保每个部分引用正确,例如在介绍末尾加上[^1],原理部分末尾,配置部分末尾。 现在开始撰写回答,注意使用中文,结构清晰,代码块正确,引用标识正确放置。</think>### NFS 网络文件系统介绍、原理、使用与配置 #### 一、NFS 简介 NFS(Network File System,网络文件系统)是一种基于网络的分布式文件系统协议,允许不同主机系统之间共享文件和目录。其核心功能是**透明访问远程文件**,用户操作远程文件时如同操作本地文件一样。NFS 常用于企业集群架构中,尤其适合需要多台服务器协同工作的场景。相较于 Windows 的网络共享(如 SMB/CIFS 协议),NFS 更注重跨平台兼容性,广泛应用于 Linux/Unix 环境。 #### 二、NFS 工作原理 1. **客户端-服务器模型** NFS 采用客户端-服务器架构,服务器端导出共享目录,客户端通过挂载(Mount)方式访问这些目录。 2. **RPC 协议支持** NFS 依赖 RPC(Remote Procedure Call)协议实现通信,客户端通过 RPC 查询服务器支持的共享目录信息。 3. **透明访问机制** 客户端挂载远程目录后,读写操作由内核转发到服务器,用户无需感知文件存储位置。 4. **跨平台性** NFS 支持异构系统(如 Linux 与 Unix、Linux 与 macOS)间的文件共享。 #### 三、NFS 使用示例 1. **挂载远程目录** 客户端通过 `mount` 命令挂载服务器共享目录: ```bash # 挂载命令格式 mount -t nfs 服务器IP:/共享目录路径 /本地挂载点 # 示例 mount -t nfs 192.168.1.100:/data /mnt/nfs_data ``` 2. **验证挂载** 使用 `df -h` 或 `mount | grep nfs` 查看已挂载的 NFS 共享。 #### 四、NFS 服务器配置 1. **配置文件 `/etc/exports`** 定义共享目录及访问权限,格式为:`共享目录路径 客户端IP(权限选项)`。 ```bash # 示例:允许192.168.1.0/24网段读写,其他只读 /data 192.168.1.0/24(rw,sync) *(ro) ``` - **常用选项**: - `rw`:读写权限 - `ro`:只读权限 - `sync`:同步写入磁盘 - `no_root_squash`:允许客户端 root 用户保留权限。 2. **启动 NFS 服务** ```bash # 重启NFS服务(以Linux为例) systemctl restart nfs-server # 设置开机自启 systemctl enable nfs-server ``` #### 五、注意事项 - **权限管理**:需确保服务器与客户端的用户/组 ID 一致,避免权限冲突。 - **防火墙**:开放 NFS 相关端口(如 2049)及 RPC 端口(如 111)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值