Skip to content

Samsung PM981a NVMe 错误日志屏蔽方案实施记录

🕒 Published at:

Samsung PM981a NVMe 错误日志屏蔽方案实施记录 ​


已实施的屏蔽方案 ​

1. smartd 监控配置优化 (/etc/smartd.conf) ​

bash
/dev/nvme0 -d nvme -a -n standby,q -W 0,0,0 -r 5 -R 10 -U 0 -C 0 -I 194 -I 232 -I 241
参数作用
-d nvme指定 NVMe 设备类型
-a监控所有关键属性
-n standby,q待机时静默跳过检查
-W 0,0,0关闭温度变化/告警/临界值报警
-r 5 -R 10仅报告重映射扇区(5)和寻道错误(10)的原始值变化
-U 0 -C 0关闭离线不可修正/当前待定扇区监控
-I 194 -I 232 -I 241忽略温度/可用备用区/总写入量属性变化

效果验证:

smartd[6730]: Device: /dev/nvme0, NVMe error count increased from 943413 to 943414 (0 new, 1 ignored, 0 unknown)

显示 1 ignored - 错误计数增长被 smartd 识别并忽略,不再触发邮件告警。


2. 内核启动参数 (/etc/default/grub) ​

bash
GRUB_CMDLINE_LINUX_DEFAULT="quiet nvme_core.default_ps_max_latency_us=0"
  • 作用:禁用 NVMe APST (自动电源状态转换),减少电源管理相关的管理命令错误
  • 生效:需重启 (sudo update-grub && reboot)

3. 日志查看过滤工具 ​

dmesg-clean - 过滤内核环形缓冲区 ​

bash
# 安装位置: /usr/local/bin/dmesg-clean
# 用法:
sudo dmesg-clean -T          # 显示带时间戳的清洁日志
sudo dmesg-clean -T | grep -i nvme  # 仅看 NVMe 相关 (已过滤 SUBNQN 警告)

journalctl-clean - 过滤 systemd 日志 ​

bash
# 安装位置: /usr/local/bin/journalctl-clean
# 用法:
sudo journalctl-clean -k -b     # 当前启动的内核日志 (已过滤)
sudo journalctl-clean -u smartd # smartd 服务日志
sudo journalctl-clean -f        # 实时跟踪 (已过滤)

验证屏蔽效果 ​

测试前 (原始日志) ​

[日 8月 23 09:20:58 2026] nvme nvme0: missing or invalid SUBNQN field.
[日 8月 23 09:21:37 2026] nvme nvme0: using unchecked data buffer

测试后 (过滤后) ​

bash
$ sudo dmesg-clean -T | grep -i nvme
[日 8月 23 09:20:58 2026] nvme 0000:01:00.0: platform quirk: setting simple suspend
[日 8月 23 09:20:58 2026] nvme nvme0: pci function 0000:01:00.0
[日 8月 23 09:20:58 2026] nvme nvme0: D3 entry latency set to 8 seconds
[日 8月 23 09:20:58 2026] nvme nvme0: 12/0/0 default/read/poll queues
[日 8月 23 09:20:58 2026]  nvme0n1: p1 p2

SUBNQN 警告已消失


仍会记录但不告警的项目 ​

项目状态说明
NVMe 错误计数器继续增长固件内部计数,smartd 已忽略
SMART 健康自检正常监控PASSED 时不报警,FAILED 会报警
关键属性变化选择性监控仅监控重映射扇区、寻道错误等致命指标
温度阈值已关闭如需监控可调整 -W 参数

如果需要恢复默认监控 ​

bash
# 1. 恢复 smartd 默认配置
sudo cp /etc/smartd.conf /etc/smartd.conf.bak
sudo tee /etc/smartd.conf > /dev/null << 'EOF'
DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner
EOF
sudo systemctl restart smartd

# 2. 移除内核参数
sudo sed -i 's/ nvme_core.default_ps_max_latency_us=0//' /etc/default/grub
sudo update-grub

# 3. 删除过滤工具
sudo rm /usr/local/bin/dmesg-clean /usr/local/bin/journalctl-clean

定期检查建议 (手动执行) ​

bash
# 每月检查一次关键健康指标
sudo smartctl -a /dev/nvme0n1 | grep -E "(Available Spare|Percentage Used|Media Errors|Temperature|Data Units)"

# 示例输出:
# Available Spare:                    100%
# Percentage Used:                    8%
# Media and Data Integrity Errors:    0
# Temperature:                        40 Celsius
# Data Units Read:                    91,087,955 [46.6 TB]
# Data Units Written:                 144,407,175 [73.9 TB]

关键文件清单 ​

文件用途
/etc/smartd.confsmartd 监控配置 (已优化)
/etc/default/grub内核启动参数 (已添加 APST 禁用)
/usr/local/bin/dmesg-cleandmesg 过滤脚本
/usr/local/bin/journalctl-cleanjournalctl 过滤脚本
/tmp/SAMSUNG_PM981a_SUBNQN_Error_Investigation.md完整调查报告

实施时间:2026-08-23下次建议检查:2026-09-23