为什么Ext4磁盘检查比NTFS这么快?


12

今天我遇到了重新启动计算机的情况,它说我需要检查磁盘的一致性。大约10分钟后(完成率为“ 1%”),我放弃了,并决定让它在我回家时运行。

为了进行比较,我的家用计算机对所有分区都使用Ext4,并且磁盘检查(大约一周运行一次)只需要几秒钟。我记得曾经读过快速磁盘检查是当务之急,但是我不知道他们怎么做。

那么,Ext4如何快速进行磁盘检查?NTFS推出后(〜10年前),这样做是否有重大突破?

注意:NTFS磁盘约为300 GB,而Ext4磁盘约为500 GB。两者都快满了。


自2008 R2发布以来,我还没有在启动时使用Windows chkdsk NTFS卷。即使在具有多个节点访问同一NTFS卷的CSV群集中,也锁定了成千上万的Lucene索引文件。非常令人印象深刻。
Brain2000 '18 -10-27

Chkdsk在启动时运行可能意味着操作系统遇到了文件系统元数据不一致的严重问题。Chkdsk可能带有“检查每个磁盘扇区是否损坏并在可能时进行修复”标志,这是一个非常耗时的操作。常规的fsck检查当然不会这样做。
kreemoweet

Answers:


11

性能差异的主要原因有两个,两个可能的原因。一,主要原因:


ext4与NTFS相比性能提高

各种基准已经得出结论,实际的ext4文件系统可以比NTFS分区更快地执行各种读写操作。请注意,尽管这些测试并不代表实际性能,但我们可以推断出这些结果,并将其用作一个原因。

至于为什么ext4实际上表现更好,那么可以将NTFS归因于各种各样的原因。例如,ext4直接支持延迟分配。同样,性能的提高完全取决于您使用的硬件(在某些情况下可以完全否定)。

减少文件系统检查要求

与其他等效的日记文件系统(例如NTFS)相比,ext4文件系统还能够执行更快的文件系统检查。根据维基百科页面:

在ext4中,未分配的块组和inode表的部分都这样标记。这使e2fsck可以在检查时完全跳过它们,并大大减少了检查支持ext4大小的文件系统所花费的时间。此功能在Linux内核的2.6.24版本中实现。


现在,有两个可能的原因:


文件系统检查实用程序本身

某些应用程序可能在文件系统上运行不同的例程,以实际执行运行状况“检查”。如果您使用Linux上的fsck实用程序而不是Windows 上的chkdsk实用程序,可以很容易看出这一点。这些应用程序是在用于不同文件系统的不同操作系统上编写的。之所以将其作为可能的原因是,每个操作系统中的低级系统调用是不同的,因此您可能无法使用两个不同的操作系统直接比较实用程序。

磁盘碎片

这个简单易懂,也有助于我们了解文件系统之间的差异。虽然在一个文件中保存的所有数字数据是一样的,怎么会存储在硬盘上是完全不同的文件系统中的文件系统。文件碎片显然可以提高访问速度,这更多地归因于速度差异。


1
令我感到困惑的是,您的第二点起初似乎会产生最大的影响,但Ext4分区的已用空间与NTFS分区的总使用空间差不多-而不是更快,它们应该具有相同的速度。我想这是可能的Ext4的性能改进,使其更快地检查为好,但的Ext4不比NTFS快很多(当然不是幅度差的几个命令我在文件系统检查见)。
布伦丹(Brendan)

我不确定您的意思是……通常,文件内容比大多数现代文件系统(包括ext4和NTFS)上的索引占用更多的空间。文件系统只是以不同的方式存储内容,正如我在某些情况下提到的那样,文件系统可以提高性能。
突破

令我感到困惑的是,两个部分的实际检查部分的大小都应该相同(因为我的Ext4分区的使用空间与NTFS分区的总使用空间差不多),但是Ext4分区会在几秒钟内执行检查,而NTFS却在几秒钟内完成检查一个需要几个小时。
布伦丹(Brendan)

