Linux支持一系列文件系统,包括在Windows FAT和NTFS等其他操作系统上使用的文件系统。嵌入式开发人员可能会支持这些分区,但通常情况下,Linux文件系统(如4扩展文件系统(ext4)、XFS或BTRFS)将用于大多数存储分区。理解这些选项有助于为应用程序选择正确的文件系统。
这里介绍的Linux文件系统包括嵌入式应用程序中通常使用的文件系统。还有一类为多节点环境设计的集群文件系统,如Red Hat的全局文件系统(GFS)、GlusterFS和Lustre。
我们首先概述特性,然后对每个特性进行更详细的描述。
扩展文件系统
扩展文件系统实际上是一个系列,目前包括ext2、ext3和ext4。多年来,它一直是事实上的标准,而且现在仍然普遍使用。
ext2文件系统于1993年引入,支持符号链接和长文件名等Linux特性。它现在可以处理多达32 Tbytes的卷和多达2 Tbytes的文件大小。它仍然在许多基于闪存的存储系统和FAT文件系统上使用。它缺少ext3和ext4中的日志系统。
ext2文件分配使用多级层次结构,为较小的文件提供快速访问(图1).文件的inode引用数据块中用于文件开始的前12个链接。较大的文件在访问数据之前先添加单级引用,然后是双级引用。
1.ext2文件系统有一个文件定义(inode),其中包括关于该文件的详细信息,并链接到数据节点,最后链接到索引节点。小文件不会使用这些。
ext2文件系统可以升级到ext3。ext3文件系统增加了日志记录、在线文件系统增长功能,以及用于更大目录的HTree索引系统。如果不使用这些特性,那么ext3文件系统将匹配ext2文件系统。
ext3文件系统不包括动态inode分配和区段等较新的特性。这样做的好处是文件系统元数据位于固定的、已知的位置。存在冗余数据结构以提高可恢复性。
ext3的日志记录系统以三种模式之一运行:日志(低风险)、有序(中等风险)和回写(高风险)。第一种模式将元数据和文件内容写入日志,有效地保存两次信息。有序模式只将元数据放在日志中,并在提交日志条目之前将文件数据独占地写入文件系统数据结构。回写模式不能保证提交元数据的时间。这样更快,但会影响崩溃发生时可以恢复的内容。
ext4文件系统增加了许多主要特性,包括1 Ebyte大小的文件系统和16 Tbytes大小的文件。区段取代了以前使用的传统块映射机制。即使ext4文件系统是向后兼容的,如果启用了区段支持等新特性,它也不能作为ext3文件系统挂载。
ext4文件系统支持持久的预分配—对于像流媒体这样顺序访问性能至关重要的应用程序非常有用。它还支持延迟分配。日志被检查和提高可靠性,并且有一个多块分配器。文件系统检查要快得多。
ext4系统是在现有基础设施上构建的,这使得某些特性难以实现。它目前不支持安全删除文件属性。较新的文件系统(如XFS和BTRFS)提供的改进可能适用于某些应用程序,也可能不适用。
XFS
XFS是最初由Silicon Graphics开发的64位日志文件系统。它是为基于分配组的并行I/O设计的。这允许系统根据I/O线程的数量和文件系统带宽进行扩展。它被设计成跨多个存储设备。XFS包含自己的卷管理器。
它使用B+树作为目录和文件分配。文件系统被划分为具有自己的分配和空闲空间管理的分配组(AG)。文件被分配使用的区(图2)在可能的情况下使用连续块。区段的数量通常随着文件大小的增加而增加。XFS可以处理可变块大小、稀疏文件和快照。
2.基于区段的分配使用更大的连续块来实现更高效的存储和访问。区段通过B+树引用。
XFS使用日志系统来跟踪更新。对于文件更新,这个过程可以是同步的,也可以是异步的。当出现错误时,前者或多或少容易出现问题,但当涉及多个任务和文件时,后者更快、更有效。可以将日志存储在单独的设备上,进一步提高可靠性。XFS具有可以利用分级存储管理服务的数据迁移API (DMAPI)。
XFS的一个显著特性是保证速率I/O (GRIO)。这允许应用程序预留带宽。这在嵌入式应用程序中非常有用。文件系统计算可用性能,并根据现有的预留调整操作。
BTRFS
BTRFS文件系统基于COW (copy-on-write) b -树。根据BTRFS的主要作者克里斯·梅森的说法它的目标是“让Linux能够扩展可用的存储空间”。可伸缩不仅是指存储寻址,还意味着能够管理和管理它与一个干净的界面,让人们看到什么正在使用,使其更可靠。”
BTRFS也是一个类似于XFS的基于区段的存储系统。它对小文件和索引目录具有空间效率,并支持动态inode分配。它处理多个存储设备,并提供对RAID条带化、镜像和条带化+镜像的支持。BTRFS也支持闪存驱动器直接支持TRIM/丢弃操作。
该系统支持压缩、可写和只读快照,以及高效的增量备份。子卷系统允许独立的内部文件系统根以及配额系统实现。支持带外重复数据删除。这些特性在高可用性嵌入式系统中非常有用。
BTRFS存储在固定位置的信息很少。这对于ext2/3/4迁移来说是一个优势,因为假设有足够的空闲空间,就地转换是可能的。此外,BTRFS是开源集群文件系统Ceph的底层存储系统。