今天是美国独立日的第二天,我们的大部分员工刚刚回到他们喜欢的工作机器上。如果现在是1997年而不是2018年,那将意味着在某些情况下启动BeOS。20多年前,从未出现过的未来操作系统出现了,因此,在这个节日到来之际,我们重新推出了这本极客指南。这篇文章最初是在2010年6月2日发布的,下面看起来没有变化。
BE操作系统文件系统,简称为BFS,是用于夏威夷、BeOS和SkyOS操作系统的文件系统。当它在90年代末作为命运多舛的BeOS项目的一部分被创建时,BFS的超前功能集立即打动了花哨的操作系统极客。该功能集包括:
十几年过去了,传奇的BFS仍然值得探索--所以我们今天继续深入讨论,从一些文件系统基础开始,接着讨论上面的特性。我们还与两个熟悉该操作系统的人进行了交谈:为BE开发BFS的人和BFS开源版本背后的开发人员。
BFS是由多米尼克·詹保罗(Dominic Giampaolo)和西里尔·默里隆(Cyril Meurillon)于1997年创立的,他们都在BE工作。它被设计为多线程和轻量级,并支持大容量的流媒体。它还旨在支持以前BE文件系统的数据库功能。尽管它是在系统通常只有8MB RAM和9 GB磁盘存储的时候编写的,但当时做出的许多前瞻性设计决策在今天仍然有效。
当BFS在未能被苹果收购后关门时,它并没有完全结束。2002年,Axel Dörfler以开源项目的形式重新实现了HAKU的BFS。本文的最后一部分是对Axel的采访。
在我们讨论BFS的特殊之处之前,我们首先必须介绍一些文件系统基础知识。
在基本级别,存在一个文件系统来管理永久存储设备上的数据。大多数文件系统常用的功能包括:
有关众多文件系统的高级概述,请参阅文章《从BFS到ZFS:过去、现在和未来的文件系统》。要更深入地了解大约2000年左右的HPFS、NTFS、ext2和XFS,请参阅实用文件系统设计的第3章。
以下术语在文件系统讨论中很常见,因此您应该浏览列表并熟悉任何您不知道的术语:
磁盘:一定大小的永久存储介质。磁盘还具有扇区或块大小,这是磁盘可以读取或写入的最小单位。磁盘的传统块大小一直是512字节,但对于较新的磁盘,它现在接近4096字节。
块:磁盘或fiLE系统可写入的最小单位。fiLE系统执行的所有操作都由对块执行的操作组成。fiLE系统块的大小始终等于或大于磁盘块的大小(以整数倍表示)。
位图:不是图片,而是确定磁盘上哪些块空闲或已使用的数据结构。
分区:磁盘上所有块的子集。一个磁盘可以有多个分区。
卷:指定给某些存储介质(即磁盘)上的块集合的名称。也就是说,卷可以是单个磁盘上的所有块、磁盘上块总数的某一部分,或者它甚至可以跨越多个磁盘并且是几个磁盘上的所有块。术语“卷”用于指用fiLE系统初始化的磁盘或分区。
超级数据块:fiLE系统存储其关键卷范围信息的卷区域。超级块通常包含诸如卷的大小、卷的名称等信息。
元数据:一个通用术语,指的是与某事有关但不是其直接组成部分的信息。例如,fiLE的大小是非常重要的信息,但它不是存储在文件本身中的数据的一部分。因此,文件元数据是关于文件的数据,而不是文件中的数据。
日志记录:一种确保fiLE系统元数据的正确性的方法,即使在出现电源故障或意外重新启动的情况下也是如此。
I-Node:fiLE系统存储有关fiLE的所有必要元数据的位置。I节点还提供到fiLE的内容和与fiLE相关联的任何其他数据的连接。术语“i-node”(我们将在本文中使用)由来已久,起源于Unix。I节点也称为fiLE控制块(Fcb)或fiLE记录。
属性:名称(作为文本字符串)和与名称关联的值。该值可以是defiNed类型(字符串、整数等),也可以是任意数据。(1)。
现在我们已经了解了文件系统的基础知识,让我们来看看使BFS独一无二的一些功能。
首先,BFS的64位寻址意味着无论将来磁盘有多大,您都可以使用BFS格式化整个磁盘。您可以创建超过8艾字节的分区,并且根据使用的块大小,您可以创建大小超过30 GB的文件。
BFS最重要和被广泛吹捧的功能之一是它对扩展属性的支持。以MP3文件为例说明了属性重要性的示例。对MP3文件重要的信息字段是:歌曲标题、乐队、专辑、发行日期、编码率、长度、播放次数。如果要将此信息与使用常规文件系统的每个MP3文件相关联,则可能必须创建自己的数据库,以便随着音乐收藏的增长和变化来支持搜索、创建、更新或删除这些属性。相比之下,使用BFS时,可以将这些属性或任何其他属性添加到文件系统本身。这意味着编辑或播放MP3的程序不需要创建或维护数据库,因为文件系统将为您处理这些功能。BFS支持在程序控制下或从命令行将属性与文件相关联。属性可以作为任何应用程序的扩展按文件系统进行搜索和排序。如何做到这一点将在稍后详细讨论。
BFS支持创建监视文件更改的持久或“实时”查询的功能。这是一个与文件系统挂钩的查询,用于检查符合搜索条件的文件。在haiku下,这些查询很容易创建,而且令人惊讶的是它对系统资源的占用很少。
BFS是日志记录的,这意味着它可以随时跟踪某些文件系统一致性,并且不需要fsck或chkdsk等文件系统一致性工具。日志记录还有助于在意外关机后更快地启动系统。
在内部,BFS使用UTF-8字符作为目录和文件名。这意味着你几乎可以使用任何一种语言,在本地,在夏威夷语。不需要额外的努力,您就可以将文件名本地化为中文、带变音的德文字符或草写阿拉伯语。
BFS为大型文件访问提供了特殊的性能考虑。创建和读取大型视频、音频或图像文件是BFS下的优化操作。
超级块通常是文件系统的最高级别数据结构。Bfs超级块描述物理磁盘、日志区和索引。由于明显的性能原因,超级块在系统引导后保留在RAM中。
Tyecif结构DISK_SUPER_BLOCK{ 字符名称[B_OS_NAME_LENGTH]; Int32MAGIC1; Int32fs_byte_order; Uint32 block_size; Uint32 block_Shift; OFF_T_NUM_BLOCKS; OFF_T USED_BLOCKS; Int32inode_size; Int32 Magic2; Int32块_per_ag; Int32ag_Shift; Int32num_ags; Int32标志; BLOCK_RUN LOG_BLOCKS; Off_t log_start; Off_t log_end; Int32 Magic3; Inode_addr root_dir; Inode_addr索引; Int32 Pad[8]; }DISK_SUPER_BLOCK;
名称struct保存文件系统名称。三个幻数用于一致性检查和版本编号。FS_BYTE_ORDER保存字节顺序,BLOCK_SIZE保存显式字节计数;用作2指数的BLOCK_SHIFT还将计算块大小。这是用于文件系统一致性检查的有目的的冗余。NUM_BLOCKS保存文件系统的可用块数,USED_BLOCKS保存当前正在使用的块数。标志字段确定超级块的状态是干净的还是脏的。Root_dir指向所有文件和目录的根。索引指向扩展属性的索引部分的开头。Bfsinfo实用程序可用于将超级块转储为系统的超级块。