问:无法使用 virsh 创建正在运行的 KVM 的“实时”快照

问:无法使用 virsh 创建正在运行的 KVM 的“实时”快照

我被好心地引导到这里,Stackoverflow 的 Serverfault 来提出我的问题。

我在 RHEL7 虚拟机管理程序上运行以下命令来创建正在运行的 kvm 的实时备份(磁盘映像),该 kvm 正在运行生产 docker 服务,我想要一个实时快照。

我读过的许多文档都引导我使用此命令来获取正在运行的 KVM 的实时快照:

# virsh snapshot-create-as \
    --domain undercloud-vm undercloud-vm-snapshot \
    --diskspec vda,file=/backup/images/undercloud-vm.qcow2 \
    --quiesce \
    --disk-only \
    --atomic    

错误:内部错误:无法执行 QEMU 代理命令“guest-fsfreeze-freeze”:无法打开 /var/lib/docker/overlay2:权限被拒绝

由于不想弄乱 KVM 的 /var/lib/docker/overlay2 目录权限,我只能在这里提出这个问题。如果有人遇到过这个问题,试图为恰好在内部运行 docker 的 KVM 创建实时快照。这里最重要的是 KVM 是生产环境,不能简单地暂停或冻结来创建快照,它必须继续运行并处理数据。

任何能帮我获取实时备份的指示都将不胜感激。

信息............

在 KVM 中:(运行:/usr/libexec/qemu-kvm...)

  • 操作系统:Red Hat Enterprise Linux Server 版本 7.5(Maipo)
  • 频道:org.qemu.guest_agent.0 已添加为虚拟硬件
  • YUM:yum 安装 qemu-guest-agent
  • 软件:Docker 版本 1.13.1,构建 6e3bb8e/1.13.1

虚拟机管理程序:

  • 硬件:PowerEdge FC630、Dell FX2s 36 CPU、128GB RAM
  • 操作系统:Red Hat Enterprise Linux Server 版本 7.6(Maipo)
  • 软件: qemu-img-rhev = 10:2.10.0-21.el7_5.4
  • qemu-kvm-(common-)rhev = 10:2.10.0-21.el7_5.4

答案1

我刚刚遇到了同样的问题。这是一个 selinux 问题:selinux(在客户机上)阻止 QEMU 客户机代理使目标文件系统静止。您可以看到如下问题摘要:

# ausearch -c qemu-ga --raw | audit2allow


#============= virt_qemu_ga_t ==============

allow virt_qemu_ga_t container_var_lib_t:dir { ioctl open read search };

allow virt_qemu_ga_t proc_net_t:file read;

您可以生成一个适当的本地安全模块,以允许 qemu-ga 正常运行,如下所示:

# ausearch -c qemu-ga --raw | audit2allow -M local
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i local.pp
# semodule -i local.pp

有了这个改变,我们就可以--quiesce在生成快照时使用该选项。


更新:经检查,该解决方案实际上出现在错误报告中包含的错误消息中:

1 月 16 日 10:59:49 localhost python:SELinux 阻止 /usr/bin/qemu-ga 搜索访问目录 /var/lib/docker。#012#012***** 插件 catchall(100. 置信度)建议 **************************#012#012如果您认为默认情况下应允许 qemu-ga 搜索访问 docker 目录。#012那么您应该将此报告为错误。#012您可以生成本地策略模块以允许此访问。#012请#012通过执行以下操作暂时允许此访问:#012# ausearch -c 'qemu-ga' --raw | audit2allow -M my-qemuga#012# semodule -i my-qemuga.pp#012

如果你查看错误的结尾,它会显示:

You can generate a local policy module to allow this access.
allow this access for now by executing:
# ausearch -c 'qemu-ga' --raw | audit2allow -M my-qemuga
# semodule -i my-qemuga.pp

...这正是我在这里写的。

相关内容