QEMU安装与使用

脚本安装虚拟机

#!/bin/bash
virt-install \
--name ubuntu20.04-server \
--cdrom   ubuntu-20.04.4-live-server-amd64.iso \
--memory 4096 \
--cpu host \
--disk Image.img,bus=virtio

管理虚拟机

virsh destroy 虚拟机名称      ##关闭虚拟机
virsh list --all             ##查看所有的虚拟机状态、名称
virsh start 虚拟机名称        ##开启虚拟机
virt-viewer 虚拟机名称        ##显示虚拟机(占用shell)

图形界面安装虚拟机

Installation:
Debian/Ubuntu: sudo apt install qemu

To create a virtual image use:

qemu-img create -f qcow2 Image.img 10G

(create is to create an image, -f qcow2 sets the format to qcow2, Image.img is our final file and 10G is it's size)

Launching the VM:

qemu-system-x86_64 -enable-kvm -cdrom OS_ISO.iso -boot menu=on -drive file=Image.img -m 2G

(-enable-kvm enables KVM, -cdrom selects an iso to load as a cd, -boot menu=on enables a boot menu, -drive file= selects a file for the drive, -m sets the amount of dedicated RAM)
(Remember! Ctrl + Alt + G to exit capture, Ctrl + Alt + F to fullscreen!)

That doesn't run so good, what can we do to improve it?

Basic performance options

-cpu host (sets the CPU to the hosts' CPU)
-smp 2 (sets the numbers of cores)

使用

安装成功后,重新启动,ssh虚拟机IP即可使用(默认network共用host的网络,会分配一个独立的IP)

虚拟机配置

所有的设备都是一个名为devices元素的子设备(All devices occur as children of the main devices element.),以下是一个简单的配置:

所有的设备看起来就像一个disk、floppy、cdrom或者一个 paravirtualized driver,他们通过一个disk元素指定。

disk是一个描述disks的主要容器,type特性包括:file,block,dir,network。device描述disk如何受到客户端 OS的,特性包括:floppy、disk、cdrom、lun,默认是disk。snapshot属性表明默认行为在磁盘做snapshot的时 候,snapshot的参数有:internal ,在snapshot的时候可以存储改变的数据。external,在snapshot时分开活动的数据。no,disk不参加snapshot,只读磁 盘默认是no。

source元素:在disk的type是file时,file属性指定一个合格的全路径文件映像作为客户端的磁盘,在disk的type是block 时,dev属性指定一个主机设备的路径作为disk,在disk的type是dir时,dir属性指定一个全路径的目录作为disk,在disk的 type是network时,protocol属性指定协议用来访问镜像,镜像的值可以是:nbd,rbd,sheepdog。当protocal的属性 值是rbd或者sheepdog时,必须用一个额外的name属性指定使用那个镜像,当type的值是network时,source可以有0个或者多个 host字属性指定连接哪些主机。

target元素:控制总线设备在某个磁盘被选为客户端的OS时,dev属性表明本地磁盘在客户端上的实际名称,因为实际设备的名称指定并不能保证映射到 客户端OS上的设备。bus属性指定了哪种类型的磁盘被模拟,值主要有:ide、scsi、virtio、xen、usb、sata。如果省略,总线类型 从设备名来推断,例如设备名是sda,则使用scsi类型的总线。tray属性指定可移动磁盘的状态,例如cdrom或者floppy,它的值是open 或closed,默认是closed。

driver允许更进一步的指定hypervisor driver的相关细节。如果hypervisor支持多个后端驱动程序,name属性选择一个主要的后端驱动的名称,可选type参数可以指定一个子类 型,例如:xen支持的名称包括tap、tap2、phy、file,qemu只支持qemu名称,但是多类型的包括raw、bochs、qcow2、 qed等。cache属性控制cache机制,值可以是:default、none、writethtough、writeback、 directsync、unsafe。error_policy属性指定当hypervisor在读写磁盘出现错误时的行为,值可以是:stop、 report、ignored、enospace,默认值是report。io属性控制IO策略,qemu客户端支持threads、native。

网络接口:
有好几种网络接口访问客户端:Virtual network、Bridge to LAN、Userspace SLIRP stack、Generic ethernet connection、Direct p_w_upload to physical interface。
Virtual network:这种推荐配置一般是对使用动态/无线网络环境访问客户端的情况。
Bridge to LAN:这种推荐配置一般是使用静态有限网络连接客户端的情况。

参考:libvirt虚拟机xml配置文件详解

其他学习资料

virtio-Using Ceph RBD as a QEMU Storage
virt-install命令
qemu使用spdk bdev
vhost Target
QEMU 命令行直通xml

出现问题及解决办法

ERROR Requested operation is not valid: network 'default' is not active

virsh net-list --all
virsh net-start default

对网络应用修改
有时,需要编辑网络定义并即时应用更改。最常见的情况是为网络的 DHCP 服务器添加新的静态 MAC+IP 映射。如果您使用“virsh net-edit”编辑网络,您所做的任何更改在网络被破坏并重新启动之前不会生效,不幸的是,这将导致所有来宾失去与主机的网络连接,直到他们的网络接口被明确地重新附加(这是作为重新启动 libvirtd 服务的副作用自动完成的)。
幸运的是,网络配置的许多更改(包括前面提到的为 DHCP 添加静态 MAC+IP 映射)可以通过“virsh net-update”来完成,可以告诉它立即执行更改。例如,要将 DHCP 静态主机条目添加到名为“default”的网络,将 MAC 地址 53:54:00:00:01 映射到 IP 地址 192.168.122.45 和主机名“bob”,您可以使用以下命令:

    virsh net-update default add ip-dhcp-host \
          "<host mac='52:54:00:00:00:01' \
           name='bob' ip='192.168.122.45' />" \
           --live --config
posted @ 2022-11-29 21:14  misaka-mikoto  阅读(1946)  评论(0编辑  收藏  举报