问题现象
在备份控制台中备份活动显示错误:
中文日志:
未为在此系统中运行的内核 4.18.0-305.10.2.2.lve.el7h.x86_64 加载 SnapAPI 内核模块。安装此内核版本的模块,然后重试备份。
英文日志:
The SnapAPI kernel module is not loaded for the kernel 4.18.0-305.10.2.2.lve.el7h.x86_64 that is running in this system. Install the module for this kernel version, and then retry the backup.
受影响的环境
CloudLinux 7 系列(最典型的是使用所谓的“混合内核”的 CloudLinux 版本 7.9 (Boris Yegorov)。
问题原因
CloudLinux 中的错误。DKMS 版本“dkms-2.8.4-1.el7.noarch”,目前作为 CloudLinux 7.9 的一部分提供开箱即用,不提取所需的 gcc + kernel-devel 模块版本,它们是需要为混合内核构建内核模块,例如 snapapi。
例如混合内核需要 GCC 版本 8.2.1,而 CloudLinux 7 目前只提供 GCC 版本 4.8.5。
解决方法
- 通过以下方式验证 CloudLinux 主机上使用的 DKMS 版本:
rpm -qa | grep dkms
- 如果它是“ dkms-2.8.4-1.el7.noarch ”或其他的,不同于“ dkms-2.8.4-1.el7h.noarch ”,然后通过"rpm -e [dkms version]"卸载当前DKMS版本,例如"rpm -e dkms-2.8.4-1.el7.noarch"
- 通过从https://blog.cloudlinux.com/beta-dkms-package-for-cloudlinux-os-7-hybrid-updated-1 将DKMS 版本更新为"dkms-2.8.4-1.el7h.noarch"
- 再次运行 Acronis Agent for Linux 安装程序。
未来永久解决方案
CloudLinux 团队将在混合内核的主流版本中更新 DKMS 版本,这已与他们的开发团队确认。
更多信息
什么是混合内核?
在 CloudLinux 6 和 CloudLinux 7 上,用户可以从 2 个版本的内核(以及 CloudLinux 的一些其他组件)中进行选择——普通版和混合版。
混合版本从下一个版本安装内核(加上一些用户空间组件)(即 CloudLinux 6 混合版部分现代化,具有 CloudLinux 7 的功能,而 CloudLinux 7 混合版部分现代化,具有 CloudLinux8 的功能)。
在 CloudLinux 7 中使用所谓的混合内核观察到所描述的问题,它本质上是从 CloudLinux 8 系列向后移植到 CloudLinux 7 系列的 4.18 系列内核,特别是子版本级别等于或高于 -305 的内核(例如内核 4.18.0-305.lve.el7h.x86_64 )。
为什么使用混合内核时,代理的安装程序无法正确构建snapapi?
原因是这些现代内核是由 CloudLinux 的开发人员使用 GCC 8 系列构建的,但 CloudLinux 7.9 存储库不提供匹配的 GCC 8.x 编译器版本(即使在“混合”过程之后多次执行 yum 更新) )。这会导致编译错误 - 无法构建备份代理使用的 snapapi26 和 snumbd 模块。
CL7.9 提供的是:gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) (或类似版本)。
混合 4.18.0-305 内核是用什么构建的:gcc 版本 8.2.1 20180905(Red Hat 8.2.1-3)(GCC) (或类似版本)。
(你可以通过执行 $ cat /proc/version 找到这个:输出将是 Linux version 4.18.0-305.lve.el7h.x86_64 (mockbuild@imagebuilder.corp.cloudlinux.com) (gcc version 8.2.1 20180905 (Red Hat 8.2.1-3) (GCC)) #1 SMP Thu Jun 17 06:36:17 EDT 2021 )。
所以安装的 gcc 是 4.8.5 vs 8.2.1,内核需要为它构建模块。