摘要:一个文件如果大小较大,直接存储到磁盘特定位置可能会在后续操作中带来不便。比如,存储到某个位置后,若要删除这个文件再存储另一个文件,可能会因空间不连续而需要将新文件存储到磁盘最后面。有了文件系统,用户只需将文件扔进某个文件夹,或者直接删除文件,无需过多考虑磁盘空
一、文件系统的定义与作用
文件系统
文件系统是操作系统用于明确存储设备上文件的方法和数据结构,其作用主要体现在以下几个方面:
1. 便于磁盘空间管理
一个文件如果大小较大,直接存储到磁盘特定位置可能会在后续操作中带来不便。比如,存储到某个位置后,若要删除这个文件再存储另一个文件,可能会因空间不连续而需要将新文件存储到磁盘最后面。有了文件系统,用户只需将文件扔进某个文件夹,或者直接删除文件,无需过多考虑磁盘空间大小的评估和文件的具体存储位置,极大地方便了磁盘空间的管理。
2. 方便数据组织和查找
文件系统帮我们用树的形式进行了规划,呈现给用户一个层级结构,就像我们平常看到的目录、子目录和文件等元素的集合。这种结构非常方便用户记忆和查找文件。如果没有文件系统,用户只能自己去记录位置然后查找所需文件。
3. 提高磁盘利用率
使用文件系统之后,文件系统会将磁盘空间切割为比较小的存储单元,一般划分成对应 4K sector,进行管理。如果出现释放空间产生空洞的情况,文件系统内部会进行空洞和数据的交换,从而生成比较大块的可用磁盘空间。这样从整体来说就极大地提升了磁盘的整理使用率,减少了空间浪费。
二、文件系统的发展历程
1. 单机文件系统
采用集中式存储模式,存在单点故障和性能瓶颈问题,常见的单机文件系统有 Ext4、NTFS 等。在单机时代,文件一般存储在单台服务器上,依靠操作系统的文件系统来实现文件的存储和管理。随着存储需求的增加,单机文件系统的缺点逐渐显现,如存储规模容易达到单机存储极限,在文件数目达到临界点时大量并发读写会导致性能下降,且没有副本,一旦硬件出现损坏,极易造成数据丢失。
2. 网络文件系统
可在计算机之间共享文件,俗称 NAS,允许远程客户端通过网络访问。网络文件系统应用广泛,现在的云存储、网盘概念也源于此。它的出现能解决用户单机存储容量问题,本地计算机可以使用较少的磁盘空间。网络文件系统是文件系统之上的一个网络抽象,虽然能让用户像访问本地文件一样访问远程主机上的文件,但没有根本上解决单机文件系统的瓶颈。例如,NFS(Network File System)是由 SUN 公司研制的 UNIX 表示层协议,能使使用者访问网络上别处的文件就像在使用自己的计算机一样。NFS 是基于 UDP/IP 协议的应用,其实现主要采用远程过程调用 RPC 机制,RPC 提供了一组与机器、操作系统以及低层传送协议无关的存取远程文件的操作。NFS 允许在多个用户之间共享公共文件系统,并提供数据集中的优势,来最小化所需的存储空间。网络文件系统从 1984 年问世以来持续演变,并已成为分布式文件系统的基础。
3. 集群文件系统
使网络上多个节点共用文件系统,消除了单机文件系统的问题。最初集群文件系统是从 NAS 的概念发展而来,依旧采用共享式。集群内的节点共同维护文件系统的数据,一个节点做出变更,则需要广播到其他节点。虽然解决了单机文件系统的各项问题,但集群文件系统也有不可避免的劣势。扩展性方面,集群中的节点数量不能太多,因为每个节点都可能同时在进行通信,系统连接总数为节点数量乘以节点数量。性能方面,一旦集群内的节点发生故障,无法即时响应,影响整个系统的运作,网络开销大。可靠性方面,单个节点出现数据操作失误,比如删除元数据,则会波及整个系统。
4. 分布式文件系统
基本解决了上述文件系统面临的问题,具有扩展性强、可靠性高、高性能、便捷性等优点。分布式文件系统可以随时增删节点,动态扩容,可使用廉价的服务器构建。它有效避免单点故障,有很强的容错能力,具有较高的吞吐量,性能较高,可满足大量文件的读写,操作简单,便于集中访问管理。在分布式文件系统中,节点只可以访问自己磁盘上的内容,有效避免了大量的网络开销。一般元数据会存储在其中的几台节点上,称之为主,主节点之间组成了一个小的集群,可以同步信息,用户访问之时,通过查询主节点上存储的映射信息来确定访问哪个从节点。主从模式有几种形式,如固定主节点容易造成单点瓶颈,随机主节点的典型例子是选举模式。每个节点上存储的数据也都是冗余备份的,一般都会备份三份,防止单点故障。例如,Hadoop 分布式文件系统(HDFS)被设计成适合运行在通用硬件上的分布式文件系统,它是一个高度容错性的系统,适合部署在廉价的机器上,能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。
三、常见的文件系统
1. Windows 操作系统
Windows 操作系统使用多种文件系统,包括 FAT12、FAT16、FAT32、NTFS、exFAT 等。
FAT12、FAT16 是早期的文件系统,随着信息技术的发展,其能够管理的文件数量和磁盘空间相对较小,逐渐被更先进的文件系统取代。FAT32 是较为常见的文件系统,很多操作系统都支持它。它有一些优点,比如更多操作系统支持、有两份分区表,文件丢失风险相对较低、支持微软的可移动磁盘技术等。但也存在一些缺点,如单个文件最多 4GB、分区大小最多128GB、没有日志系统等。NTFS 是微软强推的文件系统,具有很多优势。它支持微软的可移动磁盘技术,对文件大小支持极大,基本脱离了FAT 文件系统的限制,有日志文件,即使在使用中断电也能通过日志恢复部分文件,并且是电脑内部硬盘的默认格式。不过,它也有一些不足,日志文件会导致 U 盘多次读写,不适合可移动设备,而且日志文件会占用分区较大空间,随着操作的零碎文件增多,文件也会越来越大。MacOS 原生只支持读,Linux 干脆不认。exFAT 主要用于 32GB 以上的存储设备,是微软自己研发的 FAT 文件系统系列之一。它特别支持微软的可移动磁盘技术,对文件大小支持的提升极大,单个文件最多 1EB。但它没有日志系统,不支持一些旧版本的 Windows XP,分区表只有一份,使用中插拔可能导致文件丢失风险较高。2. Linux 操作系统
Linux 操作系统主要使用 Ext2、Ext3、Ext4 等文件系统。
Ext2 是早期专门为 Linux 开发的扩展文件系统,但由于在稳定性、速度和兼容性上存在缺陷,现在已很少使用。Ext3 是在 Ext2 的基础上加入了记录元数据的日志功能,成为日志文件系统。它提高了文件系统的安全性,在系统非正常关机等情况下,恢复时间较短,通常只需要两三分钟。Ext3 支持大文件,对磁盘驱动器读写头进行了优化,文件系统速度相对较快,尤其是对于中、小型文件更具优势。同时,从 Ext2 转换到 Ext3 非常容易,用工具 tune2fs 即可轻松完成转换,而且 Ext3 文件系统可以直接挂载成 Ext2 文件系统。Ext4 是在 Ext3 上发展起来的,提供了更佳的性能和可靠性,功能更丰富。它向下兼容 Ext3 和 Ext2,安装的 Linux 系统中经常使用 Ext4 文件系统,它在性能、存储能力等方面表现出色。3. Unix 操作系统
Unix 操作系统使用 UFS1、UFS2 等文件系统。
Unix V7 是 Unix 操作系统的一个重要早期版本,其文件系统有一些独特的结构和概念。磁盘由一系列数据块组成,文件系统开始部分是超级块,位于磁盘的第 1 块,存储了文件系统的基本信息。索引节点(inode)是描述文件内容和属性的结构,每个文件都需要一个 inode。每个文件具有一些固定属性,如文件类型和访问权限、所有者、组 ID、文件长度、数据块在磁盘上的地址以及访问时间、修改时间和创建时间等。
4. 苹果操作系统
苹果操作系统使用 HFS、HFS+、APFS 等文件系统。
在 macOS High Sierra 中,苹果推出了苹果文件系统(APFS),以代替用了多年的 HFS + 系统。APFS 专为闪存而设计,支持 64 位 inode 编号,具有内置加密、防崩溃保护和简化的即时数据备份等功能。它加速了常见任务,如复制文件和查找文件夹内容的大小。HFS 和 HFS + 在早期的苹果操作系统中发挥了重要作用,但随着技术的发展,逐渐被 APFS 取代。5. 光盘存储介质
主要有 ISO-9660 和 UDF 两种文件系统。
ISO-9660 是针对光盘存储的文件系统之一,在光盘存储中广泛应用。UDF 本来是给光盘设计的文件系统,在可移动磁盘上也有不错的表现。它没有很多读写的文件,如日志,但也因为这个特点,不支持微软的可移动磁盘技术,也不能做启动盘。
6. 网络存储系统
如 Google 文件系统 GFS 是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的网络应用场景。它可以解决传统文件系统在大规模数据存储和访问方面的问题,具有可扩展性强、可靠性高、高性能、便捷性等优点。在分布式文件系统中,节点只可以访问自己磁盘上的内容,有效避免了大量的网络开销。一般元数据会存储在其中的几台节点上,称之为主,主节点之间组成了一个小的集群,可以同步信息,用户访问之时,通过查询主节点上存储的映射信息来确定访问哪个从节点。
四、文件系统的特点
1. FAT 文件系统
FAT 文件系统兼容性强,结构简单。在性能方面,它适合小文件存储,速度较快,这使得它非常适用于 U 盘和存储卡等移动设备。例如,在一些小型嵌入式系统以及需要在不同操作系统之间共享数据的场景下,FAT 文件系统的兼容性优势就得以体现,因为几乎所有操作系统都支持 FAT。
2. NTFS 文件系统
NTFS 文件系统具有较高的安全性,它支持文件和目录级别的访问控制列表,能够提供更精细的权限管理。同时,NTFS 文件系统支持较大的文件和分区大小,对于需要存储大文件的场景非常适用。此外,NTFS 还具有日志功能,这一功能可以防止数据损坏,提高了系统的稳定性。例如,在 Windows 操作系统的硬盘分区中,NTFS 是常见的选择,尤其在需要高级文件管理功能的场景下,如企业级存储中,NTFS 的安全性和稳定性能够满足需求。
3. ext4 文件系统
ext4 文件系统支持延迟分配,这种方式能够减少文件碎片,提高磁盘空间的利用率。同时,它具备日志功能,防止数据损坏,为数据的安全性提供了保障。ext4 文件系统还支持大文件和大容量存储设备,适用于 Linux 系统的硬盘分区以及需要高性能和稳定性的服务器环境。例如,在处理大文件和大规模数据存储的场景下,ext4 的性能优势明显。
4. HFS + 和 APFS
HFS + 支持文件夹、文件属性和硬链接。在 macOS 系统的硬盘分区中,HFS + 的兼容性好,能够优化文件存取速度,方便用户进行文件管理。APFS 是苹果为 macOS、iOS 等系统设计的文件系统,它提供了更高的性能和数据完整性。APFS 专为SSD 设计,优化了 SSD 性能,支持快速文件复制和快照,并且支持加密和数据完整性检查,适用于需要高性能和数据安全的环境。
5. XFS 和 ZFS
XFS 用于 Unix 和 Linux 系统,支持大文件和高性能的文件系统。它在处理大规模数据存储和高吞吐量的场景下表现出色,适用于需要高性能存储的服务器环境。ZFS 集成了文件系统和逻辑卷管理功能,支持数据校验和修复,防止数据损坏,具有高可用性和扩展性。在需要高数据完整性和可用性的企业级存储系统以及大容量存储的环境中,ZFS 能够发挥重要作用。
五、文件系统的未来发展趋势与挑战
分布式存储与计算将成为文件系统发展的趋势,未来文件系统将继续向着更高的可靠性、更强的扩展性和更优化的性能方向发展。
为了实现这些目标,文件系统需要在多个方面不断创新和改进。首先,在可靠性方面,可以采用多种技术手段。例如,使用冗余存储技术,如分布式文件系统中的数据多副本备份,即使某个存储节点出现故障,数据仍然可以从其他节点恢复。数据完整性校验技术,如校验和或哈希值校验,可以检测数据在传输或存储过程中的损坏或篡改。容错机制,如错误检测和纠正码(ECC),能够在存储设备发生错误时自动修复或恢复数据。快照和版本控制功能可以定期或在特定事件发生时创建文件系统的快照,以便在数据丢失或损坏时恢复到之前的状态。定期备份数据到其他存储介质或云存储中,也是提高可靠性的重要措施。此外,错误检测和修复机制以及安全性保护措施,如访问控制列表(ACL)或加密技术,也能有效提升文件系统的可靠性。
在扩展性方面,分布式文件系统具有明显优势。它可以随时增删节点,动态扩容,适应不断增长的数据存储需求。分布式文件系统采用数据分布策略,将数据存储在多个节点上,通过有效的元数据管理机制实现数据的均衡分布和高效访问。同时,分布式文件系统能够解决传统文件系统在大规模数据存储和访问方面的问题,避免单点故障,提高系统的可用性和稳定性。例如,Google File System(GFS)、Hadoop Distributed File System(HDFS)和 Ceph 等分布式文件系统,通过主从架构或对象存储等方式,实现了高度可扩展的存储解决方案。
在性能方面,文件系统可以通过多种方式进行优化。例如,采用快速索引结构、高速缓存和延迟敏感型调度等技术,提高文件系统的存取速度,降低延迟。对于并发处理,文件系统需要更好地支持多核处理器,采用多线程和并发控制机制,提高多用户多任务环境下的性能。负载均衡也是提高性能的关键,确保数据在存储设备上均匀分布,避免性能瓶颈。此外,针对不同的存储介质进行优化,如固态硬盘(SSD)和非易失性内存(NVM),充分发挥其性能优势。例如,文件系统需要优化以充分利用 SSD 的快速读写速度和低延迟,为文件系统带来更高的性能和持久性。
去中心化文件系统作为一种新型存储方式,也为文件系统的未来发展提供了新的思路。它采用分布式存储技术,数据分布在多个节点上,而非存储在单一的中心服务器上,从而实现了对数据的去中心化管理。去中心化文件系统可以大幅提升数据的安全性和可靠性,保护用户的隐私和数据权益。例如,IPFS、Filecoin 和 Storj 等去中心化文件系统,以内容寻址的方式管理文件,用户可以根据文件的内容找到相应的节点进行下载。未来,去中心化文件系统有望成为数据存储的主流方式之一。
未来文件系统的发展还将面临诸多挑战。通过不断创新和改进,文件系统将在可靠性、扩展性和性能方面取得更大的突破。
来源:Hi花轮