You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中捕获sudo zpool import产生的内核错误栈?

如何捕获zpool import触发的内核错误信息

你遇到的问题很典型——这类以BUG: unable to handle kernel paging request开头的内核级错误,根本不会通过zpool进程的标准输出/错误流(stdout/stderr)输出,这就是为什么你用sudo zpool import &> err_file抓不到它的原因。内核消息是由内核日志子系统直接处理的,默认会输出到系统控制台,同时也会被记录到内核缓冲区和系统日志文件中。

下面是几种可靠的捕获方法:

方法1:实时捕获内核消息

打开一个新的终端窗口,先运行以下命令来实时监控内核日志:

dmesg -w

或者针对特定发行版的日志文件(比如Ubuntu/Debian用/var/log/kern.log,RHEL/CentOS用/var/log/messages):

tail -f /var/log/kern.log

保持这个终端窗口打开,然后在另一个终端执行sudo zpool import触发错误。此时内核错误会实时出现在监控窗口中,你可以直接复制内容,或者将监控命令的输出重定向到文件:

dmesg -w > kernel_errors.txt

方法2:事后查看内核日志

如果已经触发了错误,直接查看内核缓冲区的内容即可:

dmesg

你可以过滤出和zpool相关的内容,缩小范围:

dmesg | grep -i zpool

或者精准定位那个BUG信息:

dmesg | grep "BUG: unable to handle kernel paging request"

把结果保存到文件的话,直接用重定向:

dmesg > err_file.txt

另外也可以查看系统持久化的内核日志文件,比如:

# Ubuntu/Debian
cat /var/log/kern.log | grep "BUG: unable to handle kernel paging request" > err_file.txt

# RHEL/CentOS
cat /var/log/messages | grep "BUG: unable to handle kernel paging request" > err_file.txt

为什么普通重定向无效?

简单来说,进程的stdout和stderr是用户空间的输出通道,只能捕获该进程在用户态产生的输出。而内核错误是内核态直接打印到系统控制台的,不属于任何用户进程的输出流,所以&>这类针对进程的重定向自然抓不到它。

内容的提问来源于stack exchange,提问作者Timmy O'Mahony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:14:25