一、Linux文件系统简介
Windows系统下常见的有FAT系列(如:FAT16、FAT32)和主流的NTFS文件系统;光盘的文件系统是ISO-19660。Linux下常见的是单一文件系统ext2和日志文件系统ext3、ext4、xfs;集群文件系统GFS(RedHat Global FileSystem);虚拟文件系统(如:/proc等)和网络文件系统(NTF)。
|--------|---------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 序号 | 文件系统应用场景 | 说明 |
| 1 | 读操作频繁 【同时小文件众多】 | 优先选择ext4文件系统 1、由于ext3的目录结构是线性的,因此当一个目录下文件较多时,ext3的性能就下降较多。 2、而ext4的延迟分配、多块分配和盘区功能,使得ext4非常适合大量小文件的操作,因此从性能方面考虑,对于小规模文件密集型应用,ext4文件系统是首选(已有大量实践证明,若业务环境是对文件进行大量的创建、删除操作,ext4是更高效的文件系统,接下来依次是xfs、ext3)【如:网站应用、邮件系统等都可使用ext4文件系统来达到最优性能】。 3、从性能和安全性方面综合考虑的话,xfs文件系统是首选。 |
| 2 | 写操作频繁 | 若是一些大数据文件操作,同时应用本身需要大量日志写操作,则xfs文件系统是最佳选择 (根据业务实际应用情况来看,xfs、ext4、ext3在写入性能对比中,整体上性能差不多,但在效率(CPU利用率)上最好的是xfs,接下来依次是ext4和ext3)。 |
| 3 | 性能要求不高 【数据安全要求不高】 | ext3、ext2文件系统是比较好的选择(因为ext2没有日志记录功能,这样就节省了很多硬盘性能【如:Linux系统中的/tmp分区就可采用ext2文件系统】) |
[线上业务选择文件系统的标准]
二、网络文件系统NFS
2.1、网络文件系统NFS简介
网络文件系统(Network FileSystem)简称NFS;其主要功能是让网络上的不同操作系统之间共享数据。NFS分为服务端与客户端(NFS首先在服务端共享出目录或文件;然后在本地的客户端就可以通过挂载(mount)的方式将服务端共享出来的目录或者文件接到本地不同的操作系统上;最后本地的系统就可以很方便的使用远端提供的文件服务了,就像是在操作本地的目录或文件一样;从而实现了数据共享)。

2.2、NFS服务端的配置说明
NFS服务端只有一个主要的配置文件【/etc/exports】关于共享的操作内容都在这个文件里面进行操作配置。
|-------------|--------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| NFS配置文件格式:【共享资源路径】【访问NFS服务端的客户主机地址】【选项】 |||
| 配置内容 | 序号 | 说明 |
| 共享资源路径 | 1 | 即NFS服务端需要共享出来的目录或硬盘分区(如:/data、/data/share等),提供给NFS客户端挂载使用 |
| |||
| 客户端主机地址 | 1 | 即设定允许使用NFS服务端共享资源的客户端主机地址(这个主机地址可以是单个主机IP或IP地址段、主机名称、域名;也可以让任意客户端访问【*】) bash #1-设置任意NFS客户端可以访问NFS服务器共享资源 * #2-设置单个NFS客户端IP可以访问NFS服务器共享资源 192.168.1.6 #3-设置多个NFS客户端IP可以访问NFS服务器共享资源 192.168.1.6 192.168.1.9 #4-设置网段内的NFS客户端都可以访问NFS服务器共享资源 #【注意:关于网段内的设置新版版NFS-utils2.5及其更高版本 #不在支持192.168.1.*方式,需要使用正常的网段内容】 192.168.1.0/24
|
| |||
| 选项 | 1 | sync: 数据同步写入硬盘中(是默认配置); async: 数据会先暂存在内存中,不会直接写入硬盘; |
| 选项 | 2 | **ro (read only):**即客户端主机对服务端共享的资源仅有只读权限。 **rw (read write):**即客户端主机对服务端共享的资源有读取、写入的权限。 |
| 选项 | 3 | no root squash: 信任客户端,根据用户UID进行判断(若登录到NFS服务端的用户是root,那么次用户就拥有对共享资源的最高权限)【拥有所有权限,这个参数不安全,不建议使用】。 root squash: 系统预设值,表示当登入NFS服务端的用户是root时,这个使用者的权限会被转换为匿名者(即这个使用者的UID与GID都会变为nobody身份)【只有只读权限】。 all_squash: 不管登录NFS服务端的主机是什么用户,都会将共享资源的UID和GID映射为匿名用户nfs【只有只读权限】。 no_all_squash: 系统预设值表示保留共享文件的UID和GID默认权限(即:客户端登录用户的UID\GID和服务端共享文件的UID\GID相同时,才有对共享文件的读写权限)【该选项保证了共享文件的用户和组权限不会被改变】 |
| NFS的共享资源内容配置文件【/etc/exports】; NFS的共享资源的日志文件【/var/lib/nfs/etab 】。 |||
[NFS服务端的配置说明]
2.3、NFS在Linux上的安装配置
2.3.1、NFS服务端在Linux上的安装
bash
#1-检查当前Linux系统上是否已经安装nfs-utils\rpcbind
rpm -qa|grep nfs
rpm -qa|grep rpcbind
#2-若检查NFS没有在当前Linux系统安装则可以使用yum命令安装
yum install -y nfs-utils rpcbind


