Linxu实验五——NFS服务器
一.NFS服务器介绍
NFS服务器(Network File System)是一种基于网络的分布式文件系统协议,允许不同操作系统的主机通过网络共享文件和目录3。其核心作用在于实现跨平台的资源透明访问,例如在Linux和Unix系统之间共享静态数据(如视频、图片等
核心作用
- 跨平台文件共享:使不同操作系统的客户端能像访问本地磁盘一样操作远程文件。
- 简化存储管理:集中存储数据,客户端通过挂载点访问,降低多节点数据冗余2。
- 权限控制:通过RPC注册的守护进程(daemons)管理客户端登录和操作权限1。
- 扩展性支持:可结合quota等机制实现磁盘配额管理
工作原理
-
C/S架构
NFS采用客户端-服务器模型,服务端配置共享目录(如/home/public
),客户端通过挂载命令将其映射到本地文件系统(如/mnt/nfs
。 -
RPC依赖
- NFS启动时需向RPC(Remote Procedure Call)注册服务信息,包括端口号和功能。
- 客户端通过RPC查询可用服务,再与NFS服务端建立通信5。
-
工作流程
客户端请求 → RPC查询NFS服务 → 获取端口信息 → 建立NFS连接 → 读写远程文件
-
权限与虚拟文件系统
- 服务端通过
/etc/exports
定义共享规则(如192.168.88.0/24(rw,sync)
)5。 - 客户端挂载后,通过VFS(虚拟文件系统)层将远程操作转换为网络请求3。
- 服务端通过
技术特点
特性 | 说明 |
---|---|
RPC依赖 | 必须运行rpcbind 服务实现动态端口分配15 |
权限控制 | 通过nfsd 和mountd 守护进程分别管理访问权限和文件操作1 |
配置灵活性 | 支持IP白名单、读写模式(ro/rw)、数据同步策略(sync/async)5 |
版本兼容性 | 主流版本包括NFSv3(广泛兼容)和NFSv4(增强安全性)4 |
二.NFS服务器搭建
1.安装NFS服务器软件
在Ubuntu上安装NFS服务器软件,可以通过以下命令完成
sudo apt update
sudo apt install nfs-kernel-server //这条命令会安装NFS服务器的核心组件。
2. 创建共享目录
选择一个目录作为共享目录,或者创建一个新的目录。例如,创建一个名为sudo mkdir -p /home/www/nfs/shared的目录:
sudo mkdir -p /home/www/nfs/shared
然后,设置该目录的权限。根据实际需求,可以将该目录的所有者设置为nobody
用户组,并设置适当的读写权限:
sudo chown nobody:nogroup /home/www/nfs/shared
sudo chmod 777 /home/www/nfs/shared
3.配置NFS共享
编辑NFS配置文件/etc/exports,以定义哪些目录需要共享以及哪些主机能够访问这些目录。使用以下命令打开/etc/exports文件:
sudo vim /etc/exports
在文件末尾添加如下行,表示将/home/www/nfs/shared目录共享给网络中的任何主机(假设你的NFS客户端IP范围是192.168.168.128/24,你可以根据需要调整,我这里直接用主机的):
/home/www/nfs/shared 192.168.168.128/24(rw,sync,no_subtree_check)
- /home/www/nfs/shared:NFS共享的目录。
192.168.168.128/24
:允许访问的客户端IP地址范围,也可以使用具体的IP地址或域名。rw
:读写权限。sync
:同步写入数据,保证数据的安全性。确保所有写入操作在返回前完成no_subtree_check
:不检查父目录的权限,提高效率。
4.导出NFS共享
使配置生效,运行以下命令:
sudo exportfs -a
5.启动NFS服务
启动并启用NFS服务,使其在启动时自动运行:
sudo systemctl start nfs-kernel-server
sudo systemctl enable nfs-kernel-server
6.配置防火墙(可选)
如果系统使用了防火墙,需要确保允许NFS服务的相关端口。例如,可以使用ufw
命令来允许特定IP地址范围的访问:
sudo ufw allow from 192.168.168.128/24 to any port nfs
或者,如果希望允许所有网络上的主机访问NFS服务:
sudo ufw allow from any to any port nfs
7. 检查NFS共享状态
确认NFS服务器正在运行,并检查共享目录:
sudo exportfs -v
(未完待续)