KVM/QEMU 与虚拟化基础

共 27 题
📑 题目列表 27 题
#
★★★

1. KVM 在线迁移(live migration)的原理中内存预拷贝、迭代收敛、共享存储依赖与中断风险控制

请说明 KVM 在线迁移(live migration)的原理:内存预拷贝、迭代收敛、共享存储依赖与中断风险控制?

  • 预拷贝(pre-copy)迭代迁移内存
  • 迭代收敛与脏页处理
  • 共享存储依赖与中断风险

KVM live migration 通过预拷贝(pre-copy)机制迁移:1) 先在目标主机启动一个空 VM,把源 VM 内存逐页复制过去(第一轮全量);2) 迁移期间源 VM 持续运行,脏页不断产生,需迭代复制脏页,直到脏页速率收敛到接近零(迭代收敛);3) 收敛后暂停源 VM(stop-and-copy),复制剩余小量脏页,切换网络与状态,在目标拉起,中断通常毫秒级。依赖共享存储:磁盘通常放在共享存储(NFS/ISCSI),迁移只迁内存不迁磁盘,否则需同步磁盘。中断风险控制:监控迁移速度、脏页率与网络带宽,若脏页率过高无法收敛,跳过迭代进入 stop-and-copy(中断变长)或终止迁移。

live migration 核心是"预拷贝迭代 + 收敛 + 共享存储 + 中断控制",收敛能力决定中断时长,共享存储是前提。

#
★★★

2. NUMA 拓扑与 vCPU/内存绑定(pinning)如何避免跨 NUMA 访问?

请说明 NUMA 拓扑与 vCPU/内存绑定(pinning)如何避免跨 NUMA 访问?

  • NUMA 拓扑与本地内存访问
  • vCPU pinning 与内存 node 绑定
  • 避免跨 NUMA 的性能损失

NUMA(非一致性内存访问)架构中,CPU 访问本地 NUMA 节点的内存快,访问远端节点内存慢(跨 NUMA 延迟高)。KVM 中若 vCPU 与内存分配在不同 NUMA 节点,会频繁跨 NUMA 访问,性能下降。避免方法:1) vCPU pinning:用 vcpupin 把 vCPU 固定到特定物理 CPU,避免 vCPU 在 NUMA 节点间漂移;2) 内存 node 绑定:用 numactl/libvirt 的 memoryBacking 把 VM 内存绑定到与 vCPU 同节点的 NUMA 内存;3) numatune 配置 nodeset 与 mode,让 vCPU 与内存在同一节点。目标是让 vCPU 与内存尽量本地化,减少跨 NUMA 访问。

避免跨 NUMA 的关键是"vCPU pinning + 内存 node 绑定",让计算与内存本地化,降低远端访问延迟。

virsh vcpupin <vm> 0 2            # 把 vCPU0 固定到物理 CPU2
virsh numatune <vm> --nodeset 0 --mode strict
numactl --hardware                 # 查看 NUMA 拓扑
#
★★

3. DPU/SmartNIC 在虚拟化卸载(vSwitch offload)中的角色与收益?

请说明 DPU/SmartNIC 在虚拟化卸载(vSwitch offload)中的角色与收益?

  • DPU 分担 vSwitch 处理
  • 卸载网络处理释放 CPU
  • 收益与局限

DPU/SmartNIC 是带可编程处理器的智能网卡,可将虚拟化网络的处理(vSwitch 转发、OVS 数据面、安全、负载均衡)从主机 CPU 卸载到网卡。角色:1) 在网卡上实现 vSwitch 数据面(如 Open vSwitch offload),数据包不经主机 CPU 转发;2) 承担虚拟化网络功能(VLAN、隧道、ACL、QoS)。收益:释放主机 CPU 用于业务计算,提升网络吞吐与降低延迟,降低虚拟化开销。局限:需支持卸载的网卡与驱动,配置复杂,部分高级功能(如 DPDK 深度处理)卸载支持有限,需评估功能覆盖。

