CentOS 超级块损坏?

CentOS 超级块损坏?

我使用的是 CentOS 5.2,在启动我的两个数据库服务器时遇到了问题。我们的 IT 部门在周末进行了 SAN 升级,现在我无法启动 - 他们说升级进行得很顺利,但显然出了什么问题。我收到的启动时错误是这样的;

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

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

有人有什么建议或指点吗?另外,为了将来参考,除了我的数据之外,我还应该备份什么?


此时此刻,极度绝望,愿意为恢复付出代价。

答案1

我敢打赌,您知道 SAN 已将物理磁盘的开头移位了几个字节。我以前见过这种情况。从发生这种情况的磁盘中取出文件非常困难,但这是可能的。

如果您运行“fdisk -l”,您是否会收到有关设备上的起始磁柱未匹配的消息?它通常在每个分区声明周围的括号中。

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

以下脚本将尝试在 /dev/sdb 上搜索您的 lvm 分区的起始位置的正确偏移量。不保证它会找到任何东西。如果找到了,您可能可以很好地恢复数据。

#!/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!"

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

答案2

一切都恢复正常并修复了。原来有人错误地将 LUN 安装到 Windows 机器上,然后移除它们并将其放到 CentOS VM 上,却没有想到这会引起问题。每个分区都标记为“微软保留分区” - 使用缓存的 LVM 设置将其恢复。

答案3

启动到单用户模式并注释掉 /etc/fstab 中挂载该文件系统的行。这样您就可以启动并查看该文件系统无法挂载的原因。

相关内容