我如何追查ext3文件系统损坏的原因?

我们有一个运行CentOS 5.8虚拟机的VMware vSphere 5环境。 在过去的两周里,我们发生了五次虚拟机事件,文件系统被破坏,需要修复。

以下是我们在日志中看到的内容:

Nov 14 14:39:28 hostname kernel: EXT3-fs error (device dm-2): htree_dirblock_to_tree: bad entry in directory #2392098: rec_len is smaller than minimal - offset=0, inode=0, rec_len=0, name_len=0 Nov 14 14:39:28 hostname kernel: Aborting journal on device dm-2. Nov 14 14:39:28 hostname kernel: __journal_remove_journal_head: freeing b_committed_data Nov 14 14:39:28 hostname last message repeated 4 times Nov 14 14:39:28 hostname kernel: ext3_abort called. Nov 14 14:39:28 hostname kernel: EXT3-fs error (device dm-2): ext3_journal_start_sb: Detected aborted journal Nov 14 14:39:28 hostname kernel: Remounting filesystem read-only Nov 14 14:39:28 hostname kernel: EXT3-fs error (device dm-2): htree_dirblock_to_tree: bad entry in directory #2392099: rec_len is smaller than minimal - offset=0, inode=0, rec_len=0, name_len=0 Nov 14 14:31:17 hostname ntpd[3041]: synchronized to 194.238.48.2, stratum 2 Nov 14 15:00:40 hostname kernel: EXT3-fs error (device dm-2): htree_dirblock_to_tree: bad entry in directory #2162743: rec_len is smaller than minimal - offset=0, inode=0, rec_len=0, name_len=0 Nov 14 15:13:17 hostname kernel: __journal_remove_journal_head: freeing b_committed_data 

这个问题似乎发生在我们从另一台服务器同步应用程序数据的时候。 到目前为止,我们一直无法重现问题,或找出根本原因。

在我们有几个服务器出现这个问题之后,我们认为模板存在问题,所以我们放弃了从模板中克隆的所有虚拟机,销毁了模板,并从头开始构build了一个新的模板,从新下载的CentOS ISO。

我们使用HP EVA SAN作为数据存储,在第一个问题出现后,将其从4400移至6300。 由于迁移和重build新虚拟机,我们已经看到了这个问题两次。 在一台虚拟机上,我们closures了服务器,删除了两个虚拟CPU,并重新启动,几乎立即出现问题。 在另一台虚拟机上,我们重启了它,问题在半小时后发生。

任何提示或指针在正确的方向将不胜感激。

有关于HP EVA的KB,特别是如果您使用循环PSP。 首先你应该检查vmkernel.log来检查存储错误。 相关KB条目(pdf)

要优化EVAarrays的性能,HPbuild议将默认轮循负载平衡IOPS值更改为1.必须使用ESX4.x上的以下命令对每个Vdisk执行此更新:

 esxcli nmp roundrobin setconfig -t iops -I 1 -d naa.xxxxxxxxx 

对于ESXi5:

 for i in `esxcli storage nmp device list | grep naa.600` ; do esxcli storage nmp psp roundrobin deviceconfig set -t iops –I 1 -device $i; done 

如果仅在将数据从一台服务器同步到另一台服务器时才能复制问题,则意味着它与从内核angular度看数据一致性的方式有关。 如果内核认为文件系统将被损坏或有一些损坏,则会将fs变成只读。

我不知道惠普EVA,但它有电池支持写caching。 如果是这样,您是否可以禁用磁盘写入caching并使用SANarrays写入caching。 为此,使用mount -o barrier = 1进行安装,看看是否有任何改进。

我有一种本能,它与存储有关,而不是任何错误。 我不确定如何certificate这一点,但是我所看到的有关fs腐败的大多数情况都是以存储为罪魁祸首,如果不是主要的话。