1
@Brendan Long如果您查看我答案中的第一个链接,则有人发现使用ext4和NTFS的驱动器实际上可以更快地读取文件。即使文件中保存的数字数据相同,也不会以相同的方式将其存储在磁盘上。但是,如果您说NTFS一个小时,那么您可能正在验证驱动器上的每个扇区,因此您可能会跳过ext4文件系统检查中的某些替代检查(解释大的速度差异)。验证每个文件而不是整个磁盘表面的速度要快得多。
突破

1
这个答案只是ext4与NTFS谈话要点的列表,与问题无关。日记文件系统在常规操作中无需检查。自动检查意味着出现严重错误。不知道出了什么问题,就不可能知道为什么检查如此缓慢。与ext4的每周检查进行比较,就是比较苹果和橘子。
benrg '16

3

根据我的理解,ext4尝试将数据写入当前没有数据存在的开放inode的最大连续间隙。当必须读取这些文件时,这极大地减少了延迟,因为单个文件的大部分内容大部分都位于一个连续的轨道上,因此,在查找包含数据的每个块时,驱动器磁头的寻道工作更少组成一个文件。

它(ext4)仍然会变得碎片化,但碎片化程度要小得多,并且不一定像NTFS那样严重影响读写性能。在NTFS上,数据被写入磁头路径中的第一个开放块。

因此,无论磁头位于何处且有开放的块,它都会写入尽可能多的数据,然后在磁头必须移动到磁盘的另一部分(以访问另一个文件)时,将其写入磁盘上其他位置的数据。必须在刚写入另一个文件的同时在刚加载的程序中打开该文件。
这意味着,如果文件很大,则很可能会在彼此分开的磁道中以彼此分开的块形式进行扩展,这就是为什么NTFS经常需要进行碎片整理的原因。

也是为什么服务器通常不使用它的原因,因为服务器不断进行I / O操作,因此需要不断地从磁盘24/7写入和读取数据。

另外我也不确定,但是如果chkdsk检查每个文件的完整性(我相信它也是fsck这样做的),那么由于我刚才所描述的关于NTFS碎片的内容,它的比较速度也较慢。


NTFS chkdsk和ext4 fsck都不读取文件数据。这将是没有意义的,因为没有校验和或任何其他方式来验证其完整性。
benrg '16

1

Windows永远不需要在启动时检查NTFS卷。如果确实如此,则说明出现了严重的问题,这比仅发生BSOD或停电要严重得多。您的某些数据很有可能也由于文件系统元数据的损坏而损坏了。磁盘检查无法检测到;其唯一目的是避免进一步的腐败。

KB2854570列出了可能发生这种情况的一些原因。一种是使安装了卷的操作系统进入休眠状态,修改卷的内容,然后在附加卷(重新)后从休眠状态恢复。如果这样做,则很有可能导致静默数据损坏。

我不知道为什么您的ext4文件系统每周检查一次,但是(有希望)可能不是由于每周都会发生类似的危机。它可能只是进行常规的完整性检查,而不是完整的一致性检查。


长期以来,在大多数Linux发行版中,每N个文件系统安装一次自动fsck检查都是标准的。如今,该选项通常默认情况下处于关闭状态。
kreemoweet

0

因为UNIX / Linux Ext2 / Ext3 / Ext4技术放置的数据位磁条要紧密得多,而NTFS放置的磁性数据位则与喷漆罐不同。NTFS需要常规的“碎片整理”,因为Ext2 / 3/4很少需要碎片整理。就这么简单。如果您需要UNIX / Linux驱动器上的某些东西,则OS会确切地知道在何处拾取紧密磁化的数据位,而NTFS必须在驱动器磁盘上加扰才能拾取它们。NTFS日记系统工作得很好-但是,磁头正在打乒乓球,以捡起已放下的磁性钻头。双FAT文件系统运行良好-但是,当您不得不在地上千亩地收集单个蒲式耳时,如果不需要并且可以拾取整个字符串,则速度会更快。

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.