https://www.qemu.org/docs/master/system/images.html
https://en.wikibooks.org/wiki/QEMU/Images
介绍
QEMU 支持多种image映像类型。 qemu原生支持的类型是 qcow2,它支持写入时复制、加密、压缩和 VM 快照。
QEMU 目前可以使用这些图像类型或格式:
·raw
(默认)原始磁盘映像格式。 这种格式的优点是简单且易于导出到所有其他仿真器。 如果您的文件系统支持holes(例如在 Linux 上的 ext2 或 ext3 或 Windows 上的 NTFS 中),那么只有写入的扇区会占用空间。 使用 qemu-img info 了解映像使用的实际大小或 ls -ls 在 Unix/Linux 上。
可以看到,占了一个block的大小,没有完全分配10GiB大小,当前文件系统是ext4。
·cloop
压缩的Loop格式,主要用于读取 Knoppix 和类似的 live CD 映像格式
·cow
写时复制格式,仅出于历史原因支持,不适用于 Windows 上的 QEMU
·qcow
旧的 QEMU 写时复制格式,由于历史原因支持并被 qcow2 取代
·qcow2
QEMU 的映像格式,最通用的格式。 使用它来拥有更小的映像(如果您的文件系统不支持holes,例如在 Windows 上,则很有用)、基于 zlib 的压缩和对多个 VM 快照的支持。
·vmdk
VMware 3 & 4 或 6 映像格式,用于与VMware交换映像。
·vdi
VirtualBox 1.1 兼容的映像格式,用于与 VirtualBox 交换映像。
·vhdx
Hyper-V 兼容映像格式,用于与 Hyper-V 2012 或更高版本交换映像。
·vpc
Hyper-V 传统映像格式,用于与 Virtual PC / Virtual Server / Hyper-V 2008 交换映像。
根据映像的格式,可以使用 -o 选项将不同的选项传递给 qemu-img create 和 qemu-img convert。
如raw只支持一种options:preallocation
预分配模式(允许值:off、falloc、full)。 falloc 模式通过调用 posix_fallocate() 为映像预分配空间。 full模式通过将数据写入底层存储来为映像预分配空间。 此数据可能为零,也可能不为零,具体取决于存储位置。
而qcow2支持很多options,下面列举几个
backing_file
base映像的文件名
backing_fmt
base镜像的镜像格式
在创建写时复制的映像时,这两个选项有用。
创建映像
安装guest OS最简单的方法是,创建一个空白光盘映像(blank disc image),如下:
qemu-img create -f qcow2 winxp.img 3G
使用qcow2格式,创建3G大小的空白映像winxp.img(还可以使用M作单位),用作虚拟机的硬盘。
注记:用 dd 或 fallocate 也可以创建一个 raw 镜像。
提示: 如果使用光盘,最好先将媒体转储到文件中,因为这既可以提高性能,又不需要您直接访问设备(也就是说,您可以将QEMU作为普通用户,而无需更改对媒体设备文件的访问权限)。例如,如果CD-ROM设备节点名为/dev/cdrom,则可以使用以下命令将其转储到文件中:
$ dd if=/dev/cdrom of=cd_image.iso
然后从一个bootable ISO images文件中启动,进行系统安装,文件系统等内容都安装到硬盘(即映像文件winxp.img)中,之后启动就只需要映像文件即可。
qemu-system-x86_64 -m 256 -hda winxp.img -cdrom winxpsp2.iso -boot d
-boot d指定从CD-ROM中启动,默认是从硬盘中启动,即winxp.img,-cdrom winxpsp2.iso指定使用文件作为CD-ROM镜像。
注记:Windows XP的安装过程中暂时不使用kqemu kernel module,也即kvm功能,因为会导致一些问题,但是安装成功可以使用kvm来加速。
安装完成后,执行如下命令从硬盘中启动即可。
qemu-system-x86_64 -m 256 -hda winxp.img -enable-kvm
注记:要从真正的 CD 或 DVD 设备启动,要 QEMU 在哪里可以找到它。 在 Linux 系统上,您通常可以使用逻辑设备名称,如 /dev/cdrom 或 /dev/dvd,或设备的物理名称,例如 /dev/sr0
qemu -m 256 -hda winxp.img -cdrom /dev/cdrom -boot d
如下从CD-ROM(iso文件)中启动系统
sudo qemu-system-x86_64 -m 2048 -enable-kvm ubuntu.img -cdrom ubuntu-18.04.4-desktop-amd64.iso -boot d
注意:如果只是try ubuntu,没有执行ubuntu系统的安装,则不会写数据进硬盘ubuntu.img,因此之后执行如下命令
sudo qemu-system-x86_64 -m 2048 -enable-kvm ubuntu.img
会报如下错误
使用qemu-img info ubuntu.img也可以看到,ubuntu.img一点修改都没有。
使用多个映像
QEMU 最多可以使用四个映像文件向guestOS提供多个虚拟驱动器。
注记:一次只有一个 QEMU 实例可以访问映像——共享并不意味着同时共享!
要在 QEMU 中使用其额外的映像,请在命令行中使用选项-hda、-hdb、-hdc、-hdd指定它们。
qemu -m 256 -hda winxp.img -hdb pagefile.img -hdc testdata.img -hdd tempfiles.img -enable-kvm
注意:QEMU 不能同时支持 -hdc 和 -cdrom,因为它们都代表第二个 IDE 通道上的第一个设备。
将映像复制到物理设备Copying an image to a physical device
可能需要将磁盘映像复制到物理设备。 一个场景是如果要构建一个集群,在 qemu 中准备好一切可能会更容易,然后将最终的磁盘映像写入所有硬盘驱动器。 当然,您的映像需要包含新系统正确启动所需的所有配置和驱动程序。
磁盘映像需要为raw格式。
$ qemu-img convert -O raw diskimage.qcow2 diskimage.raw
然后使用dd命令写入硬盘驱动器
# dd if=diskimage.raw of=/dev/sdX
或者,让 qemu-img 在转换时直接写入驱动器:
# qemu-img convert -O raw diskimage.qcow2 /dev/sdX
转换映像格式Converting image formats
qemu-img 程序可用于将映像从一种格式转换为另一种格式,或者为映像添加压缩或加密。 指定映像的源文件和目标文件,并从以下选项中进行选择:
-f fmt – 可选,指定输入文件的格式(QEMU通常可以检测到)
-O fmt – 指定输出文件的格式
-e - 在输出文件中使用加密(系统将提示您输入密码)
-c – 在输出文件中使用压缩(不能与加密一起使用)
-6 – 转换为 vmdk (VMware) 格式时,使其与 VMware 6 兼容
如下命令,将test.vmdk转换成qcow2格式的映像test.qcow2。
qemu-img convert -O qcow2 test.vmdk test.qcow2