DPU 的收益是"把 vSwitch 网络处理从 CPU 卸载到网卡",释放 CPU、提升性能,但需硬件支持与功能评估。

#
★★

4. KVM hugepage(大页)如何配置并提升虚机内存性能?

请说明 KVM hugepage(大页)如何配置并提升虚机内存性能?

  • 大页减少 TLB miss
  • 配置 HugePages 与内存后端
  • 对虚机内存性能的提升

KVM 大页(HugePages)通过使用更大的内存页(如 2MB/1GB)减少页表条目与 TLB miss,降低内存访问开销,提升虚机内存性能。配置:1) 在宿主机预留大页(echo 512 > /proc/sys/vm/nr_hugepages 或配置 hugepagesz);2) 挂载 hugetlbfs;3) 在 libvirt XML 中配置 <memoryBacking><hugepages/></memoryBacking> 让 VM 使用大页;4) 配合 memtunenumatune。收益:降低 TLB miss,对内存访问密集、大内存工作负载(数据库、HPC)提升明显。注意大页需提前预留,分配后占用固定内存。

大页通过减少 TLB miss 提升内存访问性能,需在宿主机预留并配置 VM 使用,适合大内存密集负载。

echo 512 > /proc/sys/vm/nr_hugepages
mount -t hugetlbfs hugetlbfs /dev/hugepages
# libvirt XML: <memoryBacking><hugepages/></memoryBacking>
#
★★

5. KVM macvtap 在 MAC VLAN 模式下的网络配置与局限?

请说明 KVM macvtap 在 MAC VLAN 模式下的网络配置与局限?

  • macvtap 基于接口的虚拟网卡
  • MAC VLAN 直连与隔离
  • 局限(与宿主机通信等)

macvtap 是把物理接口(如 eth0)直接复用为虚拟网卡的模式,每个 VM 通过 macvtap 获得独立 MAC 地址并直接复用物理接口,无需 bridge。MAC VLAN 模式下,虚拟网卡在物理接口上建立 VLAN,VM 可直连物理网络,性能好、无 vSwitch 开销。局限:1) macvtap 默认不允许 VM 与宿主机直接通信(除非用 bridge 模式或特定配置);2) 不支持 vlan 之外的高级虚拟网络(如需要 NAT 隔离);3) 模式有 private/vepa/bridge 之分,行为不同。配置用 virsh<interface type='direct'> 指定 macvtap。

macvtap 让 VM 直连物理接口,性能好但缺 virbr0 的隔离与宿主机通信能力,需按需选型。

#
★★

6. KVM virtio-blk 如何实现半虚拟化磁盘?

请说明 KVM virtio-blk 如何实现半虚拟化磁盘?

  • virtio 半虚拟化减少模拟开销
  • virtio-blk 的 guest/host 共享队列
  • 相比 IDE/SATA 模拟的性能提升

virtio-blk 是半虚拟化磁盘设备,通过 guest 与 host 共享的 virtqueue 直接传输 IO 请求,避免完全模拟(如 IDE/SATA)的指令级模拟开销。Guest 需要 virtio 驱动,host 用 QEMU 的 virtio-blk 后端(或用 vhost-blk 内核处理减少用户态切换)。相比模拟磁盘,virtio-blk 共享内存队列、中断更少、吞吐更高、CPU 开销更低,是 KVM 虚机磁盘的标准高性能选择。vhost 模式将 IO 处理下沉到内核(vhost_blk)或用户态(vhost-user-blk),进一步提升性能。

virtio-blk 用共享 virtqueue 半虚拟化磁盘,消除模拟开销,是高性能虚机磁盘标准,配合 vhost 更优。

#
★★

7. KVM virtio-net 如何实现半虚拟化网络?

请说明 KVM virtio-net 如何实现半虚拟化网络?

  • virtio-net 共享队列收发
  • 多队列与 vhost 加速
  • 相比 e1000 模拟的性能提升

