如何将 cdrom 设备连接到 kvm/qemu 域(使用命令行工具)?

ΤΖΩ*_*ΙΟΥ 27 optical-media kvm-virtualization virsh

我已经在我的 Ubuntu 笔记本电脑上设置了一个运行 Windows XP 的虚拟机。使用virt-managerGUI 应用程序,我可以在我的驱动器中插入一张 CD,然后转到 Details?IDE CDROM 1 并单击Connect按钮。然后 CD 在我的虚拟机中可用。

如何通过命令行执行相同的操作?显然,我也希望能够与命令行断开连接。

注意:我可以从命令行使用virsh start testbed(testbed 是域/VM 的名称)启动 VM。

小智 28

如果您在创建虚拟机时未定义 CDROM,您甚至可以通过运行以下命令将设备附加到正在运行的域(虚拟机):

virsh attach-disk testbed /dev/sr0 hdc --type cdrom
Run Code Online (Sandbox Code Playgroud)

如果您已经定义了一个 CDROM,但它指向一个 ISO 映像,根据我的经验,您仍然可以运行相同的命令。该hdc部分需要与您在testbed虚拟机中拥有的块设备相匹配。

当您想再次指向 ISO 映像时,请替换/dev/sr0为主机上的文件名,例如

virsh attach-disk testbed ~/virtio-win-0.1-22.iso hdc --type cdrom
Run Code Online (Sandbox Code Playgroud)

文档建议使用virsh update-device,但创建 XML 定义需要更多的工作,例如:

<disk type='block' device='cdrom'>
  <driver name='qemu' type='raw'/>
  <source dev='/dev/sr0'/>
  <target dev='hdc' bus='ide'/>
  <readonly/>
</disk>
Run Code Online (Sandbox Code Playgroud)

如果您喜欢这种方式,请将类似的内容保存到文件中(例如~/cdrom-real.xml),然后触发:

virsh update-device testbed ~/cdrom-real.xml
Run Code Online (Sandbox Code Playgroud)


Kei*_*ley 6

使用 virsh 的 qemu-monitor-command 将弹出和更改命令传递给 qemu。

首先使用“信息块”为您的 cdrom 获取 qemu 的设备名称。

virsh # qemu-monitor-command mirage --hmp --cmd "info block"
drive-virtio-disk0: type=hd removable=0 file=/home/daoist/mirage/mirage.qcow2 ro=0 drv=raw encrypted=0
drive-ide0-0-0: type=cdrom removable=1 locked=0 file=/home/daoist/iso/en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso ro=1 drv=raw encrypted=0
Run Code Online (Sandbox Code Playgroud)

所以就我而言,我对drive-ide0-0-0 感兴趣。因此,要更改磁盘,请执行以下操作:

virsh # qemu-monitor-command mirage --hmp --cmd "eject drive-ide0-0-0"
virsh # qemu-monitor-command mirage --hmp --cmd "change drive-ide0-0-0 /path/to/new.iso"
virsh #
Run Code Online (Sandbox Code Playgroud)