Lvm
LVM 內部錯誤:向 raid5 LV 添加條帶後 LV 段損壞
我正在嘗試模擬對儲存系統的計劃升級。為此,我在 VM 中使用較小的磁碟重新創建了設置。
準備
起點是一個帶有 raid5 的 LV,跨 3 個 PV 的 2 個條帶,並記憶體在單個 PV 上,設置如下:
pvcreate /dev/sdd /dev/sde /dev/sdf vgcreate vg01 /dev/sdd /dev/sde /dev/sdf lvcreate -n origin_lv -l 8180 -i 2 –type raid5 vg01 \ /dev/sdd /dev/ sde /dev/sdf
這導致在 3 個設備上具有 raid5 的 VG。然後我這樣做是為了創建記憶體卷:
pvcreate /dev/sdc1 vgextend vg01 /dev/sdc1 lvcreate -n origin_lv_cache -L 10G vg01 /dev/sdc1 pvcreate /dev/sdc2 vgextend vg01 /dev/sdc2 lvcreate -n origin_lv_cache_meta -L 1G vg01 /dev/sdc2
這將創建記憶體池:
lvconvert \ --type cache-pool \ --poolmetadata vg01/origin_lv_cache_meta \ vg01/origin_lv_cache
並將其附加到原始 LV:
lvconvert \ --type cache \ --cachepool vg01/origin_lv_cache \ vg01/origin_lv >>>> output: "Logical volume vg01/origin_lv is now cached"
然後我執行 luksFormat 和 mkfs,得到一個完全可掛載的文件系統。
問題
現在,我想增加容量。為此,我嘗試了以下方法:
lvconvert --splitcache vg01/origin_lv
刪除記憶體。這會將記憶體中的所有內容同步到實際的 LV,然後我可以這樣做:
pvcreate /dev/sdg vgextend vg01 /dev/sdg
添加新的 PV,然後:
lvconvert –stripes 3 vg01/origin_lv
$$ all previous devices $$ $$ new device $$ 正如預期的那樣,這導致 LV 的空間增加了 50%。現在我嘗試重新附加記憶體,甚至刪除記憶體卷並重新創建它們,但是當我嘗試將它重新附加到實際的 LV 時,我得到了這個:
lvconvert \ --type cache-pool \ --poolmetadata vg01/origin_lv_cache_meta \ vg01/origin_lv_cache
輸出:
Do you want wipe existing metadata of cache pool vg01/origin_lv_cache? [y/n]: y LV origin_lv, segment 1 invalid: reshape for cache segment. Internal error: LV segments corrupted in origin_lv.
但是,我可以很好地掛載和讀/寫底層 LV,只是無法重新附加記憶體。
任何想法我在這裡缺少什麼?
事實證明,fsresize 不知道底層同步狀態。使用 lvs 檢查同步狀態並等待 100% 同步,然後調整大小就可以了。