CentOS Superblock腐败?

我在CentOS 5.2上,我在启动我的两台数据库服务器时遇到问题。 我们的IT部门在周末进行了SAN升级,现在我无法启动 – 他们说升级进行得很顺利,但显然发生了一些事情。 我得到一个启动时间的错误是这样的;

fsck.ext3: No such file or directory while trying to open /dev/VolGroup01/db 

我有一个外部顾问正在看它,并说它是一个无法修复的超级块的问题,但认为这是可以恢复的(至less据此, http://www.cyberciti.biz/faq/recover-bad -superblock-from-corrupted-partition / )

任何人有任何build议或指针? 另外,为了将来的参考,我应该如何备份超出我的数据?


完全绝望,并愿意在这一点上支付恢复。

我敢打赌,你知道SAN已经把物理磁盘的开始转移了几个字节。 我以前见过这个。 它是一个婊子把你的文件从一个已经做到这一点的磁盘,但它是可能的。

如果你运行'fdisk -l',你会得到有关设备上的起始柱面不能结合的消息吗? 它通常在每个分区声明的括号内。

你设法findLVM组,但不是磁盘本身? LVM设备是否由多个SAN磁盘组成,只有一个受影响?

以下脚本将尝试在lvm分区启动时在/ dev / sdb上search正确的偏移量。 没有保证它会find任何东西。 如果是这样的话,你可能处于恢复数据的好位置。

 #!/usr/bin/python import sys def BoyerMooreHorspool(pattern, text): m = len(pattern) n = len(text) if m > n: return -1 skip = [] for k in range(256): skip.append(m) for k in range(m - 1): skip[ord(pattern[k])] = m - k - 1 skip = tuple(skip) k = m - 1 while k < n: j = m - 1; i = k while j >= 0 and text[i] == pattern[j]: j -= 1; i -= 1 if j == -1: return i + 1 k += skip[ord(text[k])] return -1 if __name__ == '__main__': giveup = 1024*1024*1024*2 lba_offset = 0 text = "" disk = open('/dev/sdb', 'r') while disk.tell() < giveup: #print "Checking: %f" % (lba_offset/(1024*1024)) text = disk.read(1048576) s = BoyerMooreHorspool("\x00\x00\x00LVM2", text) if s > -1: print "Try offset: %d" % ((lba_offset+int(s))-533) sys.exit(0) else: lba_offset += 1048576 print "Unable to find LVM position!" 

你能返回你得到的输出吗?

而它的一切都是固定的。 结果是有人把LUN挂载到了Windows机器上,然后被删除,放到了CentOS虚拟机上,没有想到会引起问题。 每个分区都标记为“MICROSOFT RESERVED PARTITION” – 使用caching的LVM设置将其恢复。

启动到单用户模式,并在/ etc / fstab中注释掉挂载该文件系统的行。 这应该让你启动,并看看为什么该文件系统不会挂载。