我正在尝试模拟对存储系统的计划升级。为此,我在 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 [所有以前的设备] [新设备]
正如预期的那样,这导致 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,只是无法重新附加缓存。
任何想法我在这里缺少什么?