ฉันใช้ libvirt กับ QEMU/KVM และมีดิสก์อิมเมจสำหรับ VM ในโลจิคัลวอลุ่ม LVM โดยปกติ Guest VM จำนวนมากใช้ LVM สำหรับดิสก์เช่นกัน

ฉันใช้partprobeไฮเปอร์ไวเซอร์และตรวจพบพาร์ติชั่นแขก VM ทั้งหมด ดังนั้นตอนนี้เครื่องมือ LVM ( pvs, vgs, lvs, ฯลฯ ) แสดงรายการเอนทิตี LVM ของผู้เยี่ยมชมทั้งหมดพร้อมกับโฮสต์

มีวิธีลบฟิสิคัลวอลุ่ม LVM ทั้งหมดออกจากความรู้ของโฮสต์หรือไม่ (แน่นอนว่าไม่มีผลกระทบต่อแขก) การรีบูตโฮสต์ไม่ใช่ตัวเลือก VM เหล่านี้หลายเครื่องจำเป็นต้องทำงานต่อไป

ในกรณีที่ช่วยได้ นี่คือลักษณะของเลเยอร์ 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 OS ของแขกแตกต่างกันไป

answer

คุณควรตั้งค่าตัวกรอง LVM บนโฮสต์ เพื่อกรองอุปกรณ์ LVM ที่ไม่ต้องการที่ตรวจพบ นี่คือลิงค์ไปยังเอกสารอย่างเป็นทางการ:

http://www.centos.org/docs/5/html/Cluster_Logical_Volume_Manager/lvm_filters.html

สิ่งที่filter = [ "r|/dev/VM_related_VG/*|" ]ควรทำงาน

คุณสามารถกำจัด PV ของผู้เยี่ยมชมได้ด้วยdmsetupคำสั่งระดับต่ำ

หากต้องการลบอุปกรณ์ที่เชื่อมโยงกับพาร์ติชัน 2 บนดิสก์อิมเมจของ vm1 ให้เรียกใช้:

dmsetup remove /dev/mapper/vg_hostname_vms-lv_vm1p2

ซึ่งจะทำให้ PV, VG และ LV ของ vm1 หายไปจากเครื่องมือ LVM ของโฮสต์

ฉันมีปัญหาที่คล้ายกันและแก้ไขด้วยตัวกรอง LVM ที่กำหนดไว้ในdevicesส่วนของไฟล์การกำหนดค่า LVM /etc/lvm/lvm.conf:

global_filter = [ "a|^/dev/sd|", "a|^/dev/nvme|", "r|.*|" ]

ในกรณีของฉัน ฉันต้องการอนุญาต PV ที่มีชื่อพาธของอุปกรณ์ขึ้นต้นด้วย/dev/sdหรือด้วย/dev/nvmeและสุดท้ายก็ปฏิเสธส่วนที่เหลือทั้งหมด

ฉันใช้global_filterแทนfilterเพื่อให้แน่ใจว่าตัวกรองใช้เสมอ