我试图了解虚拟机的写入是如何发生的。看起来在复制它进行备份时运行它并没有被阻止。该副本是否包含任何修改的文件(例如启动日志)?或者它只是像 Windows 上那样从“卷影副本”进行复制?
可以问相反的问题,例如,如果我在虚拟机打开时开始复制,会发生什么。我猜机制是相似的。如果在复制过程中进行更改,是否会更改复制的文件?我目前的猜测是,只有在尚未复制的文件发生更改时才会发生。我已经测试了以这种方式复制的虚拟机,它没有明显的损坏,但我可以想象,如果一个文件被更改,而该文件依赖于已复制的另一个文件进行不同的操作,那么它可能会破坏东西。
因此,必然的问题是,是否有诸如此类的文件在虚拟机运行期间发生更改但未被主动使用?我可能会认为运行 apt Upgrade 是一个坏主意,但我想知道当虚拟机只是打开并空闲运行时,我是否可以在几乎没有风险的情况下进行备份。
我正在使用 virt-manager,但我猜答案更多地取决于图像文件类型 qcow2 还是 raw,而不是 VM 主机软件。我还想知道在这方面 qcow2 相对于 raw 图像是否有优势或劣势。
答案1
您将得到不一致的文件系统状态,但有一个使用 QCOW2 磁盘映像的解决方案。qemu-ga
如果您想在第一步中修剪磁盘(通常是预先安装的),请在来宾操作系统中运行 QEMU Guest Agent ( ) 服务。
您可以从修剪来宾磁盘开始(可选)。
virsh domfstrim $vmname
备份期间为磁盘写入创建临时快照。
virsh snapshot-create-as $vmname --no-metadata $snapname --disk-only --quiesce --atomic
您可能也想使用
--diskspec
。看man virsh
。复制原始 QCOW2 磁盘映像进行备份(写入将写入临时磁盘映像 $snapname)。
备份完成后提交临时磁盘映像。
virsh blockcommit $vmname vda --wait --active --pivot --delete
或者,如果
--delete
仍未实现并且临时磁盘映像仍然存在。virsh blockcommit $vmname vda --wait --active --pivot rm /var/lib/libvirt/images/<diskimage>.$snapname
根据存储类型替换
vda
为。sda