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