Filesystems
CentOS Superblock 損壞?
我在 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!"
你能返回你得到的輸出嗎?