qemu
https://blog.csdn.net/u011795345/article/details/78681213
http://blog.sina.com.cn/s/blog_da4487c40102v0yi.html
qemu-kvm -enable-kvm -cpu EPYC -machine q35 -smp 2,maxcpus=64 -m 512M,slots=5,maxmem=30G -nographic -drive if=pflash,format=raw,unit=0,file=/tmp/OVMF_CODE.fd,readonly -object sev-guest,id=sev0,cbitpos=47,reduced-phys-bits=1 -machine memory-encryption=sev0 -monitor pty -cdrom Core-current.iso
qemu-kvm -enable-kvm -smp 2,maxcpus=64 -m 512M,slots=5,maxmem=30G -nographic -drive file=u.qcow2,if=none,id=disk0,format=qcow2 -drive file=ubuntu-20.10-live-server-amd64.iso,media=cdrom -boot d
一旦安装了QEMU,就可以从磁盘镜像(disk image)文件运行虚拟机了。镜像文件是用来模拟物理磁盘的特殊格式的文件,它在宿主机上的一个文件,对于这个客户机来说,它就是一个“物理磁盘”。客户机可以在他上面创建自己的文件系统。
QEMU可以支持如下多种不同格式的镜像文件:
raw:二进制裸格式,是QEMU默认的格式,通用性强。该格式镜像文件支持稀疏文件(sparse file)格式,这种格式的文件以实际的数据量占用存储空间。
cloop:CompressedLoop格式,主要用于光盘启动系统KNOPPIX或其他类型的LiveCD。
qcow2:qemu copy-on-write文件格式,是一种功能丰富的镜像文件格式,支持写时拷贝(copy-on-write)、VM快照、加密、压缩等功能,它的上一个版本qcow及更早的cow的替代版本。
vmdk:VMware3、VMware4的镜像文件格式。
vdi:与virtualBox兼容的镜像文件格式。
为客户机创建和使用磁盘镜像文件
创建镜像文件的命令格式:
qemu-img create [-f 文件格式] 镜像文件名 [文件大小]
文件大小的单位可以是K, M, G, T
镜像文件创建后,查看文件信息的命令:
qemu-img info [-f 文件格式] 镜像文件名
还可以对镜像文件进行一致性检查:
qemu-img check [-f 文件格式] 镜像文件名
创建镜像文件时指定了文件大小,之后可以修改文件大小:
qemu-img resize 镜像文件名 [+|-] 增量
修改镜像文件大小后,必须在客户机操作系统中使用文件系统工具扩充或缩减对应分区的大小。
使用qemu-img创建一个存储空间为3GB,格式为qcow2的镜像文件winxp.img:
# qemu-img create -f qcow2 winxp.img 3G
启动虚拟机,从光驱引导操作系统安装盘,在新建的winxp.img上安装操作系统:
# qemu-kvm -m 256 -hda winxp.img -cdrom winxpsp2.iso -boot d
winxpsp2.iso为光盘镜像文件,也是可以直接使用宿主机的光驱,通过光盘介质安装,直接指定光驱的逻辑设备名“/dev/cdrom”或“/dev/dvd”,或设备的物理名“/dev/sr0”。
一个虚拟机可以挂载多至4个磁盘镜像文件,即可以有多至4个磁盘,在qemu-kvm启动命令中分别用-hda, -hdb, -hdc, -hdc指定相应的磁盘镜像文件,其中-hdc不能同-cdrom同时使用。
copy-on-write镜像文件
具有“写时拷贝”特性的磁盘镜像文件,这种磁盘镜像文件可以一个后端文件为基础,它只保存相对于后端文件内容的修改。可以保证对磁盘镜像文件的修改,不会破坏后端文件的内容。使用示例:
# qemu-img create -f qcow2 -b winxp.img test1.img
或使用命令:
# qemu-img create -f qcow2 -o backing-file=winxp.img test1.img
建立写时拷贝文件不需要指定文件的大小,可以使用命令将当前文件内容合并入后端文件:
# qemu-img commit -f qcow2 test1.img
可以更改后端文件及后端文件的格式,使用如下命令:
qemu-img rebase [-f 文件格式] [-p] [-u] -b 后端文件名 [-F 后端文件格式] 镜像文件名
-p 显示进度
-u 指定以非安全模式进行更改,即更改后不进行内容检查
qcow2镜像文件的特性功能
创建文件时,可以指定对文件进行AES加密:
# qemu-img create -f qcow2 -o encryption=on myimage.qcow2 10G
创建文件时,还可以指定文件cluster_size,值域在512B - 2MB,缺省值为64KB。值越小越节省文件空间,值越大性能越好:
# qemu-img create -f qcow2 -o encryption=on, cluster_size=4K myimage.qcow2 10G
创建文件时,可以使用空间预分配特性preallocation,取值可以为:off, metadata, full。off:关闭该功能;full:以“0”预先填充分配的所有剩余空间;metadata:占用比初始值略大的空间,相对于off可以提高性能。
# qemu-img create -f qcow2 -o preallocation=metadata myimage.qcow2 10G
可以在一个qcow2文件内,使用snapshot命令建立多个快照:
qemu-img snapshot [-l | -a 恢复至快照名 | -c 创建的快照名 | -d 删除的快照名 ] 镜像文件名
-l 显示当前存在的快照名清单
镜像文件的格式转换
使用convert命令转换镜像文件的格式:
qemu-img convert [-c] [-p] [-S 大小] [-f 源文件格式] [-O 目标文件格式] [-o 目标文件选项] 源文件 目标文件
-c 对目标文件进行zlib压缩,只有qcow2和qcow格式支持
-p 显示文件转换的进度
-S 指定sparse_size的大小,输出镜像文件为稀疏格式,并按指定的大小包含连续的“0”,指定的大小应为512字节的倍数
在宿主机上挂载磁盘镜像文件
可以在宿主机上,以loopback设备挂载和使用raw格式的磁盘镜像文件。示例如下:
# mkdir -p /mnt/myImage
# mount -o loop, offset=32256 myimage.raw /mnt/myImage
对于其他格式的磁盘镜像文件,可以使用qemu-nbd,方法如下:
# lsmod | grep nbd 产看系统是否导入了nbd模块
# rmmod nbd 如果已导入删除该模块
# probemod nbd max_part=8 重新导入nbd,指定可以接受的最大分区数,缺省是关闭的,不允许分区,根据镜像文件的分区数指定该参数
# qemu-nbd -c /dev/nbd0 image.qcows
# partprobe /dev/nbd0
# fdisk -l /dev/nbd0 查看/dev/nbd0的分区情况
# mount /dev/nbd0p1 /mnt/myImage 如存在分区/dev/nbd0p1,可将其挂载使用
将镜像文件拷贝到物理磁盘
方法一:
# qemu-img convert -O raw diskimage.qcow2 diskimage.raw 将镜像文件转换为raw格式
# dd if=diskimage.raw of=/dev/sdb 将镜像文件拷贝到磁盘分区
方法二:
# qemu-img convert -O raw diskimage.qcow2 /dev/sdb 使用qemu-img命令直接拷贝的磁盘分区
<domain type = 'kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
<name>csv_launch</name>
<memory unit='GiB'>4</memory>
<vcpu>1</vcpu>
<os>
<type arch = 'x86_64' machine = 'pc'>hvm</type>
<boot dev = 'hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset = 'utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/local/bin/qemu-system-x86_64</emulator>
<disk type = 'file' device = 'disk'>
<driver name = 'qemu' type = 'qcow2' cache = 'none'/>
<source file = '/tmp/csv_launch.qcow2'/>
<target dev = 'hda' bus = 'ide'/>
</disk>
<memballoon model='virtio-non-transitional'>
<driver iommu='on'/>
<alias name='balloon0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</memballoon>
</devices>
<launchSecurity type='sev'>
<policy>0x0001</policy>
<cbitpos>47</cbitpos>
<reducedPhysBits>5</reducedPhysBits>
<dhCert>AAAAAAAAAAAAAAAAAAAAAAMAAACnqdCffmqoIXAUguN+TANl5tBQel2zs9QyvJCbNGYJdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJzLfkr9adSzZOQ3WGLW53dLIjT9WCTmMY2rDPziXp+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAEdVRVNUX1VTRVJfSUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</dhCert>
<session>Z8Zpc1H/Suwpzbqr8vvjRlvkfQ4H5LrZN16VZaqa+Zpx8q4n4vRExsDIaBVrTWIlfMJU+Bvo5412Wi5jM5/Jms7gC+qSivF07UzVvSnEiA3CkxYLUUiyDax4LK9yycyURKGfIiC/o3z71bjpSvbQMy+GmJ8+s+VN1xpDqWmhRAFnxmlzUf9K7CnNuqvy++NGAwAAAKx3E3nLI2CDIKUUDu6+h58nf3ioB7km/uOqqKlfz/z7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKsGjbRaDv7L077S2BT897mtHoqi2f2Ar9WxI+o54J18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
</session>
<digest>K+FsfKA3SyBSm9XFPuafUzAYfZQdqaXrwJrcq9s8rxE=</digest>
</launchSecurity>
<qemu:commandline>
<qemu:arg value="-drive"/>
<qemu:arg value="if=pflash,format=raw,unit=0,file=/tmp/OVMF_CODE.fd,readonly"/>
<qemu:arg value="-nographic"/>
<qemu:arg value="-monitor"/>
<qemu:arg value="pty"/>
<qemu:arg value="-serial"/>
<qemu:arg value="file:/tmp/debug_csv_launch.txt"/>
</qemu:commandline>
</domain>