过去几周,我一直在 Amazon EC2 上设置 Web 服务器(Ubuntu 8.04)。因为我希望我的网站在某个时候能够在多个 Web 服务器上实现负载平衡,所以我将所有数据都放在了 EBS 卷上。我可以将此卷附加到文件服务器并在所有 Web 服务器之间共享。
无论如何,目前我的 EBS 卷是 EXT3。我选择这个文件系统只是因为我最熟悉它,而且过去没有遇到过任何问题。我想知道是否有人可以推荐另一种在服务器类型设置上表现良好的文件系统?
数据完整性当然至关重要,我愿意付出绩效来换取这一点。
答案1
Ext3 是一种非常出色的通用文件系统,适用于 Linux 服务器的绝大多数用途。它只有少数已知的性能缺陷,主要缺陷是会快速删除数万个文件。它也不建议用于存储大量非常大的文件(例如 DVR 系统中使用的动态视频)或单个目录中的大量非常小的文件(数万个)。
能够更好地应对这些极端情况的替代方案是 XFS 和 JFS,但是如果您不太可能需要这三种情况中的任何一种,那么 ext3 就足够了。(ReiserFS 也能很好地处理大量小文件问题和一次删除大量文件的问题,但不能很好地处理大量大文件。)
如果您正在进行磁盘密集型活动,而文件系统的速度非常重要,那么 EC2 将比文件系统带来更大的问题。
答案2
EXT3 很难被超越。还有其他不错的日志文件系统,但从稳定性的角度来看,最好使用久经考验的文件系统。在目录中存储大量文件(例如超过 10,000 个)存在已知性能问题,但其中一些问题已在最新内核中得到解决,通常不会成为问题。在等待 Ext4 的同时,请记住,有许多工具可以识别 Ext2,这意味着它们可以选择 Ext3 文件系统并与其一起运行。
XFS 速度快,处理大文件相当好,但它在日志恢复时有将扇区清零的倾向。虽然这在视频和音频流编辑中可能完全可以接受,但在其他环境中可能会造成麻烦。(别误会,我很喜欢 XFS,我只是认为人们需要了解他们正在使用的文件系统的含义)。
Reiser3(和 4)都非常适合处理小文件。Reiser 的缺点是,如果您在同一个卷上有多个 Reiser 文件系统,并且不知何故丢失了分区表信息,那么请不要尝试修复您的 R3 文件系统 - Reiser 的 fsck 基本上会扫描磁盘以查找文件系统的起始位置,然后从那里重建它。如果碰巧找到不同的文件系统比你预期的要多,哦,好吧,它只是把它们缝合在一起。换句话说,它很容易混淆。
答案3
Ext3 在处理大文件和同一目录中的许多文件时确实非常慢。我不知道这在 EC2 中是如何表现出来的,但当我在身体的磁盘。
这是因为它没有扩展。查找 100GB 文件的末尾将需要大量的查找-读取-查找-读取,这在物理磁盘上会造成严重后果。
我几乎总是运行 XFS。JFS 也很快,但我发现它有缺陷。不过我已经好几年没运行它了,所以现在可能没问题。
XFS 也有在线碎片整理功能。但这并不意味着它比 ext3 更容易产生碎片。但是,当你的文件系统碎片化时,在 ext3 上最好的方法是备份恢复到“碎片整理”状态。有一个 ext2/ext3 碎片整理功能,但没人使用它,所以我不会指望它。你可以依靠 XFS 碎片整理。同样,我不知道这对 EBS 是否重要,因为无论如何,两者都可能最终在某个 SAN 上变成碎片文件,而碎片整理会花费你的数据操作成本。
但这全都是表演而已。
我从未在使用 XFS 时丢失过数据。而且我经常使用它。我使用(或由于)UFS(OpenBSD.. agh)、JFS、ReiserFS 和 ext2(最后一个是非日志式)丢失过数据。而且我使用 XFS 的次数比其他任何文件系统都多,而且运行量也更大。
但我真的很渴望 Linux 上有 ZFS 或类似的东西。
最后一句话:ext3 在稳定性方面表现不错。如果它在性能和功能方面对你来说不错,那么就继续使用它吧。