利用libvirt命令动态挂载数据盘的方法

本文介绍如何在KVM虚拟机中实现数据盘的动态挂载与卸载,包括创建数据盘、定义配置文件、启动虚拟机及挂载与卸载数据盘的具体步骤。

在利用KVM的虚拟桌面应用中,有时候需要在虚拟桌面起来后还能够动态的挂载或卸载数据盘,以达到类似热插盘U盘或移动硬盘的效果,当然管理上需要做处理。如果纯粹中技术上来讲,大概是下面的几步:

1. 创建数据盘:

创建数据盘可以用qemu-img命令,但是缺点是创建完以后还需要在虚拟机里面做磁盘初始化(在磁盘管理里)和格式化。相比较而言,用libguestfs带的 virt-make-fs就好很多,一条命令完成磁盘创建和初始化的功能,挂到虚拟机里面马上就可以使用。

sudo virt-make-fs -F qcow2 -t ntfs -s 100G /home/.../workroom/test/temp test100G.img

2. 定义数据盘配置文件:

<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/home/.../workroom/test/test500G.img'/>
<target dev='hdf' bus='virtio' type='virtio'/>
</disk>

另存为 test-device-attach.xml

3. 启动虚拟机,假设虚拟机的domain名是 DomainAttachDisk;

4. 运行virsh命令完成挂载

sudo attach-device DomainAttachDisk /home/.../workroom/test/test-attach.xml

测试下来从挂载命令到操作系统识别大概30秒-60秒之间

5. 卸载命令:

sudo detach-device DomainAttachDisk /home/.../workroom/test/test-attach.xml

如果用应用程序把这些过程管理起来,那么就能做到动态的数据盘挂载和卸载功能。

### 创建或使用虚拟U盘的方法 #### 使用QEMU创建虚拟U盘 为了创建虚拟U盘,可以利用`qemu-img`工具来生成所需的映像文件。具体来说,通过执行如下命令能够建立一个大小为10GB的原始格式(`raw`)的虚拟U盘图像文件[^2]: ```bash qemu-img create -f raw ./armusb.img 10G ``` 当准备就绪之后,在启动QEMU虚拟机的过程中需附加此虚拟U盘作为设备之一。这可通过向QEMU传递特定参数实现,例如下面这条指令展示了如何配置虚拟U盘以便被识别为USB存储装置: ```bash -drive file=./armusb.img,if=none,id=usbmount,format=raw \ -device usb-storage,drive=usbmount ``` 对于初次使用的场景下,还需要对新创建的虚拟U盘进行格式化处理。假设目标文件系统选用ext4,则相应的格式化命令如下所示;另外提供了几个辅助性的Linux命令用于查看当前系统的磁盘布局以及挂载点信息: ```bash sudo mkfs.ext4 /dev/sdx # 替换sdx为实际设备名称 lsblk -f # 列出所有块设备及其文件系统类型 fdisk -l # 显示详细的分区表详情 mount -t ext4 /dev/sdx /mnt/usb # 将虚拟U盘挂载到指定位置 ``` #### 基于本地硬盘分区构建虚拟U盘 另一种方式涉及直接采用物理硬盘上的某个未分配区域或者现有逻辑卷组内的空白空间充当临时性质的“虚拟U盘”。这种方式特别适合那些希望快速搭建起可用于引导安装操作系统的环境而不必依赖实体介质的情况[^3]。 在这种情况下,主要工作集中在将所需的操作系统安装源(通常是ISO镜像)提取出来并放置到选定的目标分区上。值得注意的是,如果涉及到隐藏属性的数据项,则建议尽可能地保持其原貌以免影响后续正常使用过程中的功能表现。 #### 应用STM32平台特性模拟U盘行为 某些嵌入式开发板如STM32系列支持以硬件层面模仿标准USB大容量存储类别的工作机制,从而允许外部主机将其视为常规外接驱动器对待。尽管如此,由于缺乏双向实时更新机制的支持,因此一旦任一方作出更改便无法立即反映给另一方知道——即所谓的不同步现象[^4]。 即便如此,只要满足简单的数据传输需求还是完全可以胜任的。比如开发者可以在PC端编写好固件代码并通过专用编程接口烧录进去,接着就能如同操作真实闪存卡那样读取其中的内容或是上传新的资源过去供内部应用程序调用了。 #### 配置KVM环境中持久化的虚拟U盘设置 最后值得一提的是,在更复杂的云计算架构里头也可以借助libvirt管理框架配合XML描述文档定义更加灵活多变且具备一定稳定程度的虚拟U盘方案。这里给出了一段示范性的片段说明了怎样把一块现有的QCOW2格式磁盘映射成带有弹出特性的USB型态呈现给客户操作系统去访问[^5]: ```xml <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/path/to/image.qcow2'/> <target dev='sdb' bus='usb'/> </disk> ``` 上述方法涵盖了从简单易行直至高度定制的不同层次的需求范围之内关于创建和运用虚拟U盘的技术要点介绍。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值