我想知道,对于蓝牙,我们有IEEE 802.15.1标准,由蓝牙特别兴趣小组管理。对于Wifi,我们有IEEE 802.11标准以及Wifi联盟。对于PCIe上的NVMe SSD,我们有nvmexpress来管理和发布其官方文档。
因此,通常有一个监管机构负责决定事情,并规范一些事情应该如何允许几种不同实施之间的互操作性。
但对于ext2 / ext3 / ext4文件系统,除了Linux内核代码之外,我没有找到任何官方标准。
这些文件系统基本上是由内核社区决定的吗?他们是否承诺不改变它们以便它仍然与其他操作系统兼容?
或者某处是否有某些官方规范?谁提供它?
谢谢
答案 0 :(得分:4)
很少有文件系统通过标准委员会标准化。在实践中,不破坏兼容性的承诺是由于我们需要保持与旧版Linux的向后兼容性。对于MacOS,Windows等也是如此。当使用MacOS 10.1编写的文件系统无法被MacOS 10.3等读取时,用户会变得胡思乱想。
在ext4的情况下,我们在超级块中具有特征位掩码。当我们添加一个新特性时,我们在三个特征位掩码之一中定义一个新位:compat,r / o compat,incompat。如果内核在r / o compat位掩码中看到一些它不知道的内容,它现在将允许文件系统挂载读/写,但它允许它挂载文件系统只读/只。如果内核在incompat位掩码中看到了一些它无法理解的内容,那么根本不允许安装文件系统。如果compat文件系统中有一些内核不能理解,那么内核知道无论如何都安装文件系统是安全的。但是,文件系统一致性检查程序(e2fsck)和某些其他文件系统实用程序(例如resize2fs)可能需要更严格的兼容性检查,因此它们不会尝试更改具有某些compat功能的文件系统它不明白。
实际上,当我们添加新功能时,我们会等待很长一段时间,然后mke2fs实用程序默认启用该功能。在默认情况下为每个人启用之前,这允许更具冒险精神的用户测试文件系统功能。在实践中,其他操作系统仅实现ext4功能的一小部分 - 最常见的是,ext2 / ext3 / ext4的非Linux实现大致对应于通过“启用”的文件系统功能的一组功能。 mke2fs -t ext2 / dev / disk“。
这些功能自从近四分之一世纪前首次实施以来没有改变。并且他们不会因为显而易见的原因而改变,因为仍然有很多企业仍在使用RHEL 5,它使用的是十年前发布的内核,我们非常关心与我们以及其他人的向后兼容性。操作系统。所以你可以看一下1994年出版的“Ext2的设计和实现”(http://web.mit.edu/tytso/www/linux/ext2intro.html)论文,就基础知识而言,它们没有改变。
当然,我们仍在添加新功能 - 例如,最近我们添加了文件系统级加密(在Android中使用,很快就会使用Chrome OS),项目配额,元数据校验和等等。 EXT4。这些新功能中的每一个都受到功能标志的保护,默认情况下,在e2fsprogs源代码分发中分发的当前版本的mke2fs中,并未启用所有这些功能。一些社区发行版(例如Debian)可以启用某些前沿功能,例如元数据校验和,这样它们就可以在为每个人启用之前获得更多曝光和测试,包括企业Linux发行版的更保守的企业用户。
当然,其他操作系统不会支持这些最新的前沿功能。但这没关系,因为您还可以使用“mke2fs -t ext2”创建一个文件系统,这将更加基础,并且应该可以轻松地用于互操作性。通常,人们将使用具有高级功能的文件系统进行本机使用,并且将基本文件系统与所有高级功能关闭以用于交换目的。这就是为什么许多USB记忆棒使用FAT ---因为Linux,Windows和MacOS可以读取FAT文件系统而无需任何特殊处理。
另一种可能性是最新版本的e2fsprogs附带了ext4的用户空间文件系统实现,称为fuse2fs。对于支持FUSE(包括大多数BSD系统和MacOS)的操作系统,这可以是读取ext4文件系统的便捷方式。它不是一个高性能的读/写实现,但只是想从ext4文件系统映像中获取数据的人,fuse2fs工作得很好。