一、文件系统类型
1、概述
Linux下常见的有DOS文件系统类型msdos,windows下的FAT系列(fat16和FAT32)和NTFS文件系统(在linux下只读),光盘文件系统ISO-9660,单一文件系统ext2和日志文件系统ext3、ext4、xfs,集群文件系统gfs(Red Hat Global File System)、ocfs2(oracle cluster File System)、虚拟文件系统(比如 /proc),网络文件系统(NFS)。
2、选择标准
(1)读操作频繁,同时小文件众多的应用
对于此类应用,选择ext4文件系统都是不错的选择。 由于ext3的目录结构是线型的,因此当一个目录下文件较多时,ext3的性能就下降比较多。而ext4的延迟分配、多块分配和盘区功能,使ext4非常适合大量小文件的操作,因此,从性能方面考虑,对于小规模文件密集型应用,ext4文件系统是首选。而如果从性能和安全性方面综合考虑的话,xfs文件系统是比较好的选择。大量实践证明,如果业务环境是对文件要进行大量的创建和删除操作的话,ext4是更高效的文件系统,接下来依次是xfs、ext3。例如网站应用,邮件系统等,都可使用ext4文件系统来达到最优性能。
(2)写操作频繁的应用
如果是一些大数据文件操作,同时,应用本身需要大量日志写操作,那么,xfs文件系统是最佳选择,根据实际应用经验,对xfs、ext4、ext3块写入性能对比,整体上性能差不多,但在效率上(CPU利用率)最好的是xfs,接下来依次是ext4和ext3。
(3)对性能要求不高、数据安全要求不高的业务
对于这类应用,ext3/ext2文件系统是比较好的选择,因为ext2没有日志记录功能,这样就节省了很多磁盘性能。例如linux系统下的/tmp分区就可以采用ext2文件系统。
二、网络文件系统NFS
1、什么是NFS
NFS的全称是Network FileSystem,即网络文件系统,NFS主要实现的功能是让网络上的不同操作系统之间共享数据。
NFS首先在远程服务端(共享数据的操作系统)共享出文件或者目录,然后远端共享出来的文件或者目录就可以通过挂载(mount)的方式挂接到本地的不同操作系统上,最后,本地系统就可以很方便的使用远端提供的文件服务,操作起来像在本地操作一样。从而实现了数据的共享。
2、NFS Server端的配置
NFS的主要配置文件只有一个/etc/exports,配置非常简单,设置格式为:
共享资源路径 [主机地址] [选项]
例如:下面是某系统/etc/exports的设置:
/webdata *(sync,rw,all_squash)
/tmp *(rw,no_root_squash)
/home/share 192.168.1.*(rw,root_squash) *(ro) #ip段形式
/opt/data 192.168.1.18(rw)
共享资源路径:就是要共享出来的目录或者磁盘分区。例如上面的/tmp、/home/share目录等,这些目录存在于NFS Server端,以供NFS Client挂载使用。
主机地址:设定允许使用NFS Server共享资源的客户端主机地址,主机地址可以是主机名、域名、IP地址等,支持匹配。
选项:
ro: 即为:read only,也就是客户端主机对共享资源仅仅有读权限。
rw: 即为:read write,也就是客户端主机对共享资源有读、写权限。
no_root_squash: 信任客户端,根据用户UID进行判断,如果登入到NFS主机的用户是ROOT,那么此用户就拥有对共享资源的最高权限。此参数很不安全,建议不要使用。
root_squash:系统预设值,当登入NFS主机的用户root 时,那么这个使用者的权限将被縮成为匿名使用者,也就是它的UID与GID都会变成nfs nobody身份;只有可读权限,系统以此为预设值,显然是为了安全考虑。
all_squash:不管登陆NFS主机的是什么用户,都会将共享文件的UID和GID映射为匿名用户nfs nobody。
no_all_squash:系统预设值,保留共享文件的UID和GID默认权限。也就是客户端用户的UID以及GID和服务端共享文件UID和GID相同时,才有对共享文件的读写权限。这种选项保证了共享文件的用户和组权限不会改变。
sync:资料同步写入磁盘中。默认选择。
async:资料会先暂时存放在内存中,不会直接写入硬盘。
利用exportfs命令即可让修改生效
重新mount 文件/etc/exports中分享出来的目录,显示mount过程,操作如下: [root@NFS Server ~]# exportfs -rv -r :重新mount /etc/exports中分享出来的目录。 -v :在 export 的時候,将详细的信息输出到屏幕上。
3、NFS Client端的配置
4、实战演示
这里我启用了两台虚拟机,分别为almalinux test(服务端)和centos test(客户端),ip分别为192.168.146.54和192.168.146.211。
(1)我们首先要确保我们的服务器已经安装了对应的NFS服务包,分别是rpcbind和nfs。
(2) 我们在服务端almalinux test,在/etc/exports中编写相关分享信息及权限设置,如下:
(3) 使用exportfs -rv命令对编辑好的配置文件进行导出生效,此时服务端的共享目录已经配置好了。
(4) 接下来我们将相关的NFS服务启动一下,分别是nfs、rpcbind、nfslock服务,如下:
(5)为了确保客户端可以顺利连接服务端,测试时可以把一些安全性的服务关闭,如iptables、selinux 、firewalld,此时修改的selinux安全服务是不生效的,我们可以选择重启服务端或者用 setenforce 0 命令,临时生效。至此,服务端配置完成。
(6) 接下来我们用客户端(centos test)去挂载服务端(almalinux test)共享出来的目录,同样我们先要去检查需要的包是否已经安装。
(7) 我们在客户端可以使用showmount -e [客户端ip] 的命令查看客户端共享的文件。
(8)接下来我们挂载第一个共享目录/data1,这时我们需要记得在服务端给/data1的权限是(sync,rw,all_squash)。格式:
mount -t [文件类型] 服务端ip:要挂载的目录 挂载到本地目录哪里
(9) 我们通过查看客户端磁盘情况发现此时已经挂载成功。
(10)接下来我们在客户端进入挂载的目录,当服务端写入目录时,客户端也可以收到,但在客户端却无法创建目录,原因便是之前提到的all_squash权限,表示无论你是以什么用户登录的,权限都会收回。
(11)我们发现对test1用户我们权限足够,进入test1目录,我们进行创建目录test2操作,发现此时test2的权限变为了nfsnobody。而我们是以客户端root用户登录的,但创建的权限全部变成了nfsnobody,这便是服务端all_squash赋予的。
(12)相同方法我们可以去挂载剩下的两个目录,分别去实验不同的权限作用,方法类似。
no_root_squash: 信任客户端,根据用户UID进行判断,如果登入到NFS主机的用户是ROOT,那么此用户就拥有对共享资源的最高权限。此参数很不安全,建议不要使用。
root_squash:系统预设值,当登入NFS主机的用户root 时,那么这个使用者的权限将被縮成为匿名使用者,也就是它的UID与GID都会变成nfs nobody身份;只有可读权限,系统以此为预设值,显然是为了安全考虑。