zswap 在启动时永远找不到所需的模块

zswap 在启动时永远找不到所需的模块

我使用 Ubuntu 16.04 或 18.04 时没有遇到任何问题,但最近我跨接了 20.04 VM,无法让它在启动时设置正确的 Zswap 参数。似乎它找不到所需的模块。

$ dmesg | egrep -i 'zs|zr|zc'
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-1009-gcp root=PARTUUID=db157b59-599b-4c37-91f7-175253949aca ro console=ttyS0 transparent_hugepage=always zswap.compressor=lz4hc zswap.enabled=1 zswap.max_pool_percent=50 zswap.zpool=z3fold panic=-1
[    0.200636] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-1009-gcp root=PARTUUID=db157b59-599b-4c37-91f7-175253949aca ro console=ttyS0 transparent_hugepage=always zswap.compressor=lz4hc zswap.enabled=1 zswap.max_pool_percent=50 zswap.zpool=z3fold panic=-1
[    2.062108] zswap: compressor lz4hc not available, using default lzo
[    2.064354] zswap: zpool z3fold not available, using default zbud
[    2.066454] zswap: loaded using pool lzo/zbud

不过,我已经按照一贯的方式设置了相关的配置文件。

$ cat /etc/initramfs-tools/modules 
z3fold
lz4hc
lz4hc_compress

这似乎是在构建 initrd 时发现的。

$ sudo update-initramfs -vu
Available versions: 5.4.0-1009-gcp
Keeping /boot/initrd.img-5.4.0-1009-gcp.dpkg-bak
update-initramfs: Generating /boot/initrd.img-5.4.0-1009-gcp
Adding module /lib/modules/5.4.0-1009-gcp/kernel/mm/z3fold.ko
Adding module /lib/modules/5.4.0-1009-gcp/kernel/lib/lz4/lz4hc_compress.ko
Adding module /lib/modules/5.4.0-1009-gcp/kernel/crypto/lz4hc.ko
[...]

lsinitrd还显示模块已被复制到 initrd 中。

$ lsinitrd /boot/initrd.img-5.4.0-1009-gcp | egrep 'lz4|z3'
-rw-r--r--   1 root     root         8201 Apr 10 18:35 usr/lib/modules/5.4.0-1009-gcp/kernel/crypto/lz4hc.ko
drwxr-xr-x   2 root     root            0 May  3 11:08 usr/lib/modules/5.4.0-1009-gcp/kernel/lib/lz4
-rw-r--r--   1 root     root        17017 Apr 10 18:35 usr/lib/modules/5.4.0-1009-gcp/kernel/lib/lz4/lz4hc_compress.ko
-rw-r--r--   1 root     root        31673 Apr 10 18:35 usr/lib/modules/5.4.0-1009-gcp/kernel/mm/z3fold.ko

启动时lsmod确认模块尚未加载,但手动启用它们没有问题。

# echo lz4hc >/sys/module/zswap/parameters/compressor
# echo z3fold >/sys/module/zswap/parameters/zpool
$ lsmod | egrep 'lz4|z3'
z3fold                 28672  1
lz4hc                  16384  18
lz4hc_compress         24576  1 lz4hc
/sys/kernel/debug/zswap/pool_limit_hit:0
/sys/module/zswap/parameters/same_filled_pages_enabled:Y
/sys/module/zswap/parameters/enabled:Y
/sys/module/zswap/parameters/max_pool_percent:50
/sys/module/zswap/parameters/compressor:lz4hc
/sys/module/zswap/parameters/zpool:z3fold

dmesg但是每次启动似乎都会出现同样的问题。我发现当我更改这里的参数时什么都没有打印出来,这有点奇怪,但我不知道这是否意味着什么。

我可以编写一个脚本来执行此操作但这显然不是正确的过程。

还有人遇到过这种情况吗?也许是内核发生了变化,导致找不到模块?

相关内容