目前,计算机市场提供了大量以数字形式存储信息的机会,现有的存储设备包括内部和外部硬盘驱动器、照片/摄像机的存储卡、USB 闪存驱动器、RAID 集以及其他复杂存储。数据片段以文件的形式保存在它们上,如文档、图片、数据库、电子邮件等,这些数据必须在磁盘上有效地组织并在需要时轻松检索。
以下文章提供了文件系统的一般概述,这是任何存储上数据管理的主要手段,并描述了其不同类型的特性。
TOC
任何计算机文件都存储在具有给定容量的存储介质上。实际上,每个存储器都是用于读取或读写数字信息的线性空间,它上的每个信息字节都有其与存储开始的偏移量,称为 地址 ,并由该地址引用。存储可以表示为具有一组 编号单元格的网格 (每个单元格是一个字节)。保存到存储中的任何项目都有自己的单元格。
通常,计算机存储使用扇区和扇区内偏移对来引用存储上的任何信息字节。 扇区 是一组字节(通常为 512 字节),是物理存储的最小可寻址单元。 例如, 硬盘驱动器上的 字节 1040将被称为扇区#3 , 偏移量为扇区 16 字节 (扇区+扇区+16 字节)。该方案用于优化存储寻址并使用较小的数字来引用位于存储上的任何信息部分。
为了省略地址的第二部分(扇区内偏移),文件通常 从扇区开始存储 并 占据整个扇区 (例如:一个10字节的文件占据整个扇区,一个512字节的文件也占据整个扇区)扇区,同时,一个 514 字节的 1 占用了两个完整的扇区)。
每个文件都存储在“未使用的”扇区 中,以后可以通过其已知位置和大小读取。但是,我们如何知道哪些扇区被占用,哪些扇区空闲?文件的大小、位置和名称存储在哪里?这正是文件系统 所负责的。
作为一个整体, 文件系统(通常缩写为 FS)是数据的结构化表示和 描述该数据的一组元数据。它在格式化操作期间应用于存储。这种结构用于整个存储的目的,也是隔离存储段的一部分—— 磁盘分区。通常,它在 块而不是扇区中运行。 FS 块 是优化存储寻址的扇区组。现代类型通常使用从 1 到 128 个扇区(512-65536 字节)的块大小。文件通常存储在块的开头并占据整个块。
存储中的持续 写入/删除操作 会导致其 碎片化。因此,文件不是作为整个单元存储的,而是被分割成片段的。例如,一个卷完全被大小约为 4 个块的文件(例如一组照片)占据。用户想要存储一个占用 8 个块的文件,因此删除了第一个和最后一个文件。通过这样做,他或她释放了 8 个块的空间,但是,第一段位于存储起点附近,而第二段位于存储终点附近。在这种情况下,8 块文件被分成两部分(每部分 4 块)并占用空闲空间“孔”。关于这两个片段的信息作为其组成部分存储在文件系统中。
除了用户的数据,文件系统还包含自己的 参数 (如块大小)、 文件描述符 (包括其大小、位置、片段等)、 名称 和 目录层次结构。它还可以存储安全信息、 扩展属性 和其他参数。
为了满足不同用户的存储性能、稳定性和可靠性等需求,我们开发了大量的 FS 类型(或格式),以便能够更有效地服务于不同的用途。
Microsoft Windows 使用两种主要的文件系统: NTFS,该操作系统的大多数现代版本默认使用的主要格式,以及 FAT,它继承自旧 DOS 并具有 exFAT 作为其后来的扩展名。ReFS也被 Microsoft 引入,作为从 Windows Server 2012 开始的新一代服务器计算机格式。由 Microsoft 与 IBM 共同开发的HPFS只能在运行 Windows NT 至 3.5 的极旧机器上找到。
FAT (文件分配表)是最简单的 FS 类型之一,自 1980 年代以来一直存在。它由 FS 描述符扇区 (引导扇区或超级块)、 块分配表 (简称文件分配表)和 用于存储数据的普通存储空间组成。FAT 中的文件存储在目录中。每个目录都是一个32 字节的记录数组 ,每个记录定义一个文件或其扩展属性(例如一个长名称)。记录属于文件的第一个块。通过将其用作链表,可以通过块分配表找到任何下一个块。
块分配表包含一个块描述符数组。零值表示该块未被使用, 非零值与文件的下一个块或文件末尾的特殊值有关。
FAT12、 FAT16、 FAT32中的数字 代表用于寻址 FS 块的位数。这意味着 FAT12 最多可以使用 4096 个不同的块引用,而 FAT16 和 FAT32 最多可以使用 65536 和 4294967296。实际的最大块数甚至更少,并且取决于 FS驱动程序的实现。
FAT12 和 FAT16 曾经应用于旧的 软盘 ,现在没有广泛的应用。 FAT32 仍然广泛用于 存储卡 和 USB 记忆棒。智能手机、数码相机和其他便携式设备支持该格式。
FAT32 可用于Windows兼容的外部存储或使用 该操作系统的内置工具格式化的大小在32 GB以下的磁盘分区上,或者在使用其他方式格式化存储时最大2 TB。文件系统也不允许创建大小超过 4 GB的文件。为了解决这个问题, 引入了exFAT ,它在大小方面没有任何实际限制,并且经常用于现代外部硬盘驱动器和 SSD。
NTFS(新技术文件系统) 于 1993 年随 Windows NT 一起推出,目前是基于 Windows 的最终用户计算机最常用的文件系统。Windows Server 系列的大多数操作系统也使用这种格式。
由于日记功能,这种 FS 类型非常可靠,并且支持许多功能,包括 访问控制、 加密 等。NTFS 中的每个文件都作为描述符存储在 主文件表 及其数据内容中。主 文件表 包含有关它们的所有信息的条目:大小、分配、名称等。表的前 16 个条目为 BitMap 保留,它记录所有空闲和使用的集群,日志用于日志记录和BadClus 包含有关坏集群的信息。文件系统的第一个和最后一个扇区包含其设置 (引导记录或 超级块)。这种格式使用 48 和 64位 值引用文件,因此能够支持极高容量的数据存储。
ReFS(弹性文件系统) 是微软在 Windows 8 中引入的最新开发,现在可用于 Windows 10。它的架构与其他 Windows 格式完全不同,主要以 B+-tree的形式组织。 由于其中包含新功能,ReFS对故障具有很高的容忍度。其中最值得注意的是 Copy-on-Write (CoW):元数据不被复制就不会被修改;数据不会覆盖现有数据 - 它被放置到磁盘上的另一个区域。在进行任何修改后,元数据的新副本会保存到存储上的空闲区域,然后系统会创建从旧元数据到新副本的链接。因此,大量较旧的备份存储在不同的位置,除非该存储空间被覆盖,否则可以轻松恢复数据。
HPFS(高性能文件系统) 由 Microsoft 与 IBM 合作创建,并于 1989 年与 OS/2 1.20 一起推出,作为服务器的文件系统,与 FAT 相比可以提供更好的性能。与 FAT 不同,FAT 只是为文件片段分配磁盘上的任何第一个空闲簇,HPFS 试图将文件排列在连续的块中,或者至少确保其片段(称为 extents)彼此尽可能靠近. HPFS 开始时有 3 个控制块占用 18 个扇区: 引导块、 超级块 和 备用块。剩余的存储空间被划分为称为 带 的连续扇区的部分每个占用 8 MB。一个频段有自己的 扇区分配位图 ,显示其中哪些扇区被占用(1 - 占用,0 - 空闲)。每个文件和目录都有自己的 F 节点 ,位于磁盘上靠近它的位置——这个结构包含有关文件位置及其扩展属性的信息。 位于磁盘中心的特殊 目录带用于存储目录,而目录结构本身是具有字母条目的平衡树。
提示:有关 Windows 使用的 FS 类型的数据恢复角度的信息可以在有关不同操作系统的数据恢复特性和数据恢复机会的文章中找到。有关详细说明和建议,请阅读专门用于从 Windows 恢复数据的手册。
Apple 的 macOS 应用了两种 FS 类型: HFS+是旧 Macintosh 计算机上使用的传统 HFS 的扩展,以及 APFS是运行 macOS 10.14 及更高版本的现代 Mac 所采用的格式。
在 macOS High Sierra 中被 APFS 取代之前, HFS+ 曾经是 Apple 桌面产品的主要格式,包括 Mac 电脑、iPod 以及 Apple X Server 产品。高级服务器产品还使用 Apple Xsan,这是一种 源自 StorNext 和 CentraVision的集群文件系统。
HFS+使用 B 树来放置和定位文件。卷被划分为扇区,通常大小为 512 字节,然后将它们分组为分配块,分配块的数量取决于整个卷的大小。有关空闲和已用分配块的信息保存在分配文件中。作为扩展分配给每个文件的所有分配块都记录在扩展溢出文件中。最后,所有文件属性都列在 Attributes 文件中。通过日志记录提高了数据可靠性,这使得跟踪系统的所有更改成为可能,并在发生意外事件时迅速将其恢复到工作状态。其他支持的功能包括目录硬链接、逻辑卷加密、访问控制、数据压缩等。
Apple 文件系统旨在解决其前身存在的基本问题,其开发目的是有效地与现代闪存和固态驱动器配合使用。这种 64 位格式使用写时复制方法来提高性能,允许在应用更改之前复制每个块,并提供大量数据完整性和节省空间的功能。有关文件、文件夹以及其他 APFS 结构的所有内容和元数据都保存在 APFS 容器中。 Container Superblock 存储有关 Container 中的块数、块大小等信息。有关 Container 的所有已分配和空闲块的信息在 Bitmap Structures 的帮助下进行管理。Container 中的每个卷都有自己的 卷超级块 它提供了有关此卷的信息。卷的所有文件和文件夹都记录在 File and Folder B-Tree中,而 Extents B-Tree 负责范围 - 对文件内容的引用(文件开头,其长度以块为单位)。
开源 Linux 旨在实现、测试和使用不同类型的文件系统。Linux 最流行的格式包括:
Ext2、Ext3、Ext4 只是 “本机” Linux Ext 文件系统的不同版本。这种类型属于积极的发展和改进。 Ext3只是 Ext2的扩展, 它使用带有 日志的事务性文件写入操作。 Ext4 是 Ext3 的进一步发展,在优化文件分配信息(范围)和扩展文件属性的支持下进行了扩展。对于大多数 Linux 安装,此 FS 经常用作 “根”。
ReiserFS - 一种替代 Linux 文件系统,针对 存储大量小文件进行了优化。它具有良好的搜索功能,并通过存储文件的尾部或非常小的项目以及元数据来实现文件的紧凑分配, 以避免为此目的使用大的 FS 块。但是,不再积极开发和支持这种格式。
XFS - 一个强大的日志文件系统,最初由 Silicon Graphics 创建并由该公司的 IRIX 服务器使用。2001 年,它进入了 Linux 内核,现在大多数 Linux 发行版都支持它,其中一些发行版,如 Red Hat Enterprise Linux,甚至默认使用它。这种 FS 类型针对 在单个主机上存储非常大的文件和卷进行了优化。
JFS——IBM 为公司强大的计算系统开发的文件系统。JFS1 通常代表 JFS, JFS2 是第二个版本。目前,该项目是 开源的 ,并在大多数现代 Linux 版本中实现。
Btrfs - 一种基于写时复制原则 (COW) 的文件系统,由 Oracle 设计,自 2009 年起得到主线 Linux 内核的支持。Btrfs 包含逻辑卷管理器的特性,能够跨多个设备,并提供更高的容错性、更好的可扩展性、更易于管理等以及许多高级可能性。
F2FS – 由三星电子设计的 Linux 文件系统, 适用于现代智能手机和其他计算系统中广泛使用的基于 NAND 闪存的存储设备的细节。这种类型基于日志结构化 FS 方法 (LFS) 工作,并考虑了闪存存储的特性,例如恒定的访问时间和有限数量的数据重写周期。F2FS 不是创建一个大块进行写入,而是将这些块组装成单独的块(最多 6 个),这些块可以同时写入。
这种操作系统中使用的“硬链接”概念使得大多数Linux FS类型的相似之处在于文件名不被视为文件属性,而是被定义为某个目录中文件的别名。一个文件对象可以 从多个位置链接,甚至可以从同一个目录以不同的名称相乘。这可能导致文件删除或逻辑损坏后文件名恢复的严重甚至无法克服的困难。
这些操作系统最常见的文件系统是 UFS(Unix 文件系统),通常也称为 FFS (快速文件系统)。
目前,所有 Unix 系列操作系统都支持 UFS(不同版本),是 BSD OS 和 Sun Solaris OS 的主要文件系统。现代计算机技术倾向于在不同的操作系统( Solaris 的ZFS 、 JFS 和 Unix 的派生格式等)中实现 UFS 的替换。
集群文件系统用于计算机集群系统,支持分布式存储。
分布式 FS 类型包括:
这些文件系统的共同属性包括分布式存储支持、可扩展性和模块化。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。