virtio-net 是半虚拟化网络设备,通过 guest 与 host 共享的 virtqueue 收发数据包,减少数据复制与中断处理,相比 e1000/rtl8139 等完全模拟网络卡性能大幅提升。支持多队列(multi-queue,每个 vCPU 一条队列)提升多核吞吐,配合 vhost_net(vhost 内核处理)或 vhost-user 减少用户态 QEMU 到内核的切换开销。guest 需 virtio 驱动。virtio-net 是 KVM 虚机网络的标准高性能方案,支持 offload 功能(如 TSO、checksum)。

virtio-net 以共享队列半虚拟化网络,减少复制与中断,多队列+vhost 进一步提升,是标准高性能虚机网卡。

#
★★

8. KVM virtio-scsi 如何实现 SCSI 半虚拟化?

请说明 KVM virtio-scsi 如何实现 SCSI 半虚拟化?

  • virtio-scsi 提供 SCSI 命令队列
  • 支持多磁盘、独立 LUN 与 SCSI 特性
  • 相比 virtio-blk 的优势

virtio-scsi 提供半虚拟化的 SCSI 控制器,guest 通过 virtqueue 发送 SCSI 命令,支持向一个控制器挂载多个磁盘(LUN)、独立设备寻址,并支持 SCSI 特性(如磁盘队列、错误处理、原子写、TPC)。相比 virtio-blk,virtio-scsi 更灵活(一个控制器多设备)、更贴近真实 SCSI 语义(利于 SAN/多路径),Linux 生态对高并发 SCSI 支持好。guest 需 virtio-scsi 驱动。适合多磁盘、需要 SCSI 特性(多路径、SRP)的场景。

virtio-scsi 用半虚拟化 SCSI 控制器,支持单控制器多 LUN 与 SCSI 语义,比 virtio-blk 更灵活,适合多盘与 SAN 场景。

#
★★

9. RDMA(InfiniBand/RoCE)在虚拟化环境中的直通与虚拟化方案?

请说明 RDMA(InfiniBand/RoCE)在虚拟化环境中的直通与虚拟化方案?

  • RDMA 直通(PCI passthrough)
  • SR-IOV 虚拟化 RDMA
  • 性能与功能取舍

RDMA(InfiniBand/RoCE)在虚拟化中的方案:1) PCI passthrough(直通):将 RDMA 网卡整体直通给单个 VM,性能最高(无虚拟化开销),但一个网卡只服务一个 VM,无法共享;2) SR-IOV:将网卡虚拟化出多个 VF,每个 VF 直通给不同 VM,支持 RDMA 且可多 VM 共享,性能接近直通,是兼顾性能与共享的主流方案;3) 软件虚拟化(virtio-net 等)对 RDMA 支持有限,因 RDMA 需要直接访问硬件命令队列。取舍:追求单 VM 最高性能用直通,需多 VM 共享 RDMA 用 SR-IOV,同时需支持 RoCE v2 的网卡与驱动。

RDMA 虚拟化主要在"直通(单 VM 高性能)与 SR-IOV(多 VM 共享)"间选择,软件虚拟化难以承载 RDMA。

#
★★

10. SR-IOV 直通与 virtio-net 虚拟网卡的性能与功能取舍中哪些场景适合直通、哪些必须保留虚拟化特性

请说明 SR-IOV 直通与 virtio-net 虚拟网卡的性能与功能取舍?

  • SR-IOV 直通的高性能
  • virtio-net 的灵活性与功能
  • 各场景取舍

SR-IOV 直通:将网卡 VF 直通给 VM,数据包不经过软件 vswitch,性能接近物理网卡(低延迟、高吞吐),但功能受限(无 vSwitch 的过滤/隔离/NAT 等高级网络功能,且 VF 与宿主机共享需管理),适合高性能网络(NFV、DPDK、HPC)。virtio-net:走软件 vswitch(内核/OVS),性能有开销但功能完整(VLAN、NAT、防火墙、overlay、流量控制),灵活可管理,适合通用业务与需要网络功能的环境。取舍:追求极致性能且功能简单用 SR-IOV,需要灵活网络功能与隔离用 virtio-net。现代云平台常混合使用。

取舍是"性能直通 vs 功能灵活",SR-IOV 用硬件性能换功能,virtio-net 用软件开销换灵活网络能力。

