文件系统是操作系统用于组织和管理存储设备或分区上的文件的方法和数据结构。操作系统中负责管理和存储文件信息的软件组织称为文件管理系统,简称文件系统。
下图中是Linux上常见的本地文件系统,Windows常用的文件系统有NTFS,当然随着技术发展,各种基于网络的分布式文件系统,也是层出不穷,比如:NFS、CIFS(windows),还有一类集群式的分布式文件系统,比如:Lustre、Ceph,这类文件系统在数据洪流、万物智联的在今天应用更加广泛。
一、文件系统和存储系统
据报道,我国拥有的数据总量达32.85ZB,相当于1000多万个中国国家图书馆的数字资源总量,换算成熟悉的GB单位来说,全国每天产生的数据量也达到了惊人的900亿GB。
随着数据爆发式增长,国内外数据存储发展迅速,国内很多厂商可以提供存储设备或者文件系统,那么文件系统和存储系统的区别到底有哪些。
比较项目 | 文件系统 | 存储系统 |
基本功能 | 组织和管理存储设备上的数据,提供用户友好的数据访问接口 | 更关注数据的存储和访问效率,可以直接提供块访问,也可以提供文件系统访访问能力 |
软件还是硬件? | 纯软件系统 | 包含硬件系统和软件系统: 1)硬件系统:盘框、控制器、数据盘、交换设备、接口卡等 2)软件系统一般包括存储管理软件,文件系统(可选,多数存储都提供多种文件系统支持) |
数据介质 | 文件系统一般是屏蔽介质层(不是不关注,是相对少一些),更多关注文件组织和管理,更好提供用户接口 | 要关注存储介质,通过软硬协同方式,提供高性能存储能力 |
数据保护(冗余能力)技术 | 副本(软件) 纠删码(软件) | Raid(硬件控制器实现) 副本(软件) 纠删码(软件) |
二、几种文件系统类型
我们在说文件系统时,如果没有加特别说明,指的都是本地文件系统,或者说是单机版文件系统,比如:xfs、ext4、NTFS、minix等等。
随着数据爆发式增长,单机版文件系统已经不能满足要求,近10年,在企业应用中出现大量分布式、集群式的文件系统(或分布式存储),这种分布式文件系统,凭借着强大的水平扩展能力受到用户的追捧,以下就列举几个常见的分布式文件系统:
文件系统 | 主要特点 | 当前用途 |
Lustre | 也叫并行(集群)文件系统: 1)底层基于ldiskfs(ext4)或ZFS文件系统 2)分离数据和元数据管理(OSS、MDS),将文件切片打撒,实现分布式Layout能力 3)有独立的客户端 | HPC超算领域Top1(气象、基因) |
HDFS | 也叫大数据文件系统: 1)提供一种数据分离管理框架,将数据和元数据分离(Datanode、Namenode) 2)屏蔽底层存储介质细节,提供高扩展能力 3)上层接口友好,可基于底层框架,实现多种非结构化或半结构化存储(列存储) | 数据仓库、数据分析、实时SQL查询(金融、运营商、工业) |
Ceph | 分布式存储: 1)属于软件定义存储典型 2)底层屏蔽具体存储介质,支持多种介质类型 3)用软件实现多种存储接口:块、对象、文件 4)文件分块存储,通过CRUSH算法动态寻址 5)去中心化设计 | 企业文件存储、AI大模型训练 |
三、文件系统组织结构
文件结构是文件存放在存储设备上的组织方式,主要体现在对文件和目录的组织上。主流的操作系统,不论是Windows、还是Linux,都采用标准的目录结构—树型结构,无论操作系统管理几个磁盘分区,这样的目录树只有一个。这样的目录组织,有助于对文件系统和不同用户文件进行统一管理。下图就是常见的Linux目录组织形式:
四、一切皆文件
“一切皆文件”是Unix和类Unix(类似Linux)的一种设计哲学。
这种思想最早来自于Unix操作系统的设计者之一, 肯·汤普森(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie)。在Linux当中,并不只是传统的文件(文件和目录),许多其他的类似设备(设备、进程、网络套接字),进程等等也都被当做文件来进行处理。
这种设计哲学带来的好处就是,由于大部分操作都可以通过读写文件来完成,故程序员可以使用同样的接口来处理各种情况从而简化编程工作。
但是,本文系列文章,所讲述的是偏狭义的文件系统,也就是存储设备、存储分区的管理,也就是普通文件和目录的管理,或者说是Linux上的文件系统,也就是IO设备的管理。
五、常见的文件系统类型
Linux目前支持几十上百种文件系统类型,如ext2,ext3,ext4,xfs,brtfs等。在Linux系统下使用man 5 fs可以查看当前系统支持的文件系统。
不同文件系统采用不同的方法来管理磁盘空间,他们各有优劣;文件系统是具体到分区的,所以格式化针对的是分区,分区格式化是指采用指定的文件系统类型对分区空间进行登记、索引并建立相应的管理表格的过程。
文件系统 | 文件系统说明 | 其它备注信息 |
ext | Extended file system,Linux内核第一个使用VFS构建的文件系统,由Remy Card 设计,1992年引入到Linux | 在linux核心0.96c版中首次加入支持,最大可支持2GB |
ext2 | 由Remy Card 实现的,并于1993年1月引入到Linux中。它借鉴了当时文件系统(Berkeley Fast File System [FFS])的先进想法 | 具有极快的速度和极小的CPU占用率,可用于硬盘和移动存储设备; 支持的最大文件系统为2TB,到了2.6内核支持的最大容量提升到32TB |
ext3 | ext3 文件系统引入了日志(journaling)概念,以在系统突然停止时提高文件系统的可靠性 | |
ext4 | ext4 是由 Theodore Tso(ext3 的维护者)领导的开发团队实现的,并引入到 2.6.19 内核中 | ext4 支持 1 EB 的文件系统。最大单文件16TB,支 持连续写入可减少文件碎片 |
xfs | XFS一种高性能的日志文件系统,最早于1993年,由SGI为他们的IRIX操作系统而开发,是IRIX 5.3版的默认文件系统,2000年5月,XFS在GPL许可证下发布,并被移植到Linux上 | XFS是一个64位文件系统,最大支持8EB文件系统,实际部署时取决于宿主操作系统的最大块限制。对于一个32位Linux系统,文件和文件系统的大小会被限制在16TB |
Btrfs | B-tree文件系统,通常念成Butter FS,Better FS或B-tree FS,一种支持写入时复制(Copy-On-Write)的文件系统。Oracle于2007年对外宣布这项计划,并发布源代码,在2014年8月发布稳定版。目标是取代当时在Linux上广泛使用的ext3文件系统,改善文件系统的限制,增加单个文件大小上限支持 | Btrfs的核心数据结构——写时复制B树。支持的特性非常丰富:联机碎片整理、联机卷生长和收缩、联机块设备增加和删除、联机负载平衡、透明压缩、快照、文件克隆等等。最大支持16EB文件系统,单文件也是16EB |
ZFS | ZFS(Zettabyte File System)是一个拥有逻辑卷管理功能的文件系统,最早源自于Sun公司在2001年为Solaris开发的文件系统。ZFS具有可扩展性,并且包括大量保护措施防止数据损坏,支持高存储容量、高效数据压缩、集成文件系统、卷管理、快照和写入时复制COW、连续完整性检查与自动修复、RAID-Z、原生NFSv4 ACL等功能,并且能被精确配置 | ZFS是一个128位的文件系统,这意味着它能存储1800亿亿(18.4×1018)倍于当前64位文件系统的数据。实际应用中一般16EB最大文件系统和单文件。 |
NTFS | NTFS(NT File System),是微软公司开发的专用文件系统,从Windows NT 3.1开始成为Windows NT家族的默认文件系统。它提供了一整套功能,包括安全描述符、加密、磁盘配额和丰富的元数据。 它可以和聚类共享卷 (CSV) 一起使用,以提供可以从故障转移聚类的多个节点同时访问的连续可用卷。 | 理论支持16EB容量,实际值在256TB(Windows8和Windows Server 2012之后版本) |
NFS | 网络文件系统(Network File System)是一种分布式文件系统,力求客户端主机可以访问服务器端文件,并且其过程与访问本地存储时一样,它由Sun公司开发,于1984年发布 | NFSv4.2 于2016年发布 |
CIFS | 服务器消息块(Server Message Block,缩写为SMB),又称网络文件共享系统(Common Internet File System,缩写为CIFS),一种应用层网络传输协议,由微软开发,主要功能是使网络上的机器能够共享计算机文件、打印机、串行端口和通讯等资源。它也提供经认证的进程间通信机能。它主要用在装有Microsoft Windows的机器上。经过Unix服务器厂商重新开发后,它可以用于连接Unix服务器和Windows客户机,执行打印和文件共享等任务。 | 与功能类似的网络文件系统(NFS)相比,NFS的消息格式是固定长度,而CIFS的消息格式大多数是可变长度,这增加了协议的复杂性。CIFS消息一般使用NetBIOS或TCP协议发送,分别使用不同的端口139或445,目前倾向于使用445端口。CIFS的消息包括一个信头(32字节)和消息体(1个或多个,可变长)。 |
EROFS | EROFS(Enhanced Read-Only File System)是高翔等开发者为Linux内核开发的轻量级只读文件系统,旨在为各种只读使用场景(嵌入式设备、容器等)提供通用的只读文件系统解决方案。EROFS着重优化了运行时性能,同时实现了存储空间节省。EROFS也可以用于替代tar或cpio作为归档格式使用,拥有更好的随机读取性能。 | EROFS针对Android、HarmonyOS智能手机或嵌入式设备等硬件资源有限的设备上的高性能只读需求,提供了透明压缩节省存储空间的解决方案。华为所有搭载EMUI 9.0.1或更高版本的新产品均使用EROFS,EMUI 9.1还将EROFS作为关键功能推广。Oppo、小米和部分三星产品也使用EROFS。 EROFS在Linux 5.4中正式合并到主线。 1) 以通过尾封装内联技术混合元数据和数据 2) 支持POSIX属性和权限、xattr拓展属性和POSIX访问控制表 3) 支持使用LZ4或MicroLZMA(自Linux 5.16起)进行固定输出透明压缩,以实现相对较高的压缩比 4) 原位解压,实现了更高的顺序读取速率 |
Lustre | Lustre,一种并行分布式文件系统,通常用于大型计算机集群和超级计算机。Lustre是源自Linux和Cluster的混成词。最早在1999年,由皮特·布拉姆(Peter Braam)建立的集群文件系统公司(Cluster File Systems Inc.)开始研发,于2003年发布 Lustre 1.0。采用GNU GPLv2开源码授权。 | 相关历史参见:https://www.bitsobject.com/index.php/2024/10/18/01-lustre%e5%9d%8e%e5%9d%b7%e7%9a%84%e5%8e%86%e5%8f%b2/ |
tmpfs | tmpfs,临时文件系统,是一种基于内存的文件系统,它和虚拟磁盘ramdisk比较类似像,但不完全相同,和ramdisk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储,而且传统的ramdisk是个块设备,要用mkfs来格式化它,才能真正地使用它;而tmpfs是一个文件系统,并不是块设备,只是安装它,就可以使用了。tmpfs是最好的基于RAM的文件系统。 | |
参考资料:
维基百科:文件系统
维基百科:文件系统列表
西邮陈莉君老师:内核之旅
《001 什么是文件系统?》有3个想法