ed29
(Ed29)
2025 年6 月 15 日 11:36
1
编译zfs会报错:
configure: error:
*** The __copy_from_user_inatomic()
Linux kernel function is
*** incompatible with the CDDL license and will prevent the module
*** linking stage from succeeding. OpenZFS cannot be compiled.
dnf 找不到 dkms zfs 包
有什么安装方法吗
openeuler2403
ed29
(Ed29)
2025 年6 月 15 日 12:32
2
摸索解决了,思路是修改 config/kernel-copy-from-user-inatomic.m4的 AC_MSG_ERROR改为 AC_MSG_WARN,报错改为警告信息。
还遇到一个问题就是 内核版本不匹配 :ZFS 模块是针对旧内核(6.6.0-95...
)编译的,但你的系统已经升级到 6.6.0-96...
,导致 modprobe
找不到模块。
解决简略步骤:
git clone GitHub - openzfs/zfs: OpenZFS on Linux and FreeBSD
方法:修改 .m4
文件,跳过 GPL 检查(推荐)
直接修改 config/kernel-copy-from-user-inatomic.m4
,使其不报错,而是静默跳过并使用 copy_from_user()
替代。
修改步骤:
打开 kernel-copy-from-user-inatomic.m4
:
nano config/kernel-copy-from-user-inatomic.m4
* **找到报错部分**(`AC_MSG_ERROR`),修改为警告并跳过:
* ```
AC_DEFUN([ZFS_AC_KERNEL___COPY_FROM_USER_INATOMIC], [
AC_MSG_CHECKING([whether __copy_from_user_inatomic is available])
ZFS_LINUX_TEST_RESULT([__copy_from_user_inatomic_license], [
AC_MSG_RESULT(yes)
], [
AC_MSG_RESULT(no)
AC_MSG_WARN([
*** Skipping `__copy_from_user_inatomic()` due to GPL license conflict.
*** Using `copy_from_user()` as fallback (may impact performance).
])
AC_DEFINE([HAVE_COPY_FROM_USER_INATOMIC], [0], [GPL-only, disabled])
])
])
保存文件 ,然后重新生成 configure
:
./autogen.sh && ./configure
编译:
make
安装:
make install
加载:
modprobe zfs
问题2:内核版本不匹配
modprobe zfs
modprobe: FATAL: Module zfs not found in directory /lib/modules/6.6.0-96.0.0.89.oe2403.x86_64
方法 :重启进入旧内核(临时方案)
查看所有可用内核:
sudo grubby --info=ALL | grep -E “kernel|index”
* 选择旧内核(`6.6.0-95...`)启动:
* ```
sudo grubby --set-default-index=1 # 假设旧内核是 index=1
sudo reboot
uname -r
* 再次尝试加载 ZFS:
sudo modprobe zfs