#
★★

11. libvirt network 如何实现 NAT、bridge、isolated?

请说明 libvirt 网络如何实现 NAT、bridge、isolated 等模式?

  • NAT 网络的 masquerade 与转发
  • bridge 网络直连物理
  • isolated 网络隔离

libvirt 网络定义虚拟网络,有几种模式:1) NAT:默认 virbr0,通过 iptables NAT(masquerade)让 VM 共享宿主机 IP 访问外网,VM 间可通信,使用 NAT 网段;2) bridge:VM 桥接到物理网卡(或自定义 bridge),直接接入物理网络,与外部同网段通信,需要 bridge 设备;3) isolated:VM 间可通信但与宿主机/外网隔离(无 NAT 转发),适合隔离环境。配置在 network XML 中定义 forward mode(nat/bridge/isolated)与 ip/网段,用 virsh net-define 创建、virsh net-start 启动。不同模式满足不同网络隔离与访问需求。

libvirt 网络三类模式(NAT 共享外网、bridge 直连、isolated 隔离)由 forward mode 决定,覆盖常见虚拟网络需求。

virsh net-list
virsh net-define /tmp/nat.xml
virsh net-start default
virsh net-dumpxml default
#
★★

12. libvirt 中raw/qcow2 存储卷的创建、扩容与挂载流程?

请说明 libvirt 中 raw/qcow2 存储卷的创建、扩容与挂载流程?

  • raw 与 qcow2 卷的创建
  • 卷扩容(qcow2 在线/离线)
  • 挂载到 VM

libvirt 存储卷创建:virsh vol-create-as <pool> <name> <size> --format qcow2(或 raw),qcow2 支持稀疏、快照、压缩,raw 简单直接。扩容:qcow2 可用 virsh vol-resize <vol> <size> --shrinkvirsh blockresize(在线扩 VM 磁盘),raw 也可 resize;扩容后需在 guest 内扩展分区/文件系统(如 growpart、xfs_growfs)。挂载:把卷作为 VM 的磁盘设备(virsh attach-disk 或编辑 XML 的 <disk>),指定 bus 与 device。流程核心是"创建卷→扩容→挂载(attach)→guest 内扩容"。

raw/qcow2 卷的创建、扩容、挂载是 libvirt 存储管理基础,qcow2 支持快照/压缩,扩容后需 guest 内扩展。

virsh vol-create-as default vm0.qcow2 20G --format qcow2
virsh blockresize vm0 vda 40G
virsh attach-disk vm0 /var/lib/libvirt/images/vm0.qcow2 vda
#
★★

13. libvirt 存储池(pool)与存储卷(volume)在 KVM 虚拟化中的管理与配置?

请说明 libvirt 存储池(pool)与存储卷(volume)在 KVM 虚拟化中的管理与配置?

  • 存储池(目录/LVM/文件系统)
  • 存储卷作为 VM 磁盘
  • 池的创建与配置

libvirt 存储池(storage pool)是存储资源的集合,支持目录(dir)、文件系统(fs)、LVM、iSCSI、逻辑卷等类型;存储卷(volume)是池中的具体块/文件,作为 VM 磁盘使用。管理:virsh pool-define-as 定义池(类型、路径),virsh pool-start 激活,virsh pool-build 构建;在池内用 virsh vol-create-as 创建卷。层次:池(物理/逻辑存储)→ 卷(VM 磁盘)。配置池类型决定容量管理方式(如 dir 池按目录、lvm 池按逻辑卷)。合理的池规划便于批量管理 VM 磁盘。

存储池是"存储资源集合",存储卷是"池内 VM 磁盘",池类型(dir/fs/lvm/iscsi)决定存储管理与扩容方式。

virsh pool-list --all
virsh pool-create-as images dir --target /var/lib/libvirt/images
virsh vol-list images
#
★★

14. qcow2 内部快照(internal snapshot)的机制与使用场景?

请说明 qcow2 内部快照的机制与使用场景?

  • 内部快照存储在 qcow2 文件内
  • 快照机制与恢复
  • 使用场景与局限

