大文件系统上的e2fsck失败,错误:内存分配失败

我试图在一个2TB大的raidarrays上使用e2fsck,并使用GPT进行分区(因为大小)。

系统上只安装了1GB的内存,目前我无法添加更多内存。

问题是,在设备上启动fsck后不久,出现一个错误消息:

Error storing directory block information (inode=115343515, block=0, num=108120142): Memory allocation failed e2fsck: aborted 

经过一些在线search和研究之后,我在下面find了这个post:

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

在查看e2fsck.conf的MAN页面之后,我遵循了这个build议,基本上创build了一个/etc/e2fsck.conf文件,如下所示:

 [scratch_files] directory = /var/cache/e2fsck 

并在确定创build了/var/cache/e2fsck directry之后再次尝试了fsck。 再次启动fsck并观察可用内存,cpu使用情况和/var/cashe/e2fsck目录大小…我可以说它确实帮助了很多…但它最终仍然失败,给出了同样的错误。 基本上它有助于减缓内存消耗,但并没有一起否定。

所以我试着玩e2fsck.conf文件的添加标志使用:

 dirinfo = false 

要么

 dirinfo = true 

 icount = false 

要么

 icount = true 

这两者似乎都没有太大的影响,因为在短时间内发生同样的错误。

我错过了什么? 我可以用fsck花很长时间…但是我需要它来完成而不是错误的。

如果可以的话,给系统添加一些交换空间。 fsck将花费很长时间,但最终会完成。 下一次,把你的文件系统切成小块。

arrays是内部存储还是外部存储? 如果是外部/附加存储,请尝试将其插入另一个包含fsck更多内存的盒子中。 或者,重新分区您的设置,并将其分成更小的块。 您可以在单个“备份”文件系统层次结构下安装多个分区。 您的客户端和备份软件不需要知道他们正在接触多个或独立的文件系统。

如果这个存储直到引导过程的后期才得到fsck ,那么请确保closures了所有可能正在耗尽宝贵内存的应用程序,直到fsck完成。

  1. 你把这些标志添加到[scratch_files]部分了吗? 此外,尝试使用“numdirs_threshold”来控制何时开始使用临时文件。
  2. 有时候e2fs utils在安装的系统上太老了(比如Centos4)。 您可以使用较新版本的内核和文件系统实用程序来启动救援映像。 设置e2fsck.conf并让e2fsck使用它。

HTH。