有安装zfs的方法吗

编译zfs会报错:

configure: error:
*** __copy_from_user_inatomic() Linux内核函数
*** 与CDDL许可证不兼容,并将阻止模块
*** 链接阶段成功完成。无法编译OpenZFS。

dnf找不到dkms zfs包

有什么安装方法吗

openeuler2403

已解决,思路是将 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 https://github.com/openzfs/zfs

方法:修改 .m4 文件,跳过 GPL 检查(推荐)

直接修改 config/kernel-copy-from-user-inatomic.m4,使其不报错,而是静默跳过并使用 copy_from_user() 替代。

修改步骤:

  1. 打开 kernel-copy-from-user-inatomic.m4

    nano config/kernel-copy-from-user-inatomic.m4
    
  2. 找到报错部分(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])
        ])
    ])
    
  3. 保存文件,然后重新生成 configure

    ./autogen.sh && ./configure
    
  4. 编译:

    make
    
  5. 安装:

    make install
    
  6. 加载模块:

    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

方法:重启进入旧内核(临时方案)

  1. 查看所有可用内核:

    sudo grubby --info=ALL | grep -E "kernel|index"
    
  2. 选择旧内核(6.6.0-95...)启动:

    sudo grubby --set-default-index=1  # 假设旧内核是 index=1
    sudo reboot
    
  3. 启动后检查内核版本:

    uname -r
    
  4. 再次尝试加载 ZFS:

    sudo modprobe zfs