qcow2 内部快照将快照状态存储在 qcow2 文件内部,通过 virsh snapshot-create-as 创建,记录 VM 内存、磁盘与配置的某一时刻状态。机制:qcow2 文件支持把快照作为文件内的额外数据结构,保存不同时间点的磁盘状态。恢复用 virsh snapshot-revert 回滚到快照点。使用场景:临时测试、开发环境、升级前快速回滚点。局限:内部快照使 qcow2 文件变大(保留多个快照差异)、性能有影响、快照在运行中与磁盘状态耦合;相比外部快照,内部快照更简单但灵活性差,生产大 VM 不建议频繁使用。

qcow2 内部快照存于文件内,简单易用但文件膨胀、性能受限,适合测试与临时回滚,生产更常用外部快照。

virsh snapshot-create-as vm0 snap1 --disk-only
virsh snapshot-list vm0
virsh snapshot-revert vm0 snap1
#
★★

15. qcow2 如何实现外置快照?

请说明 qcow2 如何实现外置快照?

  • 外置快照创建独立 overlay 文件
  • 与内部快照的区别
  • blockcommit 合并

qcow2 外置快照为快照创建独立的 qcow2 文件(overlay/子镜像),原磁盘作为只读 backing,新写入到 overlay,快照不内嵌在单一文件内。创建:virsh snapshot-create-as vm0 snap1 --disk-only --atomic,生成新的 overlay 文件。优点:快照文件独立、可管理、不膨胀原文件、性能影响小,适合生产备份与持续快照链。管理:virsh blockcommit 把 overlay 合并回 backing,virsh blockpull 拉取合并,virsh snapshot-delete 删除。外置快照链更灵活,适合定期快照与备份。

外置快照创建独立 overlay 依赖 backing,文件独立、性能好,用 blockcommit 合并,适合生产快照链。

virsh snapshot-create-as vm0 external-snap1 --disk-only --atomic
virsh blockcommit vm0 vda --active --pivot
virsh snapshot-list vm0
#
★★

16. raw 在性能与特性的取舍

请说明 raw 磁盘格式在性能与特性上的取舍?

  • raw 无元数据、直接块,性能好
  • 无快照/压缩/稀疏特性(或有限)
  • 适用场景

raw 是原始磁盘映像,无 qcow2 的元数据与格式开销,数据直接映射到文件,IO 性能好(接近裸块)、简单,适合对性能要求高的场景(数据库、高性能 IO)。但 raw 缺乏 qcow2 的特性:无原生快照、无压缩、稀疏支持有限(需手动 sparse 或 fallocate)、无 backing 链。取舍:追求性能与简单用 raw,需要快照/压缩/复制即点(COW)等特性用 qcow2。现代场景 raw 多用于系统盘或高性能卷,qcow2 用于需快照与节省空间的虚机。

raw 的取舍是"性能/简单 vs 特性",raw 快但无快照压缩,qcow2 特性多但格式开销,按需求选型。

#
★★

17. vhd/vhdx 格式在 Hyper-V/KVM 互操作中的兼容性处理?

请说明 vhd/vhdx 格式在 Hyper-V/KVM 互操作中的兼容性处理?

  • vhd/vhdx 是 Hyper-V 的磁盘格式
  • KVM 通过 qemu-img 转换
  • 互操作转换与验证

vhd/vhdx 是 Hyper-V 的虚拟磁盘格式,KVM/QEMU 通过 qemu-img 支持转换与读写。互操作处理:1) 转换:qemu-img convert -f vhdx -O qcow2 x.vhdx x.qcow2(或反向),在不同平台间转换格式;2) 兼容性:qemu-img 支持 vhd/vhdx 的读与转换,但需注意 guest 内的驱动(如 Hyper-V 的半虚拟化设备)在 KVM 下需替换为 virtio 驱动;3) 引导:转换后需确认引导方式(BIOS/UEFI)与磁盘控制器兼容;4) 验证:转换后启动验证磁盘与系统可用。互操作核心是格式转换 + guest 驱动适配 + 验证。

