热插拔磁盘是什么
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 拒绝、镜像属主不对、路径写错都会在这里给出明确原因,比反复试命令更快定位。