現象為:機械盤丟失cvol-cmeta卷
如圖所示,lvm邏輯卷中缺失緩存的lvm,這邊以只讀cache為例
日志現象報錯信息為:lvmcache_cvol failed ?manual repair required!
lvmcache_cvol failed: manual repair required!
這類報錯,本質上是 LVM cache 池(cache-pool)的元數據或數據區域出現了損壞,導致 LVM 在激活卷組時自檢失敗。
根據社區大量案例和官方文檔.常見成因可以歸納為以下 3?類:
緩存盤掉線或損壞
? 典型的 SSD 故障、RAID 卡掉盤、SATA/電源線接觸不良等都會使 cache-pool 的 data LV 或 metadata LV 無法讀取,從而觸發自檢錯誤 。
? 如果 cachemode 設為 writeback,緩存盤一旦離線,尚未寫回的數據就會丟失,LVM 會拒絕激活邏輯卷 。
異常掉電/強制關機導致元數據不一致
? writeback 模式下,臟數據只存在于緩存盤,系統突然斷電會使 cache metadata 與 origin LV 不同步,重啟后自檢報錯 。
緩存池空間耗盡
? 當 SSD 使用率達到 100 %,新的寫入無法分配緩存塊,metadata 區域可能出現“非法指針”,從而觸發 thin_check / cache_check 失敗 。
下面是修復的操作步驟方法:
操作步驟一:
cache_repair -i /dev/mapper/ug_212DBF_1729051027_pool3-volume1_lvmcache_cvol-cmeta -o /meta_repaired.img
#這條命令的作用是讀取指定的損壞的緩存元數據文件(/dev/mapper/ug_212DBF_1729051027_pool3-volume1_lvmcache_cvol-cmeta),嘗試對其進行修復,并將修復后的元數據保存到指定的輸出文件(/meta_repaired.img)中。
PS:提示報錯The output file should either be a block device是因為提示輸入需要塊設備才可以.這時候需要使用DD命令將ug_212DBF_1729051027_pool3-volume1_lvmcache_cvol-cmeta變為塊設備
dd if=/dev/mapper/ug_212DBF_1729051027_pool3-volume1_lvmcache_cvol-cmeta of=/meta.img
創建一個與
/meta.img
同大小的空文件 /meta_repaired.img
cp /meta.img /meta_repaired.img
再次執行修復緩存元數據的命令:
cache_repair -i /meta.img -o /meta_repaired.imgcache_repair
#會讀取損壞的元數據鏡像,嘗試修正內部指針、校驗和等錯誤,生成一份 新的、盡量可用的元數據鏡像。-i /meta.img
#輸入文件:損壞的 cache-pool 元數據卷-o /meta_repaired.img
#輸出文件:修復后的元數據鏡像,之后可用來 替換原元數據卷。
操作步驟二:
修復出來的元數據檢查是否還存在損壞:
cache_check /meta_repaired.img
正常現象是輸出:
如果元數據有問題是輸出:
操作步驟三:
將修復回來的元數據覆蓋到原來損壞的meta卷中:
dd if=/meta_repaired.img of=/dev/mapper/ug_212DBF_1729051027_pool3-volume1_lvmcache_cvol-cmeta
(1)檢查:
lvscan是否有出現pool3-volume1
(2)操作可能出現的報錯:
lvremove /dev/ug_212DBF_1729051027_pool3/volume1
#移除lv
PS:上面提示253:1被占用
使用命令查看是被什么占用:
ls /sys/dev/block/253:1/holders/
使用命令解除占用:
dmsetup remove /dev/dm-4
再移除使用命令移除:
lvremove /dev/ug_212DBF_1729051027_pool3/volume1
檢查是否被移除:
lvscan
可以看到已經沒有pool3了,說明已經被移除
操作步驟四:
到/etc/lvm/archive找到帶有cache緩存的備份卷恢復
使用命令恢復vg卷和lv卷:
vgcfgrestore -f ug_212DBF_1729051027_pool3_00005-1420884903.vg ug_212DBF_1729051027_pool3
PS:需要grep篩選或vi進去查看找有cache信息的vg備份卷來進行恢復
恢復的時候,要恢復的卷組名稱需要跟圖示紅框對應才可以.
恢復以后進行激活卷組:
lvchange -ay /dev/ug_212DBF_1729051027_pool3/volume1
檢查data卷是否有恢復出來:
ls /dev/mapper/
最后嘗試掛載data卷:
mount /dev/ug_212DBF_1729051027_pool3/volume1 /volume3
正常以后重啟storage服務即可:
systemctl restart storage_serv