为什么会有这么多竞争的文件系统设计?[关闭]


27

只是一个简单的问题,但是为什么今天仍然有如此多的文件系统在竞争和使用?(ntfs,fat32,ext3(ffs)等)

文件系统设计人员似乎可以就每种类型的系统的最佳方面达成共识,并实现“最佳”文件系统,不是吗?只是想一想,由于这些文件系统已经存在了一段时间,并且至少应该明显看出哪些文件系统具有优于其他文件系统的质量,我们可以将每个文件系统的优点结合起来,创建一个更好的最终系统


39
我们也应该尝试将法拉利与反铲力结合吗?设计基于一系列权衡;完美不存在。
2011年

7
@ Pubby8我开车。
松饼人

8
真正的答案不仅是技术讨论,而且是合法的讨论。
熟练地

38
这个问题使我想起xkcd.com/927
dan04 '10

7
我们将在制造具有大而长的高质量镜头,非常轻巧,可放入口袋或钱包,非常便宜的相机的同时进行此操作。您可以将所有好的部分都结合起来并组合成一件最好的东西的想法实际上在实践中并不可行。一件好事的清单是不完整的充满彼此矛盾的物品
埃里克·利珀特

Answers:


32

让我们使用您引用的示例来思考一下具体细节:

  • ntfs-微软专有。不是Microsoft的任何人都不能使用此功能,因此必须使用/创建其他内容。现在,如果您是Microsoft,则由于下一个要点的问题,您希望通过FAT使用它。

  • fat32-不够现代。档案大小上限为4GB。目录条目查找为O(n)。分配表是一个链表,而不是像分配位图(在其中可以快速找到连续的可用空间)这样更有效的东西。不支持权限。不支持硬链接或符号链接。不支持日记功能。

  • ext3-这是ext2的扩展,主要用于支持日志记录。

因此,似乎有几个原因:

  1. 较早的文件系统缺少某些内容。对于FAT,它缺少很多:在(1)功能和(2)性能方面。对于ext2,它没有日记更新,因此从崩溃中恢复要花费更多时间。

  2. 现有的文件系统可能会做,但不是您的。(例如,如果您不是Microsoft,则为NTFS)。在这种情况下,您实际上别无选择,只能提出自己的选择。


2
鸡蛋里挑骨头:实际上,最大文件大小(根据微软自己发布的官方规格)为FAT32是2 GiByte,但没有人,甚至不是微软实现它愚蠢的:-)
约尔格W¯¯米塔格

16
Nitpick 2:NTFS文件格式是由Microsoft发明的,但是它是一种已发布的格式,并且没有已知的专利负担。各种非Microsoft操作系统都实现NTFS,包括Linux。
斯蒂芬·C

6
Xfs-旨在允许快速流式检索大量文件(为视频工作站设计)。ZFS-21世纪的文件系统。ReiserFS-尝试创建“杀手级”文件系统。每个文件系统都有其优点和缺点,每个文件系统都是为满足特定需要而创建的。
蒂莫西·鲍德里奇

3
@Stephen C:NTFS不是微软完全“发明”的。zh.wikipedia.org/wiki/NTFS#History
安全

1
@StephenC您确定吗?据我所知,NTFS没有记录。大多数开放源代码实施警告您,如果Windows在某些状态下将磁盘留在磁盘上时尝试使用该驱动程序进行写入,将会造成严重损害
asveikau 2011年

24

简短的答案:一种尺寸并不适合所有尺寸。

需要权衡。例如,如果您想要日记化的FS,则需要为其付费(效率,复杂性等),但要从中获得收益。有些人感觉不需要日志记录的FS,并且不想为此付费。与FS的其他“功能”相同。


您最后一次确定哪种FS可以满足您的特定需求?我在编码方面比在操作方面更多,但是我从未见过这样的决定。特别是,由于通常没有真正的选择:MS-> Ntfs。Linux:Ext(latest),也许是Reiser。
keppla 2011年

