Filesystems

CentOS Superblock 損壞?

  • January 23, 2012

我在 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/ )

有人有任何建議或指示嗎?另外,為了將來參考,我應該保留哪些數據備份?


在這一點上完全絕望並願意為恢復付出代價。

它全部恢復並修復。原來有人錯誤地將 LUN 安裝到 Windows 機器上,然後將它們移除並將它們放到 CentOS 虛擬機上,而沒有想到這會導致問題。每個分區都被標記為“MICROSOFT RESERVED PARTITION”——使用記憶體的 LVM 設置將其恢復。

我敢打賭你知道 SAN 已經將物理磁碟的開頭移開了幾個字節。我以前見過這個。將文件從已完成此操作的磁碟中取出是一個婊子,但這是可能的。

如果您執行“fdisk -l”,您是否會收到有關設備上的啟動柱面未結合的消息?它通常在每個分區聲明周圍的括號中。

您是否設法找到 LVM 組而不是磁碟本身?LVM 設備是否由多個 SAN 磁碟組成並且只有一個受到影響?

以下腳本將嘗試在您的 lvm 分區開始的 /dev/sdb 上搜尋正確的偏移量。不能保證它會找到任何東西。如果是這樣,您可能處於恢復數據的有利位置。

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

你能返回你得到的輸出嗎?

引用自:https://serverfault.com/questions/352453