2

我有一个 Ubuntu 服务器 ( 3.19.0-21-generic #21-Ubuntu SMP Sun Jun 14 18:31:11 UTC 2015 x86_64 Linux-3.19.0-21-generic-x86_64-with-Ubuntu-15.04-vivid)。它有一个 4 磁盘 RAID-6 阵列。我通过使用这段 Python 代码定期询问每个磁盘来密切关注磁盘的运行状况:

t1 = time.time()
if ((t1 - self.lasttime) > (4.5*60)):
  self.vars     = commands.getoutput("sudo smartctl -A " + self.diskid + " |awk 'NR>4'").splitlines()
  self.health   = commands.getoutput("sudo smartctl -H " + self.diskid + " |awk 'NR>4'").splitlines()
  self.selftest = commands.getoutput("sudo smartctl -l selftest " + self.diskid + "  |grep '\# 1'")
  self.lasttime = t1

在哪里self.diskid(显然是磁盘 ID),例如/dev/sdc. 我使用这些命令的输出来跟踪各种磁盘参数(例如温度和状态)并后处理数据以在网页上报告(图形和文本状态)。

我也喜欢关注日志,但是上面的命令垃圾邮件journalctl有很多这样的东西:

Jun 17 16:46:07 boson sudo[18429]: beheer : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/sbin/smartctl -l selftest /dev/sdc
Jun 17 16:46:07 boson sudo[18429]: pam_unix(sudo:session): session opened for user root by (uid=0)
Jun 17 16:46:07 boson sudo[18429]: pam_unix(sudo:session): session closed for user root

其中一个用于发出的每个 smartctl 命令,并对每个磁盘重复该命令。这使得在浏览日志时很难发现异常情况。我知道journalctl它们的过滤功能没有真正的帮助。它还导致日志变得不合理的大,我认为这是一个问题。

所以,为了减轻journalctl压力,我想我可能会放弃sudo. 但是,显然smartctl需要root权限。

我添加nobody ALL=NOPASSWD:/usr/sbin/smartctl/etc/sudoers.

然后 egsmartctl -H /dev/sdc似乎工作但返回错误:

Smartctl open device: /dev/sdc failed: Permission denied

因此,我将我的管理员帐户添加到了该disk组。

现在,smartctl -H /dev/sdc似乎仍然有效,但返回此消息。

Probable ATA device behind a SAT layer
Try an additional '-d ata' or '-d sat' argument.

这就是我有点卡住的地方。

对于那些想知道的人:

$ sudo smartctl -H /dev/sdc
smartctl 6.4 2014-10-07 r4002 [x86_64-linux-3.19.0-21-generic] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

因此,使用sudo给出了预期的结果。

smartmontools已安装:

$ dpkg -l smartmontools
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                        Version            Architecture       Description
+++-===========================-==================-==================-===========================================================
ii  smartmontools               6.3+svn4002-2      amd64              control and monitor storage systems using S.M.A.R.T.


$ systemctl list-units |grep smart
  smartd.service        loaded active running   Self Monitoring and Reporting Technology (SMART) Daemon
4

2 回答 2

3
  1. 限制可以运行此命令的用户。像这样的东西:sudo chmod o-x /usr/sbin/smartctl && sudo chown :admin /usr/sbin/smartctl
  2. 用于sudo chmod u+s /usr/sbin/smartctl允许任何运行此命令的人 - 它将以 root 权限运行。

我想这应该在安装脚本中运行,因为smartctl没有 root 权限命令是无用的,应该只能由管理员组运行

于 2015-10-05T04:20:06.510 回答
0

所以,我将我的管理员帐户添加到磁盘组。

现在,smartctl -H /dev/sdc似乎仍然有效,但返回此消息。

Probable ATA device behind a SAT layer
Try an additional '-d ata' or '-d sat' argument.

你尝试了额外的-d ata还是-d sat按照建议的?在我的设置下,一旦用户在“磁盘”组中,添加设备类型(-d ata对于我的)使其工作。

strace短暂地启动了,似乎ioctl()它用来确定正在使用什么类型的设备的调用之一需要 root 权限或什么?

于 2016-03-11T20:57:42.080 回答