smart-ctl包装器(smartmontools)

pySMART的Python项目详细描述


版权所有(c)2015 Marc Herndon

pysmart是一个简单的python包装器,用于 smartmontools。它正式兼容Linux、Windows和FreeBSD, 只要smartctl在系统路径上。行使管理权 强烈建议使用,因为smartctl无法准确检测所有设备类型 或者在没有这些权限的情况下解析所有智能信息。

仅使用设备名(即/dev/sda,pd0),包将创建 Device对象,填充了与此相关的所有信息 装置。然后可以使用文档化的api来查询这个对象 信息、启动自检和执行其他功能。

用法

使用pysmart的最常见方法是创建 要使用的物理存储设备,如图所示:

>>> from pySMART import Device
>>> sda = Device('/dev/sda')
>>> sda
<SATA device on /dev/sda mod:WDC WD5000AAKS-60Z1A0 sn:WD-WCAWFxxxxxxx>

Device类成员可以直接访问,并且有许多helper方法 提供以批量检索信息。下面是一些示例:

>>> sda.assessment  # Query the SMART self-assessment
'PASS'
>>> sda.attributes[9]  # Query a single SMART attribute
<SMART Attribute 'Power_On_Hours' 068/000 raw:23644>
>>> sda.all_attributes()  # Print the entire SMART attribute table
ID# ATTRIBUTE_NAME          CUR WST THR TYPE     UPDATED WHEN_FAIL    RAW
  1 Raw_Read_Error_Rate     200 200 051 Pre-fail Always  -           0
  3 Spin_Up_Time            141 140 021 Pre-fail Always  -           3908
  4 Start_Stop_Count        098 098 000 Old_age  Always  -           2690
  5 Reallocated_Sector_Ct   200 200 140 Pre-fail Always  -           0
    ... # Edited for brevity
199 UDMA_CRC_Error_Count    200 200 000 Old_age  Always  -           0
200 Multi_Zone_Error_Rate   200 200 000 Old_age  Offline -           0
>>> sda.tests[0]  # Query the most recent self-test result
<SMART Self-test [Short offline|Completed without error] hrs:23734 LBA:->
>>> sda.all_selftests()  # Print the entire self-test log
ID Test_Description Status                        Left Hours  1st_Error@LBA
 1 Short offline    Completed without error       00%  23734  -
 2 Short offline    Completed without error       00%  23734  -
   ... # Edited for brevity
 7 Short offline    Completed without error       00%  23726  -
 8 Short offline    Completed without error       00%  1      -

或者,包提供一个DeviceList类。当实例化时, 这将自动检测所有本地存储设备并创建一个包含 每个检测到的存储设备有一个Device对象:

>>> from pySMART import DeviceList
>>> devlist = DeviceList()
>>> devlist
<DeviceList contents:
<SAT device on /dev/sdb mod:WDC WD20EADS-00R6B0 sn:WD-WCAVYxxxxxxx>
<SAT device on /dev/sdc mod:WDC WD20EADS-00S2B0 sn:WD-WCAVYxxxxxxx>
<CSMI device on /dev/csmi0,0 mod:WDC WD5000AAKS-60Z1A0 sn:WD-WCAWFxxxxxxx>
>
>>> devlist.devices[0].attributes[5]  # Access Device data as above
<SMART Attribute 'Reallocated_Sector_Ct' 173/140 raw:214>

使用pysmart包装器,可以快速开发python应用程序 SmartMontools强大功能的优势。

安装

pySMART在pypi上可用,可通过pip

安装
python -m pip install pySMART

唯一的外部依赖项是smartmontools的smartctl组件 包裹。这应该预先安装在大多数linux发行版中,或者 可以通过您的包管理器获得。可能是以下情况之一:

apt-get install smartmontools
    or
yum install smartmontools

在Windows PC上,必须下载并安装SmartMontools。最新的 版本可以从项目的主页http://www.smartmontools.org/获得。

注意,在windows上安装smartmontools之后,包含 smartctl.exe必须添加到系统路径(如果尚未添加)。

文档

pySMART的api文档是使用pdoc生成的,可以是 在包存档中的/docs文件夹中找到。

致谢

我要感谢SmartMontools背后的整个团队, 维护这么好的产品。

我要特别感谢christian franke,他维护了windows端口 软件的。几年来,我编写的windows批处理文件 依靠smartctl.exe自动评估和测试 存储设备。如果没有他的工作,我的工作将会 更悲惨。:)

此外,我还要感谢ixsystems,inc.这个团队 FreeNAS和Truenas产品。几年前那个队找我 对Pysmart感兴趣,尽管我和公司没有其他关系。在 他们的请求我做了一个简单的更改,允许pysmart在freebsd上运行 将许可证从gpl更改为lgpl,以允许他们在我的工作和 把它融入他们的产品中。他们开始在github上托管代码, 在接下来的几年里,他们把这个项目推向了一个新的高度。 由于他们的工作,代码现在与python 3兼容,支持nvme硬件 还有其他一些改进和错误修复。

此版本1.0只是上的代码的pypi的下载和重新打包。 Freenas Github,于2019年8月9日在https://github.com/freenas/py-SMART找到。 这几乎肯定是pypi上pysmart的最后一个版本,因为我和 ixsystems团队已经在这个项目上工作了一年多。

关于许可的最后说明

应几家寻求在其产品中使用此代码的公司的要求, 许可证已从gpl更改为稍微更为允许的lgpl。 这应该可以让你以李的身份打电话给皮斯马特使用它就像在你的 拥有自己的项目,不用担心“GPL污染”。如果你在读这个 如果您认为许可证的限制性太强,请联系我。我非常 愿意在更宽松的许可下私下提供代码, 包括一些公司或商业用途。我只想让你打个招呼 首先,告诉我一些关于你的项目以及Pysmart如何融入其中。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用“Wed,01 Jul 2015 17:32:41 EDT”解析字符串   java Storm apache升级(1.0.0到2.0.0)   java类驻留在不同的目录中,而不是包指定的目录。为什么?   将Java中的图像缩放到非常小的维度   java如何通过子文档从自定义方面访问ElasticSearch parentdoc字段   java如何在RationalSoftwareArchitect中使用findbugs?   Java中的事件提升处理   java值被添加到arrayList的所有索引中,而不是在“”时添加到最后一个索引中。正在使用arraylist的add()方法   JFrame中的java JPanel派生类   java如何用循环和异步方法模拟类   java Android阻止可绘制背景超出视图范围   为客户排序Java阵列   java Apache poi如何将工作表设置为枚举位置值属性?   java Rhino在使用自定义类参数调用javascript函数时出错   java格式化日期从年月日到年月日   spring如何修复java。lang.illegalargumentexception在此特定场景中是否尝试创建具有null实体的合并事件?   java如何创建更好的对象