我正在使用 QEMU/KVM 运行 libvirt,并且我在 LVM 逻辑卷中拥有虚拟机的磁盘映像。当然,许多客户虚拟机也使用 LVM 作为其磁盘。
我partprobe
在我的虚拟机管理程序上运行它,它检测到了所有的 VM 客户分区,所以现在 LVM 工具(、、pvs
等)列出了所有客户的 LVM 实体以及主机的 LVM 实体。vgs
lvs
有没有办法从主机中删除所有这些 LVM 物理卷(当然,不会影响客户机)?重新启动主机不是一种选择;这些虚拟机中的几个需要保持运行。
如果有帮助的话,LVM 层大致如下:
/dev/sdb1 - host PV
|
vg_hostname_vms - host VG
|
+-lv_vm1 - host LV, used as a disk image for vm1
| +-part1 - vm1 boot partition
| +-part2 - vm1 PV
| |
| vg_vm1 - vm1 VG
| +-lv_root - vm1 LV - /
| +-lv_swap - vm1 LV - swap
|
+-lv_vm2 - host LV, used as a disk image for vm2
+-part1 - vm1 boot partition
+-part2 - vm2 PV
|
vg_vm2
+-lv_root - vm2 LV - /
+-lv_swap - vm2 LV - swap
+-lv_home - vm2 LV - /home
现在,当我运行的时候vgs
,我看到的是:
VG #PV #LV #SN Attr VSize VFree
vg_hostname_vms 1 2 0 wz--n- 10.91t 9.53t
vg_vm1 1 2 0 wz--n- 9.76g 0
vg_vm2 1 3 0 wz--n- 97.16g 0
我只想查看主机的卷组(以及仅其物理和逻辑卷)。
我在 Scientific Linux 6.5 主机上运行所有这些。客户操作系统各不相同。
答案1
您应该在主机上设置 LVM 过滤器,以过滤掉检测到的不需要的 LVM 设备。以下是官方文档的链接:
http://www.centos.org/docs/5/html/Cluster_Logical_Volume_Manager/lvm_filters.html
类似filter = [ "r|/dev/VM_related_VG/*|" ]
应该工作
答案2
您可以使用低级dmsetup
命令摆脱客户 PV。
要删除与 vm1 磁盘映像上分区 2 关联的设备,请运行:
dmsetup remove /dev/mapper/vg_hostname_vms-lv_vm1p2
这会导致 vm1 的 PV、VG 和 LV 从主机的 LVM 工具中消失。
答案3
我遇到了类似的问题,并使用devices
LVM 配置文件部分中定义的 LVM 过滤器解决了该问题/etc/lvm/lvm.conf
:
global_filter = [ "a|^/dev/sd|", "a|^/dev/nvme|", "r|.*|" ]
就我而言,我想允许设备路径名以/dev/sd
或开头的 PV /dev/nvme
,并最终拒绝所有其余的。
我已经使用了global_filter
而不是filter
以确保过滤器始终适用。