首页/云/云平台与虚拟化速查/virsh 热插拔磁盘
虚拟化操作94 条

virsh 热插拔磁盘

attach-disk 给运行中的域添加数据盘并可用 --config 固化;detach-disk 与之对应。guest 侧是否立即识别取决于总线与系统支持,挂载建议使用 UUID 避免盘符漂移。

云平台与虚拟化速查云更新于 2026-10-13

热插拔磁盘是什么

virsh attach-disk 与 detach-disk 在虚机运行过程中挂载或拔出磁盘,常用于在线扩容数据盘、临时挂载备份盘。关键在 --live 与 --config 的区别:--live 只改运行时,--config 写入持久定义,两者同时使用才既立即生效、又在重启后保留。挂载完成后还要在 guest 内分区、格式化并写入配置。

基本信息

挂载磁盘virsh attach-disk vm1 /path/extra.qcow2 vdb --driver qemu --subdriver qcow2 --live --config
指定总线加 --targetbus virtio
拔出磁盘virsh detach-disk vm1 vdb --live --config
核对virsh domblklist vm1
生效范围--live 运行时;--config 持久定义,重启保留

典型使用场景

  • 业务不中断的前提下给虚机追加数据盘并扩容
  • 临时挂载备份盘或导出盘做数据搬运
  • 迁移后调整磁盘映射关系
  • 故障处理时替换或移除异常磁盘

热插拔一块数据盘

热插拔一块数据盘
sudo virsh attach-disk vm1 /var/lib/libvirt/images/extra.qcow2 vdb \
  --driver qemu --subdriver qcow2 --targetbus virtio --live --config
virsh domblklist vm1                 # 确认新磁盘已挂到预期设备名
# guest 内确认并启用:
lsblk                                # 是否出现新块设备
sudo mkfs.xfs /dev/vdb && sudo mount /dev/vdb /data   # 首次使用需格式化
sudo virsh detach-disk vm1 vdb --live --config        # 拔出(guest 内先 umount)

选项与动作读法

选项/动作含义注意
--live只修改运行时配置未加 --config 时重启后磁盘消失
--config只修改持久定义未加 --live 时当前运行不受影响
--targetbus指定总线类型(如 virtio、scsi)总线类型影响 guest 内的设备名与性能
--subdriver磁盘镜像格式(如 qcow2)与实际文件格式不符会启动失败
设备名如 vdb、sdb已被占用时热插失败,先用 domblklist 核对
guest 内核对新设备的发现方式不同:virtio 设备通常立即出现,部分 SCSI 场景需要重新扫描总线才会看到新磁盘。
拔出磁盘属于破坏性操作,务必先在 guest 内 umount 并确认无进程占用,再执行 detach;数据盘写 fstab 时用 UUID 而不是设备名。

热插拔检查清单

  • 确认目标设备名未被占用:virsh domblklist 逐个核对
  • 确认镜像文件存在且属主与权限允许 qemu 进程读取
  • 确认 subdriver 与镜像实际格式一致,避免以 raw 方式打开 qcow2
  • 确认同时带了 --live 与 --config,否则要么当前不生效、要么重启丢失
  • 拔出前在 guest 内 umount 并停掉占用进程
挂载失败时先看域日志 /var/log/libvirt/qemu/<域名>.log:SELinux 或 AppArmor 拒绝、镜像属主不对、路径写错都会在这里给出明确原因,比反复试命令更快定位。

易错点

  • 设备名 vdb 已被占用时热插失败:先用 domblklist 核对空闲名
  • fstab 直接写盘符,重启后因识别顺序变化挂载失败:改用 UUID
  • 只加 --live 不加 --config,宿主重启或虚机重启后磁盘映射丢失
  • 拔出前未在 guest 内卸载,文件系统损坏或数据丢失

数据来源与参考

  • libvirt 文档:virsh attach-disk / detach-disk
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