@keppla:决定通常是由OS设计人员做出的。最终用户不会对文件系统进行平衡。
Zano

2
@keppla:每当我决定格式化闪存驱动器时,我都会关闭日记功能,并决定它是否仅供我自己使用(然后是ext2,因为它具有POSIX文件权限)还是与其他人共享(然后是fat32)。但是对于硬盘驱动器,我倾向于使用NTFS(在Windows上)或ext4(在Linux上)...
liori 2011年

1
@keppla几乎所有Linux系统都具有使用多个不同文件系统的能力,而不仅仅是ext [2..4]。设置Linux机器时,我要看一下机器的用途。例如:我的Linux DVR计算机在视频存储驱动器上运行JFS,因为它处理大型文件的能力比ext3好得多,并且比XFS使用的CPU开销少。但是对于同一台计算机上的用户帐户和系统文件,我运行EXT3是因为我正在处理较小的文件。
jwernerny 2011年

@keppla:另外,在Mac OS X上,您也可以在其FS功能的各种组合之间进行选择。此外,本来我打算将调调为设计FS的人员调调。因为,OP询问设计者为什么不设计一种功能最好的FS。我要指出的是,最好的是相对于要使用的位置。在某些地方,某个功能很有用,而在其他地方,相同的功能则是不必要的开销。
丛林猎人

14

任何事物都不可能有一个“最佳”,因为对于“最佳”是什么有很多意见。该决定特定于用户的需求和限制。设计始终基于其适应约束的能力。

一部基本的手机需要存储数百个联系人,短信历史记录和一些小型应用程序。它的文件系统是否需要在RAID配置中支持多TB驱动器上的分层目录结构?设备上是否有足够的RAM来运行这样的文件系统?文件系统是否需要复杂的ACL?对于所有这些问题,可能不是这样,因此一个简单的占用资源的文件系统就足够了。

公司还将开发不同的产品以保持竞争优势。例如,Apple吹捧其HFS +文件系统跟踪最近更改过的文件的能力,从而可以快速进行备份。另一方面,软盘文件系统(FAT)的驱动程序只能容纳几KB的内存。


1
问题不在于没有人能就“最佳”的含义达成共识。问题是不可能有“最好的”……
Stephen C

1
@斯蒂芬:当然可以有一个“最好的”。我们只需要先确定测量指标即可。
Donal Fellows,

只有让每个人都同意
斯蒂芬·C

11

太多取决于您要优化的内容。

暂时考虑一下FAT:它对长文件名的支持很繁杂(确切地说),并且在目录中搜索文件是线性的,因此如果目录中包含很多文件,它会非常缓慢。同时,它几乎没有元数据,因此原始写入速度非常好,并且由于它非常简单,因此实现它的代码可能非常小。

诸如ext2或ext3之类的东西增加了很多FAT所没有的功能。搜索文件也快得多。同时,原始写入速度可能会慢一些,并且用于实现文件系统的代码无疑要大得多。


9

只是一个简单的问题,但是为什么今天仍然有如此多的文件系统在竞争和使用?(ntfs,fat32,ext3(ffs)等)

似乎文件系统设计人员可以就每种类型的系统的最佳方面达成一致,并实现“最佳”文件系统,不是吗?

让我们假设没有折衷,文件系统设计人员确实实现了“最佳”文件系统,而没有专利担忧,并以双重许可BSD / GPL的形式发布,因此MS和Debian都可以接受。是什么让您认为其他文件系统将在一夜之间消失?

我认为十年来没有人在新硬盘上使用FAT32,但是它仍然是格式化USB驱动器,SD卡等的事实上的标准。相机和手机制造商已经尝试并测试了使用它的固件。Arduino爱好者有稳定的库可以使用它。他们都需要巨大的动力去改变。

然后,您会遇到与较早的操作系统(尤其是Windows,其用户不想安装新的文件系统驱动程序)的向后兼容性的问题。


