在大文件系统上运行fsck的内存不足

我只看着一个旧的Debian Linux盒子(运行蚀刻)只有512 MB的RAM,但附加了很多外部存储。 一个ext3文件系统大小为2.7TB,fsck无法检查,因为内存不足,出现如下错误:

   分配目录块数组时出错:内存分配失败
    e2fsck:中止

我已经添加了一个4 GB的交换分区,但仍然没有完成,但是这是一个32位的内核,所以我不希望再添加任何更多的帮助。

除了启动到64位内核之外,还有其他方法可以让fsck完成检查吗?

一个64位的内核和大量的RAM将允许fsck完成,并且很快。 或者,现在e2fsck中有一个选项可以告诉它将所有中间结果存储在一个目录中,而不是存储在RAM中,这非常有帮助。 使用以下内容创build/etc/e2fsck.conf

 [scratch_files] directory = /var/cache/e2fsck 

(而且,显然,请确保该目录存在,并且位于具有几GB可用空间的分区上)。 e2fsck将运行SLLOOOOWWWWWWW,但至less会完成。

当然,这根本不会在根FS上工作,但是如果你有交换的话,那么无论如何你已经安装了根FS。

我结束了尝试什么womblebuild议; 这里有一些更详细的信息,如果像我一样在e2fsck中没有看到这个新function,

e2fsck的“scratch_files”configuration选项在1.40.x版本的某个时间已经可用。 (在我们的情况下,我们不得不升级到最新的Debian发行版来获得这个function。)

除了build议的“directory = / var / cache / e2fsk”选项之外,还有一些其他configuration选项可以微调如何使用临时文件存储。 我使用“dirinfo = false”,因为文件系统有大量的文件,但没有这么多的目录。 如果情况逆转,“icount”选项将是适当的。 这些选项全部logging在e2fsck.conf的手册页中。

顺便说一下,Ted T'so在这个主题中写了这些选项。

我发现e2fsck的运行速度非常慢,远远超过了泰德的预测。 它在大多数情况下(在一个非常缓慢的旧处理器上)的CPU利用率高达99.9%,这表明将这些数据结构存储在磁盘而不是内存中并不是导致速度下降的主要原因。 这可能是什么东西存储在文件系统中使e2fsck特别慢。 最后,我已经放弃了现在的文件系统检查; 文件系统是由于检查,但没有错误(据我所知),所以我会安排检查在一个更方便的时间,当我们能够承受一个星期的停电。