网上关于 SSD 寿命查看的教程资料虽然铺天盖地,但仔细翻阅后你会发现,绝大多数内容都是针对 Intel 硬盘的。对于使用 Crucial、OCZ 这类高性价比品牌 SSD 的用户来说,如果想通过 RAID 卡查看自家固态硬盘的剩余寿命,能找到的可靠教程寥寥无几。难道预算有限的用户就注定无法获取这些信息?其实并非如此。
经过实际摸索,真相是:所有需要绕过 RAID 卡读取 SSD 信息的操作,都离不开两个核心工具——MegaCli 和 smartctl。我目前使用的 RAID 卡型号为 LSI Logic / Symbios Logic MegaRAID SAS 1078 和 2108。下面将具体流程分步展开说明:首先通过 MegaCli 从 RAID 卡中获取硬盘的基本参数,然后利用 smartctl 读取详细的 SMART 数据。
使用 MegaCli 获取 RAID 卡下的硬盘信息
首先确保已经正确安装了 MegaCli 工具(CentOS 5 和 CentOS 6 有对应的版本,请注意区分)。然后执行以下命令:
/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL
输出内容虽然较长,但关键信息集中体现在几个字段中。例如:
Enclosure Device ID: 252
Slot Number: 7
Device Id: 28
Sequence Number: 2
Media Error Count: 0
Other Error Count: 1
Predictive Failure Count: 0
Last Predictive Failure Event Seq Number: 0
PD Type: SATA
Raw Size: 119.242 GB [0xee7c2b0 Sectors]
Non Coerced Size: 118.742 GB [0xed7c2b0 Sectors]
Coerced Size: 118.277 GB [0xec8e000 Sectors]
Firmware state: Online, Spun Up
SAS Address(0): 0x1e394d57aa996b80
Connected Port Number: 7(path0)
Inquiry Data: 0000000011070303A99EC300-CTFDDAC128MAG 0007
FDE Capable: Not Capable
FDE Enable: Disable
Secured: Unsecured
Locked: Unlocked
Needs EKM Attention: No
Foreign State: None
Device Speed: 6.0Gb/s
Link Speed: 1.5Gb/s
Media Type: Solid State Device
输出中每块硬盘都会重复类似的段落。重点关注两个地方:Media Type: Solid State Device 表示该盘为 SSD;Device Id: 28 这个数字后续会用到。另外 Firmware state: Online, Spun Up 表示硬盘状态正常——如果你需要做监控报警,直接监控这个字段即可。
还有一个细节值得注意:Inquiry Data 中包含了硬盘型号(例如上面显示的是 C300-CTFDDAC128MAG),方便确认硬盘的具体身份。
使用 smartctl 获取 SSD 的详细 SMART 信息
不同厂商、不同型号的 SSD,其 SMART 属性差异较大。Intel 的硬盘可以直接使用 -d megaraid,27 这类参数,但我手头的两块 RAID 卡需要额外添加 sat 参数,命令格式如下:
smartctl -a -d sat+megaraid,27 /dev/sdb1 -s on
这里的 sat 表示 SCSI 转 ATA 设备,也可以根据 RAID 卡接口类型替换为 scsi、ata 等。
执行后,对于 Crucial/Micron 的硬盘,你会看到类似下面的输出:
Model Family: Crucial/Micron RealSSD C300/C400
Device Model: C300-CTFDDAC128MAG
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x002f 100 100 000 Pre-fail Always - 0
5 Reallocated_Sector_Ct 0x0033 100 100 000 Pre-fail Always - 0
9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 5572
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 3
170 Grown_Failing_Block_Ct 0x0033 100 100 000 Pre-fail Always - 0
171 Program_Fail_Count 0x0032 100 100 000 Old_age Always - 0
172 Erase_Fail_Count 0x0032 100 100 000 Old_age Always - 0
173 Wear_Levelling_Count 0x0033 090 090 000 Pre-fail Always - 536
174 Unexpect_Power_Loss_Ct 0x0032 100 100 000 Old_age Always - 1
181 Non4k_Aligned_Access 0x0022 100 100 000 Old_age Always - 0 0 0
183 SATA_Iface_Downshift 0x0032 100 100 000 Old_age Always - 0
184 End-to-End_Error 0x0033 100 100 000 Pre-fail Always - 0
187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0
188 Command_Timeout 0x0032 100 100 000 Old_age Always - 0
189 Factory_Bad_Block_Ct 0x000e 100 100 000 Old_age Always - 250
195 Hardware_ECC_Recovered 0x003a 100 100 000 Old_age Always - 0
196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 0
197 Current_Pending_Sector 0x0032 100 100 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0030 100 100 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x0036 100 100 000 Old_age Always - 0
202 Perc_Rated_Life_Used 0x0018 090 090 000 Old_age Offline - 10
206 Write_Error_Rate 0x000e 100 100 000 Old_age Always - 0
如果是 OCZ 的硬盘,输出内容会有所不同:
Device Model: OCZ-AGILITY3
Serial Number: OCZ-1OX963Q8B5X2V684
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000f 086 086 050 Pre-fail Always - 135388659
5 Reallocated_Sector_Ct 0x0033 100 100 003 Pre-fail Always - 9
9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 265772576277126
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 15
171 Unknown_Attribute 0x0032 000 000 000 Old_age Always - 9
172 Unknown_Attribute 0x0032 000 000 000 Old_age Always - 0
174 Unknown_Attribute 0x0030 000 000 000 Old_age Offline - 13
177 Wear_Leveling_Count 0x0000 000 000 000 Old_age Offline - 1
181 Program_Fail_Cnt_Total 0x0032 000 000 000 Old_age Always - 9
182 Erase_Fail_Count_Total 0x0032 000 000 000 Old_age Always - 0
187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0
194 Temperature_Celsius 0x0022 030 030 000 Old_age Always - 30 (Lifetime Min/Max 30/30)
195 Hardware_ECC_Recovered 0x001c 120 120 000 Old_age Offline - 135388659
196 Reallocated_Event_Count 0x0033 100 100 003 Pre-fail Always - 9
201 Soft_Read_Error_Rate 0x001c 120 120 000 Old_age Offline - 135388659
204 Soft_ECC_Correction 0x001c 120 120 000 Old_age Offline - 135388659
230 Head_Amplitude 0x0013 100 100 000 Pre-fail Always - 100
231 Temperature_Celsius 0x0013 100 100 010 Pre-fail Always - 0
233 Media_Wearout_Indicator 0x0000 000 000 000 Old_age Offline - 2531
234 Unknown_Attribute 0x0032 000 000 000 Old_age Always - 3465
241 Total_LBAs_Written 0x0032 000 000 000 Old_age Always - 3465
242 Total_LBAs_Read 0x0032 000 000 000 Old_age Always - 2030
Intel 硬盘的 Media_Wearout_Indicator 在 OCZ 硬盘中也以同名属性出现,而 Crucial 硬盘则对应 Perc_Rated_Life_Used。但实际上,判断 SSD 健康度的核心参数主要有两个:Wear Leveling Count(颗粒平均擦写次数)和 Grown Failing Block Count(使用过程中新增的坏块数量)。
SSD 健康状态的关键参数分析
以上面 Crucial 硬盘的输出为例:
170 Grown_Failing_Block_Ct 0x0033 100 100 000 Pre-fail Always - 0
173 Wear_Levelling_Count 0x0033 090 090 000 Pre-fail Always - 536
这块硬盘已经使用了一年左右,Wear Levelling Count 显示为 536 —— 即全盘 P/E 次数为 536 次,而此时 VALUE 值为 90(表示剩余寿命约为 90%)。由此可以反推,该 SSD 颗粒的理论寿命大约在 5000 次左右。而 Grown Failing Block Count 当前为 0,说明尚未出现新增坏块。如果刚买回来的硬盘短时间内该数值大幅上升,那就需要尽快联系售后处理了。
MegaCli 常用参数组合速查
最后整理一份 MegaCli 的常用命令列表,方便日常运维时快速调用:
# 查看错误计数(正常均为0)
MegaCli -cfgdsply -aALL | grep "Error"
# 查看写策略
MegaCli -LDGetProp -Cache -LALL -a0
# 查看缓存大小
MegaCli -cfgdsply -aALL | grep "Memory"
# 查询 RAID 级别
MegaCli -LDInfo -Lall -aALL
# 查询 RAID 卡信息
MegaCli -AdpAllInfo -aALL
# 查看硬盘信息
MegaCli -PDList -aALL
# 查看电池信息
MegaCli -AdpBbuCmd -aAll
# 查看 RAID 卡日志
MegaCli -FwTermLog -Dsply -aALL
# 显示适配器个数
MegaCli -adpCount
# 显示适配器时间
MegaCli -AdpGetTime –aALL
# 显示所有适配器信息
MegaCli -AdpAllInfo -aAll
# 显示所有逻辑磁盘组信息
MegaCli -LDInfo -LALL -aAll
# 显示所有物理磁盘信息
MegaCli -PDList -aAll
# 查看充电状态
MegaCli -AdpBbuCmd -GetBbuStatus -aALL | grep "Charger Status"
# 显示 BBU 状态信息
MegaCli -AdpBbuCmd -GetBbuStatus -aALL
# 显示 BBU 容量信息
MegaCli -AdpBbuCmd -GetBbuCapacityInfo -aALL
# 显示 BBU 设计参数
MegaCli -AdpBbuCmd -GetBbuDesignInfo -aALL
# 显示当前 BBU 属性
MegaCli -AdpBbuCmd -GetBbuProperties -aALL
# 显示 RAID 卡型号、RAID 设置、磁盘相关信息
MegaCli -cfgdsply -aALL
顺便提一下硬盘状态在拔盘、插盘过程中的变化规律:
| Normal | Damage | Rebuild | Normal
Virtual Drive | Optimal| Degraded| Degraded| Optimal
Physical Drive | Online | Failed -> Unconfigured | Rebuild | Online
掌握了这些方法,以后无论你使用的是 Intel、Crucial 还是 OCZ 的 SSD,再也不用羡慕别人的教程了。