vhd/vhdx 与 qcow2 互操作靠 qemu-img 转换,但 guest 驱动与引导需适配,转换后需验证。

qemu-img convert -f vhdx -O qcow2 win.vhdx win.qcow2
qemu-img info win.qcow2
#
★★

18. virsh 快照链管理中 internal/external 快照、blockcommit 合并与删除快照的数据安全边界

请说明 virsh 快照链管理:internal/external 快照、blockcommit 合并与删除快照的数据安全边界?

  • internal/external 快照的区别
  • blockcommit 合并
  • 删除快照的数据安全

virsh 快照链管理:1) internal 快照内嵌于 qcow2 文件,external 快照创建独立 overlay 文件(块链);2) blockcommit 把 overlay 合并回 backing(virsh blockcommit vm0 vda --active --pivot),合并后链缩短、数据合并;3) 删除快照的数据安全:删除 external 快照前必须先 blockcommit 合并,否则删除会丢失该快照到链尾的数据;internal 快照删除用 virsh snapshot-delete 直接移除。数据安全边界:快照链的一致性、合并顺序与删除时机需谨慎,避免删除未合并的快照导致数据丢失。管理快照链需理解 backing 链与合并语义。

快照链管理核心是"理解 backing 链 + blockcommit 合并 + 先合并后删除",避免删除未合并快照造成数据丢失。

virsh snapshot-list --tree vm0
virsh blockcommit vm0 vda --active --pivot
virsh snapshot-delete vm0 snap1 --children
#
★★

19. virt-install 在创建 VM 时的关键参数与无人值守安装?

请说明 virt-install 创建 VM 的关键参数与无人值守安装?

  • virt-install 的关键参数(内存/CPU/磁盘/网络)
  • 无人值守安装(--location + kickstart/autoyast)
  • 创建后管理

virt-install 创建 VM 的关键参数:--name--memory--vcpus--disk(路径/大小)、--network(网络)、--cdrom/--location(安装源)、--os-variant(系统类型)、--graphics(显示)、--virt-type kvm。无人值守安装:用 --location 指定安装源,配合 --initrd-inject/--extra-args 传入 kickstart(RHEL/CentOS 的 ks.cfg)或 autoyast(SUSE),实现自动安装。创建后 virsh start 启动、virsh console 进入。参数化 + 无人值守便于批量部署 VM。

virt-install 是创建 VM 的 CLI,关键参数定义资源与安装源,无人值守靠 kickstart/autoyast 注入实现自动化。

virt-install --name vm0 --memory 2048 --vcpus 2 \
  --disk path=/var/lib/libvirt/images/vm0.qcow2,size=20 \
  --network network=default --os-variant centos7 \
  --location http://mirror/centos --initrd-inject=kickstart.cfg \
  --extra-args='ks=file:/kickstart.cfg'
#
★★

20. virtio-balloon 内存气球与内存超售的回收机制,以及气球驱动缺失导致的 guest 内存无法回收问题

请说明 virtio-balloon 内存气球与内存超售的回收机制,以及气球驱动缺失导致的 guest 内存无法回收问题?

  • virtio-balloon 动态回收 guest 内存
  • 内存超售与回收
  • 气球驱动缺失的后果

virtio-balloon 是内存气球设备,通过 guest 内的 balloon 驱动与 host 的 QEMU balloon 交互,动态调整 guest 内存:host 需要回收内存时,通过 balloon 让 guest 释放空闲页返回 host;guest 需要更多内存时,balloon 放气交还内存。它支持内存超售(host 内存 > 所有 VM 分配内存之和),通过回收空闲内存缓解压力。问题:若 guest 未安装/加载 balloon 驱动,host 无法回收该 VM 的空闲内存,超售时可能出现内存不足,导致 VM 触发 OOM 或性能下降。因此需确保 guest 安装 balloon 驱动,并监控混合内存分配。

balloon 是超售回收机制,依赖 guest 驱动;驱动缺失致 host 无法回收内存,超售场景会出问题。

