e2fsck – 尽pipe在/etc/e2fsck.conf中设置了,但内存不足

我想修复外部16GB SD卡驱动器上的ext2文件系统。

当我发出以下命令:

e2fsck -y /dev/xxx 

我的系统内存不足(Fedora 17 x64 8GB RAM,8GB Swap)。

正如其他地方所build议的,我补充道:

 [scratch_files] directory = /var/cache/e2fsck # (this directory exists and is writable to all) 

至:

 /etc/e2fsck.conf 

不幸的是,这个修复似乎不起作用。 e2fsck确实使用了/ var / cache / e2fsck目录,但仍然耗尽内存。

当我以交互方式运行命令时,它会在以下提示中停止:

 Inode 758 has an invalid extent (logical block 0, invalid physical block 140737488469058, len 1) Clear<y>? yes Inode 758, i_blocks is 8, should be 0. Fix<y>? 

回答是或否的提示有相同的结果:e2fsck使用的RAM突然跳到8GB +,我的系统冻结。

编辑:在VirtualBox内

我尝试了VirtualBox中的fsck,拥有惊人的40Gb交换空间。 Fsck使用了所有的4GB RAM和大约30 GB的交换,然后死亡,并显示以下错误消息:

 Error storing directory block information (inode=759, block=0, num=295645313): Memory allocation failed 

内存跳转听起来像一个e2fsck错误。 如果是这种情况,可以通过手工关心这个inode来解决这个问题(使用debugfs ;尽pipe解释如何做,我还不够熟悉)。

如果它不是一个错误, e2fsck只是需要更多的内存,那么有一个“解决scheme”,不需要添加内存,但它肯定会“重新定义性能”…问题是,e2fsck不使用交换内存等效。 至less在类似情况下是这样的情况。 在e2fsck崩溃之前,你的交换空间是否被填满了? 可能不会。

你可以欺骗e2fsck接受交换为真实的RAM:你可以在VM中启动第二个Linux,并将要检查的块设备导出到VM。 使用更多的内存configuration虚拟机比物理上可用。 VM中的e2fsck将会看到更多的RAM。 当然,这不会使不必要的scratch_files的使用。

我有问题开始一台虚拟机与更多的内存分配比物理(!)RAM可用,但根据Fedora文件,这应该是可能的(也许这不是一个KVM / QEMU问题,但一些花哨的内核的东西)。

我通过在外部驱动器上创build一个交换文件来解决这个问题..我创build了一个12GB的交换来支持现有的交换..这允许fsck在12tb文件服务器上完成而没有任何问题..它肯定会减慢磁盘检查的性能然而。

本网站logging下列步骤: http : //www.cyberciti.biz/faq/linux-add-a-swap-file-howto/