我正在尝试抑制系统日志中的以下警告:
Oct 13 04:43:33 Winston kernel: 3w-sas: scsi1: ERROR: (0x03:0x0101): Invalid command opcode:opcode=0x85.
Oct 13 04:43:33 Winston kernel: md: do_drive_cmd: disk0: ATA_OP e0 ioctl error: -22
Oct 13 04:43:33 Winston kernel: mdcmd (839855): spindown 1
Oct 13 04:43:33 Winston kernel: 3w-sas: scsi1: ERROR: (0x03:0x0101): Invalid command opcode:opcode=0x85.
Oct 13 04:43:33 Winston kernel: md: do_drive_cmd: disk1: ATA_OP e0 ioctl error: -22
Oct 13 04:43:34 Winston kernel: mdcmd (839856): spindown 0
Oct 13 04:43:34 Winston kernel: 3w-sas: scsi1: ERROR: (0x03:0x0101): Invalid command opcode:opcode=0x85.
Oct 13 04:43:34 Winston kernel: md: do_drive_cmd: disk0: ATA_OP e0 ioctl error: -22
Oct 13 04:43:34 Winston kernel: mdcmd (839857): spindown 1
据我了解serverfault 上的这篇文章,这些消息可以安全忽略。我的驱动器工作正常,只是我的 raid 控制器似乎无法处理操作系统尝试获取的特定命令。
我正在运行 Unraid (Slackware),所以我的系统日志由 写入rsyslog.d
。我编辑了以下文件以忽略特定消息,但没有成功:/etc/rsyslog.d/01-blocklist.conf
。
我尝试过的变化:
:msg,contains,"error: mdcmd, 2640: Invalid argument (22): write" ~
:msg,regex,"md: do_drive_cmd: disk\d ATA_OP e0 ioctl error: -22" ~
:msg,regex,"mdcmd (\d+): spindown \d" ~
:msg,contains,"3w-sas: scsi5: ERROR: (0x03:0x0101)" ~
:msg,contains,"Winston kernel: 3w-sas: scsi1: ERROR" ~
:msg,contains,"kernel: 3w-sas: scsi1: ERROR" ~
有人能帮助我找出我做错的地方吗,无论是使用命令contains
还是那些regex
?
提前致谢。
答案1
“Winston kernel:”字符串不是msg
属性的一部分,通常以“:”后的空格开头。
该regex
操作使用 Posix BRE(基本正则表达式),因此\d
不存在;请尝试[0-9]
。此外,+
不存在,您将需要*
。或者,如果支持,您可以使用扩展正则表达式操作:ereregex
;然后您将有+
,但您需要\(\)
文字括号。
此外,~
这是一种非常古老的弃用语法,所以除非您有一个非常古老的 rsyslog,否则您应该使用它stop
(尽管~
仍然可以工作)。
答案2
e0 命令是 STANDBY IMMEDIATE。我认为这是由电源管理发送的,目的是让驱动器在一段时间不活动后进入休眠状态。关闭它应该可以消除错误的原因,而不仅仅是掩盖日志记录。