网络文件系统(NFS)是一种经典的分布式文件系统协议,它允许网络中的不同计算机之间共享文件和目录,通过NFS,用户可以像访问本地存储一样,透明地访问远程服务器上的文件,这在企业环境中非常实用,例如用于集中存储用户主目录、共享应用程序数据或搭建可扩展的Web服务器集群,本文将详细介绍如何在CentOS系统上安装和配置NFS服务,涵盖服务器端和客户端的完整设置流程。
在开始之前,请确保准备两台或以上的CentOS主机,并配置好静态IP地址,本文将使用以下环境作为示例:
- NFS服务器:IP地址为
168.1.10
- NFS客户端:IP地址为
168.1.20
所有操作均需要root
用户或具有sudo
权限的用户执行。
NFS服务器端安装与配置
我们在NFS服务器(192.168.1.10)上进行安装和配置。
安装NFS软件包
CentOS官方源提供了NFS所需的核心软件包,使用yum
命令可以轻松安装。
sudo yum update -y sudo yum install nfs-utils -y
nfs-utils
包包含了NFS服务端和客户端所需的所有核心工具,如rpcbind
、nfs-server
以及showmount
等。
创建并配置共享目录
创建一个用于共享的目录,并设置适当的权限,这里我们在根目录下创建一个/data/nfs_share
目录。
sudo mkdir -p /data/nfs_share
为了安全和权限管理的方便,我们通常会将该目录的所有者设置为nfsnobody
,这是一个NFS服务专用的非特权用户。
sudo chown -R nfsnobody:nfsnobody /data/nfs_share sudo chmod -R 755 /data/nfs_share
配置exports文件
NFS的核心配置文件是/etc/exports
,在这个文件中,我们定义了要共享哪个目录、允许哪些客户端访问以及访问的权限。
使用文本编辑器打开此文件:
sudo vi /etc/exports
在文件末尾添加以下行,将/data/nfs_share
目录共享给指定的客户端。
/data/nfs_share 192.168.1.20(rw,sync,no_subtree_check,no_root_squash)
这行配置的含义如下:
/data/nfs_share
:要共享的目录路径。168.1.20
:允许访问此共享的客户端IP地址,也可以使用子网(如168.1.0/24
)来允许一个网段的主机访问。(rw,sync,no_subtree_check,no_root_squash)
:指定客户端的访问权限,各选项说明见下表。
选项 | 描述 |
---|---|
rw | 允许客户端读写操作。 |
ro | 只读,是默认选项。 |
sync | 将数据同步写入内存和硬盘,保证数据一致性,但速度稍慢。 |
async | 异步写入,性能更好,但可能在服务器崩溃时丢失数据。 |
no_subtree_check | 禁用子树检查,可以提高性能和稳定性。 |
no_root_squash | 允许客户端的root用户在共享目录上拥有root权限,出于安全考虑,请谨慎使用。 |
启动并启用服务
配置完成后,需要启动rpcbind
和nfs-server
服务,并设置它们为开机自启。
sudo systemctl start rpcbind sudo systemctl start nfs-server sudo systemctl enable rpcbind sudo systemctl enable nfs-server
rpcbind
是NFS服务的基础,它负责管理RPC(远程过程调用)程序的端口号映射。
配置防火墙
如果服务器的防火墙(firewalld)处于运行状态,必须开放NFS相关的服务端口。
sudo firewall-cmd --permanent --add-service=nfs sudo firewall-cmd --permanent --add-service=mountd sudo firewall-cmd --permanent --add-service=rpc-bind sudo firewall-cmd --reload
NFS客户端安装与挂载
我们切换到NFS客户端(192.168.1.20)进行配置,以挂载服务器共享的目录。
安装客户端软件
客户端同样需要安装nfs-utils
包以获得挂载和管理NFS共享的工具。
sudo yum install nfs-utils -y
创建挂载点
在客户端上创建一个目录,作为NFS共享的挂载点。
sudo mkdir -p /mnt/nfs_client
挂载NFS共享
使用mount
命令将服务器上的共享目录挂载到本地创建的挂载点。
sudo mount -t nfs 192.168.1.10:/data/nfs_share /mnt/nfs_client
命令中的-t nfs
指定了文件系统类型为NFS。
验证挂载
挂载成功后,可以通过多种方式进行验证。
df -h | grep nfs
或者
mount | grep nfs
如果能看到挂载信息,说明挂载成功,你可以在/mnt/nfs_client
目录下创建、读取和删除文件,这些操作会实时同步到服务器的/data/nfs_share
目录中。
实现开机自动挂载
为了确保客户端重启后NFS共享能自动挂载,需要将其添加到/etc/fstab
文件中。
sudo vi /etc/fstab
在文件末尾添加以下内容:
168.1.10:/data/nfs_share /mnt/nfs_client nfs defaults,_netdev 0 0
这里的_netdev
选项非常重要,它告诉系统这是一个网络设备,需要等待网络服务启动完成后再进行挂载,避免了因网络未就绪而导致的挂载失败。
相关问答FAQs
问题1:客户端无法写入NFS共享目录,提示权限不足,怎么办?
解答: 这是一个常见的权限问题,请按以下步骤排查:
- 检查服务器端exports配置:确认
/etc/exports
文件中为该客户端配置了rw
(读写)权限,而不是ro
(只读),修改后记得使用sudo exportfs -r
重新加载配置。 - 检查服务器端目录权限:在服务器上执行
ls -ld /data/nfs_share
,确保目录本身对客户端访问的用户有写权限,如果客户端以root用户访问,确保服务器配置了no_root_squash
。 - 检查SELinux状态:CentOS的SELinux可能会阻止NFS写入,可以临时关闭SELinux(
setenforce 0
)测试,如果问题解决,则需要正确设置SELinux布尔值,执行sudo setsebool -P nfs_export_all_rw on
可以永久允许NFS读写。
问题2:如何实现NFS共享的持久化挂载,确保服务器重启后依然有效?
解答: 仅仅使用mount
命令挂载是临时的,重启后会失效,要实现持久化挂载,必须编辑客户端的/etc/fstab
文件,在文件中添加一行,格式为:<服务器IP>:<共享目录> <本地挂载点> nfs defaults,_netdev 0 0
。168.1.10:/data/nfs_share /mnt/nfs_client nfs defaults,_netdev 0 0
,保存文件后,系统在每次启动时会自动读取此文件并完成挂载。_netdev
参数是关键,它确保了在网络连接建立后才执行挂载操作,避免了启动失败的风险。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/20785.html