Lvm

LVM 內部錯誤:向 raid5 LV 添加條帶後 LV 段損壞

  • September 28, 2019

我正在嘗試模擬對儲存系統的計劃升級。為此,我在 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% 同步,然後調整大小就可以了。

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