#

21. KVM CPU 模型 host-passthrough 与 host-model 的差异

请说明 KVM CPU 模型 host-passthrough 与 host-model 的差异?

  • host-passthrough 直接透传宿主机 CPU 特性
  • host-model 选最接近宿主机的兼容模型
  • 迁移兼容性差异

host-passthrough:把宿主机 CPU 的原生特性直接暴露给 VM,性能最高(保留全部 CPU 特性,如 AVX512),但 VM 的 CPU 特性与宿主机绑定,跨主机迁移时若目标 CPU 特性不同则无法迁移(或需降级)。host-model:让 libvirt 为给定宿主机选择最接近的通用 CPU 模型,并尽量保留宿主机特性,兼顾性能与迁移兼容性(若目标主机支持相同特性的模型)。取舍:追求极致性能与单机用 host-passthrough,追求跨主机迁移兼容用 host-model。生产集群常用 host-model 或指定基线模型。

差异是"完全透传原生特性(性能高、迁移受限)vs 选兼容模型(性能略降、迁移兼容)",迁移需求决定选型。

#

22. KVM 中如何隐藏 CPU 特性以保障跨主机迁移兼容(如 host-passthrough 迁移限制)?

请说明 KVM 中如何隐藏 CPU 特性以保障跨主机迁移兼容(如 host-passthrough 迁移限制)?

  • 隐藏 CPU 特性(如 avx512)
  • 迁移兼容性问题
  • 用 CPU 模型/特性控制

host-passthrough 时 VM 继承宿主机 CPU 特性,若特性在不同主机间不一致(如一台有 AVX512、另一台没有),迁移到无该特性的主机时会失败或 VM 崩溃。保障迁移兼容:1) 在 libvirt XML 中通过 <cpu mode='host-passthrough'> 配合 <feature policy='disable' name='avx512'/> 隐藏不一致的特性;2) 或改用 host-model 或明确的基线 CPU 模型(如 <cpu mode='custom' match='exact'><model>...</model></cpu>),只暴露目标主机都支持的特性;3) 迁移前用 virsh migrate 的兼容性检查或控制 CPU 特性集合。核心是"让 VM 的 CPU 特性集合在所有迁移目标主机上一致",牺牲部分特性换迁移兼容。

隐藏/限定 CPU 特性(disable 特性或统一模型)使 VM 特性集合跨主机一致,是解决 host-passthrough 迁移限制的办法。

#

23. Proxmox VE SDN 在虚拟化网络(VNet、subnet、DHCP)中的配置?

请说明 Proxmox VE SDN 在虚拟化网络(VNet、subnet、DHCP)中的配置?

  • Proxmox SDN 的 VNet 与 subnet
  • 网络类型与 DHCP
  • 配置流程

Proxmox VE SDN(软件定义网络)提供虚拟网络管理:1) VNet(虚拟网络)定义逻辑网络,可绑定到物理网络或作为 overlay;2) subnet 在 VNet 下定义子网(IP 网段、网关),可启用 DHCP 为 VM 自动分配 IP;3) 网络类型支持 simple(VLAN)、vlan、vxlan 等,SDN 可跨节点(配合 VXLAN overlay)。配置:在 Datacenter/SDN 中创建 zones(物理网络)、VNet、subnet,绑定到节点,VM 网卡选择 VNet 并启用 DHCP。SDN 让虚拟网络集中管理与自动分配,支持跨节点一致性。

Proxmox SDN 通过 VNet/subnet/DHCP 集中管理虚拟网络,支持 VLAN/VXLAN 与跨节点,简化 VM 网络配置。

#

24. Proxmox VE 集群(cluster、HA、迁移)的架构与运维?

请说明 Proxmox VE 集群(cluster、HA、迁移)的架构与运维?

  • 集群的节点与 corosync 通信
  • HA 与资源
  • 在线迁移

