我被好心地引导到这里,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
...这正是我在这里写的。