我创建了一个 LVM 缓存的 LV:
# lvcreate local --name BigCached -L32T /dev/sda3
# lvcreate -n LVcache -L500G local /dev/sdb
# lvcreate -n LVcacheMeta -L1G local /dev/sdb
# lvconvert --type cache --cachepool local/LVcache local/BigCached
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
BigCached local Cwi-a-C--- 32,00t LVcache [BigCached_corig]
LVcache local Cwi---C--- 500,00g
root local -wi-ao---- 30,00g
一切都很好,我创建了一个 ext4 文件系统BigCached
并运行了一些基准测试,结果令人满意,然后将其卸载。
之后,我尝试在缓存卷上创建一个 PV:
# pvcreate /dev/local/BigCached
Physical volume "/dev/local/BigCached" successfully created
# pvs
Found duplicate PV t3eDn0GGYTfOxRhnwnzF0C1DHWjiEg4l: using /dev/mapper/local-BigCached_corig not /dev/local/BigCached
PV VG Fmt Attr PSize PFree
/dev/mapper/local-BigCached_corig lvm2 --- 32,00t 32,00t
/dev/sda3 local lvm2 a-- 32,74t 729,76g
/dev/sdb local lvm2 a-- 744,62g 243,62g
哎呀 :( 不知何故,未缓存的原件而不是缓存的原件被用作 PV。
好的,让我们删除 PV 并使用其他一些参数重试:
# pvremove /dev/local/BigCached
Found duplicate PV t3eDn0GGYTfOxRhnwnzF0C1DHWjiEg4l: using /dev/mapper/local-BigCached_corig not /dev/local/BigCached
Internal error: Physical Volume /dev/local/BigCached has a label, but is neither in a VG nor orphan.
# pvremove -ff /dev/local/BigCached
Found duplicate PV t3eDn0GGYTfOxRhnwnzF0C1DHWjiEg4l: using /dev/mapper/local-BigCached_corig not /dev/local/BigCached
Internal error: Physical Volume /dev/local/BigCached has a label, but is neither in a VG nor orphan.
我真的被困在这里:我无法删除 PV,但也无法真正安全地使用底层 LV。请帮忙!
答案1
我可以直接使用 dmsetup 删除缓存卷:
# dmsetup remove /dev/mapper/local-BigCached
此后,我能够删除 PV:
# pvremove /dev/mapper/local-BigCached_corig
Labels on physical volume "/dev/mapper/local-BigCached_corig" successfully wiped
好的,让我们看看 LV 还剩下什么:
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
BigCached local Cwi---C--- 32,00t LVcache [BigCached_corig]
LVcache local Cwi---C--- 500,00g
root local -wi-ao---- 30,00g
哇,它仍然在那里,尽管没有活动……
但是,当我尝试激活它们时,BigCached
失败了,所以我被迫将其删除。我又回到了原点,所以我尝试了一种不同的方法:直接使用 dm-cache,而不是使用 lvmcache。
然而,它产生了几乎相同的结果:
Found duplicate PV rkVmi4Pm5ijJXYM50cz6pI5ZhMeljpic: using /dev/mapper/big-cached not /dev/local/big
虽然它目前正在使用正确的设备(/dev/mapper/big-cached),但我不能确定这种情况是否总是如此,所以这仍然不是一个好的解决方案。
然后我发现这种情况类似于拥有多路径设备,因此需要类似的解决方案,即 /etc/lvm/lvm.conf 中的 lvm 过滤器:
filter = [ "r|/dev/local/big|" ]