Proxmox VE 集群由多个节点组成,通过 corosync 保持节点间通信与集群状态,使用 pve-cluster 与共享存储(可选)。HA(高可用):配置 HA 资源(VM/CT),集群监控节点状态,节点故障时在健康节点自动恢复(fencing 隔离故障节点)。迁移:支持在线迁移(共享存储)与离线迁移,qm migrate 或管理界面操作,在线迁移需共享存储。运维:管理集群节点(pvecm)、查看集群状态(pvecm status)、维护 quorum 与节点健康。集群提供统一管理、HA 与迁移能力。

Proxmox 集群用 corosync 通信,HA 自动恢复故障,迁移依赖共享存储,运维需管 quorum 与节点健康。

pvecm status
pvecm add <node>
qm migrate 100 node2 --online
#

25. libvirt secret 如何管理虚拟机磁盘加密与凭据密钥?

请说明 libvirt secret 如何管理虚拟机磁盘加密与凭据密钥?

  • libvirt secret 存储敏感信息
  • 磁盘加密密钥的管理
  • 引用 secret 的配置

libvirt secret 用于安全存储敏感信息(如磁盘加密密钥、iSCSI 认证凭据、网络密钥),避免明文写在 XML 中。创建:virsh secret-define 定义 secret(区分类型,如 volume 密钥、iscsi 密码)、virsh secret-set-value 设置密钥值。磁盘加密:对 qcow2 加密卷,在 XML 的 <disk> 中引用 <secret> 提供密钥,使 QEMU 能解密磁盘。iSCSI 认证用 secret 存 CHAP 密码。管理通过 virsh secret-list 查看、virsh secret-dumpxml 导出元数据(不含明文)。secret 提升虚拟机凭据与密钥的安全管理。

libvirt secret 集中安全存储密钥/凭据,XML 引用 secret 而非明文,支持磁盘加密与 iSCSI 认证。

virsh secret-define /tmp/secret.xml
virsh secret-set-value <uuid> <secret>
virsh secret-list
#

26. virt-resize 如何实现 VM 磁盘扩容?

请说明 virt-resize 如何实现 VM 磁盘扩容?

  • virt-resize 调整/扩容磁盘镜像
  • 支持分区与文件系统调整
  • 离线操作与安全

virt-resize 是 libguestfs 工具,用于调整 VM 磁盘镜像大小(扩容/收缩分区与文件系统)。用法:virt-resize --expand /dev/sda1 in.img out.img,将分区/文件系统扩展到目标大小,支持 ext4/xfs 等常见文件系统。过程:先复制镜像,再调整分区表与文件系统。需离线操作(VM 关闭),输出到新镜像避免破坏原文件。可配合 virt-filesystems 查看布局。扩容后 VM 以新镜像启动,guest 系统自动使用扩展空间。它是 VM 磁盘扩容的标准工具。

virt-resize 离线调整分区与文件系统实现磁盘扩容,输出新镜像保证安全,需 VM 关闭。

virt-filesystems -a vm0.img
virt-resize --expand /dev/sda1 vm0.img vm0-bigger.img
#

27. virt-sysprep 在 VM 通用化(去除机器特定信息)中的应用?

请说明 virt-sysprep 在 VM 通用化(去除机器特定信息)中的应用?

  • virt-sysprep 去除机器特定信息
  • 通用化(hostname、机器 ID、SSH 密钥)
  • 用于模板/克隆

virt-sysprep 是 libguestfs 工具,用于对 VM 镜像做"通用化"(generalization),去除机器特定信息使其可作为模板克隆。它清理:主机名、机器 ID(machine-id)、SSH 主机密钥、网络配置、日志、临时文件、用户密码等。用法:virt-sysprep -a vm0.img(可加 --operations 指定清理项)。常用于把已配置好的 VM 做成通用模板,克隆后每台 VM 有独立 ID 与密钥。清理后需重新配置网络/主机名。virt-sysprep 是 VM 模板化的关键步骤。

virt-sysprep 去除机器特定信息(主机名/机器ID/SSH密钥)实现通用化,是制作可克隆 VM 模板的关键。

virt-sysprep -a vm0.img --operations default,ssh-hostkeys
virt-sysprep -a vm0.img --hostname new-host