1.参考代码
- 1.参考代码:https://github.com/jackeichen/pydiskcmd
- 2.参考代码:https://github.com/doug-gilbert/sg3_utils
- 3.参考代码:https://github.com/smartmontools/smartmontools
2.BMC
获取磁盘剩余寿命
目前市场上有博通raid
卡,博通hba
卡,microchip
的raid/hba
卡等。在BMC
端获取磁盘信息还是有差别的。
2.1 raid
卡获取sata ssd
剩余寿命的方法
对于brcm raid
卡,可以使用所谓的2种方式:SL_STP_PASSTHRU
与SL_SCSI_PASSTHRU
.
也就是说,对于sata ssd
,可以使用ata
指令获取smart
信息,对于sas ssd
,则需要使用scsi
指令获取数据。
如果是sata
盘,并且使用raid
卡,可以参考文档:d2161r5-ATAATAPI_Command_Set_-_3.pdf
中:
对于这种方式,microchip raid/hba
和brcm raid
卡获取sata ssd
,从测试结果上看均支持。但是对于brcm hba
卡来说,如果接了sata ssd
,这种发送ata
指令就不可行了。
2.2 brcm hba
卡获取sata
盘ssd
的剩余寿命
使用brcm hba
卡获取sata ssd
盘的剩余寿命,采取ata
指令行不通,是否有办法呢?在协议上其实早有定义,如文档:ATA Command Pass-Through.pdf
,SCSI2ATACommand.pdf
,spc5r19.pdf
等。
在spc5r19.pdf
中,可以看到内容:
根据上面2张图,找到文档:sbc4r15(SBC-4).pdf
,如下图:
定位:SAT-3
,找到文档:sat5r08.pdf
:
根据以上内容,代码上做好数据填充即可。
数据填充内容,可以参考:https://github.com/doug-gilbert/sg3_utils
中的代码:examples\sg_sat_smart_rd_data.c
- 举例
当前系统中接入一个HBA
卡,在OS
里面使用sg_raw
发送数据,内容如:
smart
信息怎么解析? 可以参考文档:8035R2_0.PDF
或者8055.PDF
或者SFF-8035i.pdf
。
如下截图,来自:8035R2_0.PDF
:
那么,有最大30
个attribute data
,每一个attribute
数据内容(12
个字节)又是怎么分布的? 可以参考下图:
事实上,看上图还是不能完全解释清楚每一个attribute
包含的数据内容是什么。那可以参考:https://github.com/smartmontools/smartmontools中的文件:smartmontools\atacmds.h
,有一个结构体:
/* ata_smart_attribute is the vendor specific in SFF-8035 spec */
#pragma pack(1)
struct ata_smart_attribute {unsigned char id;// meaning of flag bits: see MACROS just below// WARNING: MISALIGNED!unsigned short flags; unsigned char current;unsigned char worst;unsigned char raw[6];unsigned char reserv;
} ATTR_PACKED;
#pragma pack()
STATIC_ASSERT(sizeof(ata_smart_attribute) == 12);
至此,raid/hba
卡获取sata ssd
剩余寿命的办法基本上讲完了。
2.3 raid/hba
获取sas ssd
盘的剩余寿命的办法
因为sas
盘接口都是使用的scsi
指令,sas
盘的剩余寿命也不再与sata ssd
盘的信息存储格式相同,需要使用另外一种方法。
查看文档:spc5r19.pdf
,找到内容:
继续查找文档:sbc4r15(SBC-4).pdf
:
- 举例:
系统上接一张HBA
卡,并接上一张sas ssd
盘,如图:
先使用smartctl
看一下使用寿命情况:
然后,使用工具sg_raw
:
至此,sata ssd
与sas ssd
获取剩余寿命的方法均讲完。