5
最好将某种外部设备格式化为FAT32以实现跨平台功能。这就是为什么您会看到许多外部设备格式化为FAT32的原因。
马特

@Matt,那不是我所说内容的子集吗?
彼得·泰勒

3
对于小型微型计算机,实现基本FAT支持的代码仅适合几个KB。当你只有几个字节这个问题总在玩。
quickly_now

2
@Peter我更多地陈述了它是因为您可以在不同的操作系统上使用它而没有任何问题。
马特

4

在计算答案时,通常是(a)由于历史情况和保持向后兼容性的需要,(b)由于某些方法比其他方法更适合某些任务。

在(a)中,您需要记住“温彻斯特驱动器”-我的年龄已经足够大,可以记住它们被称为-(世界其他地方称为“硬盘驱动器”)仅存在了大约一半的时间。甚至在很长一段时间内,由于成本原因,大多数用户都无法使用它。FAT文件系统在软盘上以及原始的小型硬盘驱动器上都可以很好地工作,因为它相当有效并且所需的开销也很小。一旦开始使用(由于易于实现,其使用范围广泛),制造商便无法告诉用户其旧数据突然无效。

同样,对于Linux用户来说,稳定的NTFS驱动程序已经来很久了,因此,将设备格式化为FAT意味着可以在多个系统之间进行读写。

在(b)上,请考虑存储数十亿个基于文本的数据库记录的系统与存储DVD长度的媒体文件的系统之间的区别。对于数据库来说,每条记录可能非常小-可能只有30或40个字节,并且肯定是分配了整个磁盘“段”(无论您要如何定义)的文件系统可能会浪费磁盘空间。DVD并非如此-更大的“细分市场”(显然是有原因的)在空间方面可能非常高效。

因此,针对不同的目的设计了不同的文件系统。


3

为什么永远没有一个完美的文件系统适合所有人的又一个示例:HDD和SSD具有非常不同的读/写访问特性。经过SSD优化的文件系统可能会通过疯狂分割文件而达到最佳效果,但每个碎片的大小都与SSD本身的页面大小有关。这在HDD上会表现得非常糟糕。经过HDD优化的文件系统试图使文件尽可能保持碎片化,甚至将常用文件放在盘片旋转速度更快的外部的“热”区域中。这些特性根本无法帮助SSD读取速度,并且极大地限制了它们的写入方式。


2

我认为缺少一个非常重要的事实。大多数时候,程序员倾向于认为他们的做事方式优于所有其他方式,因此他们着眼于文件系统设计,并提出了似乎更笼统,优雅,快速,正确的问题和解决方案。如果这种感觉足够强烈,他们可以自由构建自己的文件系统。

这会导致竞争,分散,混乱,最终希望有更好的解决方案和更多选择,为您选择合适的解决方案。


1

这是为什么需要一个单独的文件系统或扩展现有FS功能的另一个具体示例。

  1. 假设您是数据库供应商,并且想降低管理数据的条带化/镜像以提高IO的复杂性。您会感到有必要像Oracle使用ASM(自动存储管理器)那样扩展基本文件系统的功能,就像逻辑卷管理器一样。

1

在您的列表中,您提到使用的是旧文件系统,因为没有更好的文件系统可用,但是速度很快。

还有其他文件系统。我听说Google文件系统主要用于快速复制/冗余,如果一个硬盘驱动器或服务器出现故障。我记得曾经听说过为许多小文件制作的另一个文件系统,该文件系统将用于对小文件(缩略图)进行大量请求的系统。

从本质上讲,它们具有不同的目标,或者相对于开源可能是适当的。


0

我认为ZFS(由Solaris在Sun系统(现在为Oracle)中使用)是文件系统的解决方案。

不幸的是,Oracle关闭了OpenSolaris以进行发现程序并对其进行测试。

ZFS是开源的,某些Linux试图将其集成,请查阅Wikipedia以获取更多信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.