Skip to content

KVM虚拟机添加和移除虚拟磁盘

约 806 字大约 3 分钟

Linux

2023-08-16

一、准备工作

确保你已经安装并配置好了以下组件:

  • KVM/QEMU
  • libvirt 管理工具
  • 一个已创建并正在运行的虚拟机(例如 rhel7

二、创建一个新的 QCOW2 格式磁盘镜像

使用 qemu-img 命令创建一个大小为 2G 的 qcow2 格式磁盘镜像:

qemu-img create -f qcow2 /home/vm/rhel2G.qcow2 2G

说明:

  • -f qcow2:指定磁盘格式为 qcow2(支持快照、压缩、稀疏存储等特性)
  • rhel2G.qcow2:新磁盘的名称
  • 2G:磁盘大小

创建成功后,会在 /home/vm 目录下生成一个空白的 2G 虚拟磁盘文件。


三、将磁盘挂载到虚拟机

使用 virsh attach-disk 命令将新磁盘动态挂载到名为 rhel7 的虚拟机上:

virsh attach-disk rhel7 /home/vm/rhel2G.qcow2 vdb --subdriver qcow2 --cache none --persistent

参数说明:

  • rhel7:目标虚拟机名称
  • /home/vm/rhel2G.qcow2:要挂载的磁盘路径
  • vdb:在虚拟机中的设备名(通常第一个磁盘是 vda,第二个可以用 vdb)
  • --subdriver qcow2:指定磁盘子驱动类型(必须与磁盘格式一致)
  • --cache none:禁用缓存,确保数据写入磁盘
  • --persistent:将该变更写入虚拟机的配置文件,确保重启后仍然有效

挂载完成后,可以在虚拟机内通过 lsblkfdisk -ldmesg 命令查看新磁盘。


四、从虚拟机中卸载磁盘

当不再需要该磁盘时,可以使用 virsh detach-disk 命令将其从虚拟机中移除:

virsh detach-disk --domain vmname /home/vm/vmname-vdb.qcow2 --persistent

说明:

  • --domain vmname:指定要操作的虚拟机名称
  • /home/vm/vmname-vdb.qcow2:要卸载的磁盘路径
  • --persistent:从配置文件中永久移除该磁盘

请确保卸载前虚拟机内部没有正在使用该磁盘(比如挂载点未卸载),否则可能会导致系统异常或数据损坏。


四、从虚拟机中卸载磁盘

当不再需要该磁盘时,可以使用 virsh detach-disk 命令将其从虚拟机中移除:

virsh detach-disk --domain vmname /home/vm/vmname-vdb.qcow2 --persistent

说明:

  • --domain vmname:指定要操作的虚拟机名称
  • /home/vm/vmname-vdb.qcow2:要卸载的磁盘路径(根据实际路径替换)
  • --persistent:从虚拟机配置中永久移除该磁盘

💡 提醒:在卸载前,请先确保虚拟机内部没有正在使用该磁盘(如没有被挂载到某个路径),否则可能导致文件系统异常或数据损坏。


五、验证虚拟机磁盘列表

磁盘卸载之后,你可以使用以下命令验证虚拟机当前挂载的所有磁盘设备:

virsh domblklist vmname

示例输出:

Target     Source
------------------------------------------------
vda        /var/lib/libvirt/images/rhel7.qcow2

说明:

  • Target:虚拟机中看到的设备名称(如 vda、vdb)
  • Source:磁盘对应的宿主机文件路径

如果卸载成功,vdb 等对应项将不再显示在列表中。


六、小贴士

  • 如果要在虚拟机内部确认磁盘状态,也可以登录虚拟机使用命令:
  lsblk
  • 若卸载磁盘后计划删除磁盘文件,可直接执行:

    rm -f /home/vm/rhel2G.qcow2

    ⚠️ 注意:删除前务必确认该磁盘不再被其他虚拟机使用。