dmesg是诊断硬件异常的唯一入口,需用sudo dmesg -t | grep -i "error|fail|warn|panic|ecc"快速定位;journalctl用于交叉验证服务级报错;/var/log/下日志辅助追溯上下文;edac-util实时监控内存ecc错误。

您需要在银河麒麟系统中快速定位硬件异常(如内存ECC纠错、显卡驱动崩溃、USB设备失联、磁盘I/O错误),但不确定该查哪个日志源、用什么命令过滤关键线索,避免因日志层级混淆导致误判故障点。
查 dmesg 内核环形缓冲区原始硬件报错
这一步直接读取内核启动后至今的硬件交互快照,不经过任何日志服务过滤,是诊断ACPI解析失败、PCIe链路中断、内存映射异常等底层问题的唯一入口。执行命令:sudo dmesg -T。若输出过长刷屏,立即加管道过滤:sudo dmesg -T | grep -i "error\|fail\|warn\|panic\|ecc"。注意:-T 参数将时间戳转为本地可读格式,否则默认是自系统启动以来的秒数,难以关联故障发生时刻。
仅显示错误与警告级别消息,排除大量调试噪音:sudo dmesg -l err,warn。这一步会自动跳过 info 和 debug 级别日志,聚焦真实硬件故障信号。
将当前内核日志导出保存供离线分析:sudo dmesg -T > /tmp/kernel_hardware_errors_$(date +%Y%m%d_%H%M).log。【必须加 -T,否则导出的时间戳无法用于时间轴比对】。
用 journalctl 查 systemd 记录的硬件相关服务级报错
systemd 会捕获并结构化记录所有由它管理的硬件支撑服务(如 udisks2、bluetooth、nvme、smartd)的启动失败、状态异常和错误代码,适合交叉验证 dmesg 中发现的硬件事件是否已触发上层服务响应。
方法一:查看最近1小时内所有与硬件相关的失败单元:sudo journalctl --since "1 hour ago" --priority=3 --no-pager | grep -A 2 -B 2 "udisks\|nvme\|smartd\|bluetooth\|pci"。
方法二:聚焦 NVMe 固态硬盘健康状态服务的日志:sudo journalctl -u smartd.service -p 3 --no-pager -n 50。-n 50 限制输出行数防刷屏;-p 3 表示只显示 error 及以上级别。
方法三:按关键词反向检索全部日志中的硬件错误码(如“0x00000004”“NVME_STATUS_DNR”):sudo journalctl --all | grep -i "0x[0-9a-f]\{4,\}\|nvme\|pcie\|acpi\|iommu"。【--all 强制显示二进制字段,避免关键错误码被截断】。
读取 /var/log/ 下专用于硬件诊断的文本日志
/var/log/ 目录中部分文件由 rsyslog 或专门守护进程生成,内容未经结构化但保留完整上下文,适合追溯历史硬件事件或比对多个错误的时间关联性。
第一步:检查磁盘健康监控日志(若 smartmontools 已安装并启用):sudo cat /var/log/smartd.log | tail -n 50。该文件记录 SMART 自检结果、温度越界、重分配扇区计数等关键指标。
第二步:提取内核模块加载失败记录(常见于国产显卡驱动如 i915、amdgpu、kylin-gpu):sudo grep "modprobe\|insmod\|failed to load" /var/log/kern.log。
第三步:查看 USB 设备热插拔异常(如设备突然失联、枚举失败):sudo grep -i "usb.*reset\|usb.*port.*disabled\|usb.*device.*not accepting" /var/log/syslog。
第四步:分页查看大容量 syslog 并高亮所有硬件关键词:sudo less /var/log/syslog,然后输入 /usb\|nvme\|pci\|acpi\|iommu 按回车搜索。按 n 跳转下一个匹配项,按 q 退出。
使用 edac-utils 读取内存控制器 ECC 错误实时统计
EDAC(Error Detection and Correction)子系统通过 sysfs 接口暴露内存纠错事件,该方法无需重启、响应即时,适用于所有支持 ECC 的服务器平台(含飞腾 FT-2000+/鲲鹏 920)。
执行命令安装工具:sudo apt install edac-utils。
运行状态查询:sudo edac-util --status。
若输出中 CE(Correctable Errors)计数持续增长,说明内存正在频繁纠正单比特错误——这通常是内存条老化或接触不良的早期征兆;若 UE(Uncorrectable Errors)大于 0,则必须立即停机更换对应插槽内存条,【UE 错误不可恢复,已导致数据损坏】。











