LVM 内部错误:向 raid5 LV 添加条带后,LV 段损坏

LVM 内部错误:向 raid5 LV 添加条带后,LV 段损坏

我正在尝试模拟存储系统的计划升级。为此,我在虚拟机中使用较小的磁盘重新创建了设置。

准备

起点是具有 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

这会导致 VG 具有 raid5,分布在 3 个设备上。然后我执行了以下操作来创建缓存卷:

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 [所有以前的设备] [新设备]

正如预期的那样,这会导致 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,只是无法重新连接缓存。

知道我这里缺少什么吗?

答案1

事实证明,fsresize 无法感知底层同步状态。使用 lvs 检查同步状态并等待 100% 同步,然后调整大小即可正常工作。

相关内容