2

我想知道,对于蓝牙,我们有 IEEE 802.15.1 标准,由蓝牙特别兴趣小组管理。对于 Wifi,我们有 IEEE 802.11 标准和 Wifi 联盟。对于 PCIe 上的 NVMe SSD,我们有 nvmexpress 来规范和发布其官方文档。

因此,通常有一个监管机构来决定事情并标准化某些事情应该如何实现,以允许几个不同实现之间的互操作性。

但是对于 ext2/ext3/ext4 文件系统,除了 Linux 内核代码,我没有找到任何官方标准。

这些文件系统基本上是由内核社区决定的吗?他们是否承诺不更改它们以使其仍与其他操作系统兼容?

还是某处有一些官方规范?谁提供它?

谢谢

4

1 回答 1

7

很少有文件系统是通过标准委员会标准化的。实际上,不破坏兼容性的承诺是因为我们需要保持与旧版本 Linux 的向后兼容性。MacOS、Windows 等也是如此。当使用 MacOS 10.1 编写的文件系统无法被 MacOS 10.3 等读取时,用户会变得暴躁。

对于 ext4,我们在超级块中有特征位掩码。当我们添加一个新特性时,我们在三个特性位掩码之一中定义一个新位:compat、r/o compat、incompat。如果内核在 r/o 兼容位掩码中看到它不知道的位,它现在将允许以读/写方式挂载文件系统,但将允许以只读方式挂载文件系统。如果内核在不兼容的位掩码中看到它不理解的位,那么它根本不允许挂载文件系统。并且如果在兼容文件系统中设置了内核不理解的位,内核知道无论如何挂载文件系统是安全的。但是,文件系统一致性检查器 (e2fsck) 和其他一些文件系统实用程序(例如,resize2fs)可能需要更严格的兼容性检查,

在实践中,当我们添加新功能时,我们会等待一段时间,然后 mke2fs 实用程序才会默认启用该功能。这允许更多喜欢冒险的用户在我们默认为所有人启用之前测试文件系统功能。在实践中,其他操作系统只实现了 ext4 功能的一小部分——最常见的是,ext2/ext3/ext4 的非 Linux 实现大致对应于通过“启用”的文件系统功能的一组功能mke2fs -t ext2 /dev/disk”。

这些功能自近 25 年前首次实施以来一直没有改变。而且它们不会改变,原因很明显,仍然有很多企业仍在使用 RHEL 5,它使用的是十年前发布的内核,我们非常关心与自己以及与其他人的向后兼容性操作系统。因此,您可以查看 1994 年发表的“Ext2 的设计和实现”(http://web.mit.edu/tytso/www/linux/ext2intro.html)论文,就基础知识而言,他们还没有没变。

当然,我们仍在添加新功能 --- 例如,最近我们在 ext4 中添加了文件系统级别的加密(在 Android 和不久之后,希望在 Chrome OS 中使用)、项目配额、元数据校验和等。这些新特性中的每一个都受到特性标志的保护,并且所有这些特性在当前版本的 mke2fs 中默认情况下都没有启用,就像在 e2fsprogs 源代码分发中分发的那样。一些社区发行版(例如 Debian)可能会启用某些前沿功能,例如元数据校验和,以便在为所有人启用之前获得更多曝光和测试,包括企业 Linux 发行版的更保守的企业用户。

自然,其他操作系统将不支持这些最新的前沿功能。但这没关系,因为您还可以使用“mke2fs -t ext2”创建文件系统,这将更加基本,并且应该很容易用于互操作性。一般而言,人们将使用具有高级功能的文件系统供本机使用,而使用非常基本的文件系统并关闭所有高级功能以用于交换目的。这就是为什么许多 U 盘使用 FAT 的原因——因为 Linux、Windows 和 MacOS 可以读取 FAT 文件系统而无需任何特殊处理。

另一种可能性是,最新版本的 e2fsprogs 附带了 ext4 的用户空间文件系统实现,称为 fuse2fs。对于支持 FUSE 的操作系统(包括大多数 BSD 系统以及 MacOS),这可能是读取 ext4 文件系统的便捷方式。它不会是一个高性能的读/写实现,但对于只想从 ext4 文件系统映像中获取数据的人来说,fuse2fs 工作得很好。

于 2016-08-01T23:15:05.390 回答