Lvm

在lvm上的ext3 fs上按塊號查找文件

  • May 25, 2013

smartd 在我的硬碟上檢測到一個壞塊,我想知道那個塊屬於哪個文件。我在邏輯卷上有 ext3 文件系統。Google給了我很多教程(比如這個:http ://www.vanderzee.org/bad_blocks_howto ),當文件系統直接在硬碟塊設備上創建時,如何按塊號查找文件。他們都沒有提到LVM。在我的情況下,有沒有辦法按塊號查找文件?

  1. 如Bad Blocks Howto中所述,找到包含壞塊的分區併計算分區內的扇區偏移量。假設分區是/dev/sda3,它是一個 LVM PV。
  2. 確定第一個PE的扇區偏移量:
pvs -o pe_start --units s /dev/sda3

從壞扇區偏移中減去這個偏移,得到來自第一個 PE 的扇區偏移。如果結果是否定的,則壞扇區位於 LVM 元數據區域。

Bad_Offset_from_1st_PE = Bad_Offset_in_Partition - First_PE_Start
  1. 執行pvdisplay --maps --units s /dev/sda3獲取PV中的segment列表;此輸出的“Physical Volume”部分也將顯示“PE Size”欄位。
  2. 將與第一個 PE(您在步驟 2 中獲得)的扇區偏移量除以扇區中的 PE 大小。除法的整數結果將是壞 PE 編號,餘數將是該 PE 內的壞扇區偏移量。
Bad_PE           = Bad_Offset_from_1st_PE / PE_Size
Bad_Offset_in_PE = Bad_Offset_from_1st_PE % PE_Size
  1. 在地圖中找到包含壞 PE 的段。如果幸運的話,該段可能是空閒的,否則您將看到錯誤的邏輯卷。如果您對卷不感興趣(例如,它是交換,或一些您不關心的臨時數據),您可以在此步驟停止。該扇區也可能在最後一個 PE 之外,這意味著它要麼位於小於完整 PE 的未使用區域,要麼位於 PV 末尾的第二個元數據區域(如果存在此類元數據區域)。

如果壞卷是快照,將壞扇區映射到邏輯卷中的實際偏移量將非常困難。如果您真的關心快照內容,您唯一可以做的就是嘗試從中讀取並希望快照尚未使用壞扇區(如果已使用,希望機器不會完全掛起)嘗試閱讀時)。

如果壞卷在 LVM 級別使用了一些花哨的東西,例如鏡像或條帶化……目前不知道如何處理。 6. 計算Bad_LE = Bad_PE - Seg_First_PE + Seg_First_LE,其中Seg_First_PE是壞段的第一個物理範圍,是壞段Seg_First_LE中的第一個邏輯範圍,如映射中的段數據所示。 7. 計算邏輯卷內的扇區偏移量:

Bad_LV_Offset = (Bad_LE * PE_Size) + Bad_Offset_in_PE
  1. 返回到 Bad Blocks Howto 的第二步,在文件系統中找到與扇區對應Bad_LV_Offset的文件。

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