2.3.2、NFS服务端的共享资源配置
bash
#1-编辑NFS服务端的配置文件命令
vi /etc/exports
#2-给NFS服务端配置共享的目录及其对这些共享目录文件资源的可访问主机和权限内容
#只让192.168.1.5客户端访问/data目录,且该主机用户的UID以及GID和服务端共享文件UID和GID相同时,才有对共享文件的读写权限,且内容不直接同步到硬盘中而是先存在内存中
/data 192.168.1.5(async,rw,no_all_squash)
#可让任何主机访问/data2/share目录及其包含的内容,但是无论任何用户都只有只读权限
/data2/share *(ro,all_squash)
#只让192.168.1.5客户端访问/opt目录,且该主机用户的UID以及GID和服务端共享文件UID和GID相同时,才有对共享文件的读写权限,且内容直接同步到硬盘中。只让192.168.1.10客户端访问/opt目录且只有只读权限
/opt 192.168.1.5(sync,rw,no_all_squash) 192.168.1.10(ro,all_squash)
#3-让NFS服务端修改的配置文件生效命令
exportfs -rv
#4-NFS服务端的配置完成后重启nfs服务和查看NFS服务启动状态并设置系统开机自启
systemctl restart nfs-server.service
systemctl status nfs-server.service
ps -ef|grep nfs
systemctl enable nfs-server.service
#5-启动NFS服务端所需的rpcbind服务并设置系统开机自启
systemctl restart rpcbind
systemctl status rpcbind
ps -ef|grep rpc
systemctl enable rpcbind
#6-放开NFS的防火墙端口【111、2049】(我这里为了方便直接将防火墙禁用)可以使用【nmap localhost】命令查看本机开放的端口内容
systemctl stop firewalld
systemctl disable firewalld
#7-禁用selinux【将SELINUX=disabled】并让其生效
vi /etc/selinux/config
setenforce 0
2049端口 :这是NFS服务的主要端口,用于NFS协议通信。
111端口: RPC(Remote Procedure Call)端口,NFS依赖RPC服务。
**动态端口:**NFS还会使用一些动态分配的端口(通常在32768-60999范围内)。






2.3.3、NFS客户端在Linux上的安装配置
bash
#1-检查nfs-utils和rpcbind内容是否安装完整
rpm -qa|grep nfs
rpm -qa|grep rpcbind
#2-nfs未安装完整则需要安装
yum -y install nfs-utils rpcbind
#3-查看NFS服务端开放了哪些资源命令(如:查看192.168.1.9这台nfs服务器上开放的资源情况)
showmount -e 192.168.1.9
#5-在当前Linux系统上创建对应的nfs路径用于挂载
mkdir -p /nfs/share /nfs/opt /nfs/data
#6-挂载NFS服务器上的资源到本地路径上【语法为:mount -t nfs NFS服务端IP:共享的路径 需要挂载到本机的路径】
mount -t nfs 192.168.1.9:/data2/share /nfs/share
mount -t nfs 192.168.1.9:/opt /nfs/opt
mount -t nfs 192.168.1.9:/data /nfs/data
#7-查看本机的所有硬盘情况
df -hT






注意:如果我们在卸载NFS挂载点的时候提示【umount.nfs4: /nfs/data1: device is busy】类似这样的提示,我们可以使用【fuser -m 挂载点路径】查看该挂载点对应的PID,找到PID后先杀掉就可以卸载该挂载点了:
bash
#0-查看到Linux上所有的硬盘内容
df -hT
#1-查看当前需要卸载的挂载路径对应的PID(如:需要查看/nfs/data1挂载点的PID信息)
fuser -m /nfs/data1
#2-直接杀掉查询到的挂载路径对应的PID(如:查询到的的内容是1542c,那么PID就是1542)
kill -9 1542
#3-再次卸载制定的挂载路径即可成功卸载了
umount /nfs/data1


三、其他资料
管理文件系统 | Red Hat Enterprise Linux | 10 | Red Hat Documentationhttps://docs.redhat.com/zh-cn/documentation/red_hat_enterprise_linux/10/html-single/managing_file_systems/index文件系统 - Arch Linux 中文维基
https://wiki.archlinuxcn.org/wiki/%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9FNFS 与 SMB 对比 - 文件访问存储协议之间的区别 - AWS
https://aws.amazon.com/cn/compare/the-difference-between-nfs-smb/