qemu使用copy-on-write(COW)磁盘

Posted bingzhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qemu使用copy-on-write(COW)磁盘相关的知识,希望对你有一定的参考价值。

写时复制(copy-on-write,缩写COW)技术不会对原始的镜像文件做更改,变化的部分写在另外的镜像文件中,这种特性在qemu中只有QCOW格式支持,多个 COW 文件可以指向同一映像同时测试多个配置, 而不会危及基本系统。

下面以windows2003为例介绍使用过程,首先安装windows2003,然后制作COW镜像,这样用一个基本的windows2003系统,可以用户安装不同的应用环境,避免重复安装操作系统。

环境

宿主机:windows 10 pro
qemu版本:3.1
客户机:windows2003

 第一步:创建qcow2磁盘,作为系统盘

qemu-img.exe create -f qcow2 win2003base.qcow2 40G

 创建一个 40G的qcow2文件作为系统磁盘,将来是COW的基础镜像。

第二步:安装操作系统

qemu-system-x86_64.exe -L . -m 1024 -machine accel=hax,usb=on -device usb-tablet -cdrom .\Win2003entsp2.iso -hda .\win2003base.qcow2 -boot order=dc,menu=on

 临时增加win.img 安装virtio驱动(安装virtio不是必须的,只是为了获得更好的性能)

c:qemu-system-x86_64.exe -L . -m 1024 -machine accel=hax,usb=on -device usb-tablet -hda .\win2003base.qcow2 -boot order=dc,menu=on -drive file=win.img,format=qcow2,if=virtio -cdrom virtio-win-0.1.141.iso

 将系统盘改为virtio

qemu-system-x86_64.exe -L . -m 1024 -machine accel=hax,usb=on -device usb-tablet -boot order=dc,menu=on -drive file=win2003base.qcow2,format=qcow2,if=virtio

 第三步:创建一个引用镜像win2003_viclient.qcow2

qemu-img create -f qcow2 -b win2003base.qcow2 win2003_viclient.qcow2

 -b参数是制定backing_file,即基础镜像或原始镜像。win2003_viclient.qcow2,只有193kb,将win2003base.qcow2修改为只读文件,确保不会被修改。

第四步:将win2003_viclient.qcow2改为系统盘,引导系统,在其中安装vmware-vilient-4.1,系统只会修改COW镜像文件,运行时要确保基础镜像存在

qemu-system-x86_64.exe -L . -m 1024 -machine accel=hax,usb=on -device usb-tablet -boot order=dc,menu=on -drive file=win2003_viclient.qcow2,format=qcow2,if=virtio

 其他命令:
查看COW镜像信息

qemu-img info --backing-chain win2003_viclient.qcow2

 重新指定基础镜像

qemu-img rebase -b another.qcow2 win2003_viclient.qcow2

 合并镜像,将cow合并到基础镜像(合并前可以先复制基础镜像rebase之后再合并)

qemu-img commit win2003_viclient.qcow2

 参考文档:

https://www.unixmen.com/qemu-kvm-using-copy-write-mode/

以上是关于qemu使用copy-on-write(COW)磁盘的主要内容,如果未能解决你的问题,请参考以下文章

写时拷贝COW(copy-on-write)

谈谈Copy-on-Write容器

Java:Copy-On-Write容器

并发-Java中的Copy-On-Write容器

Linux写时拷贝技术(copy-on-write)

5. Lab: Copy-on-Write Fork for xv6