我有一个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
。
然后,例如smartctl -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
答案 0 :(得分:2)
sudo chmod o-x /usr/sbin/smartctl && sudo chown :admin /usr/sbin/smartctl
sudo chmod u+s /usr/sbin/smartctl
允许任何运行此命令的人 - 它将以root权限运行。我认为这应该在安装脚本中运行原因命令smartctl
没有root权限就没用,应该只由admin group运行
答案 1 :(得分: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权限还是什么?