之前详细询问了intel工程师关于怎么获得ssd盘使用情况的信息,并在杭州核心集群offer获得使用了一年多的ssd盘机器信息,目前该批机器ssd盘基本上都只耗一滴血,非常健康。
这里简单描述一下,怎么利用MegaCli和smartCtl获得ssd盘使用情况
首先,由于我们的服务器是做了raid的,所以需要用MegaCli获得各个适配器下的各个磁盘的信息。(目前我们的MySQL机器基本只有一个适配器)MegaCli有很多参数,具体的用法就不详细介绍了。
这里我们用MegaCli -PDList –aALL获得所有的适配器的物理磁盘信息。
例如:
Enclosure Device ID: 32
Slot Number: 4
Device Id: 4
Sequence Number: 2
Media Error Count: 0
Other Error Count: 0
Predictive Failure Count: 0
Last Predictive Failure Event Seq Number: 0
Raw Size: 122880MB [0xf000000 Sectors]
Non Coerced Size: 122368MB [0xef00000 Sectors]
Coerced Size: 122368MB [0xef00000 Sectors]
Firmware state: Online
SAS Address(0): 0×1221000004000000
Connected Port Number: 4(path0)
Inquiry Data: ATA INTEL SSDSA2M16002HACVPO944400FM160AGN
这个就是其中一块物理磁盘的信息。
我们可以看到它的适配器编号(Enclosure Device ID: 32),设备编号(Device Id: 4),磁盘大小(Raw Size: 122880MB [0xf000000 Sectors]),连接口(Connected Port Number: 5(path0)),上线状态(Firmware state: Online。也有可能是hotspare)以及磁盘信息(Inquiry Data: ATA INTEL SSDSA2M16002HACVPO944400FM160AGN,intel的ssd盘)
然后,通过smartctl我们可以获得对应磁盘的具体信息。smartctl是smartmontools工具包中的其中一个工具。
注意:这里smartctl的版本需要比较新,比如5.1.40已上
smartctl -a -d megaraid,4 /dev/sdb
这里megaraid,4的4表示上面MegaCli输出中的Device Id: 4,也就是说我们希望读取物理磁盘4的磁盘信息。
ssd盘的输出信息和sas盘的输出信息不同,特别是在
Vendor Specific SMART Attributes with Thresholds:段。
该段有很多ssd盘独有的参数。具体的参数请参考intel的pdf文件。
这里截取杭州offer集群的一台机器信息作为参考:
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
3 Spin_Up_Time 0×0000 100 000 000 Old_age Offline - 0
4 Start_Stop_Count 0×0000 100 000 000 Old_age Offline - 0
5 Reallocated_Sector_Ct 0×0002 100 100 000 Old_age Always – 0
9 Power_On_Hours 0×0002 100 100 000 Old_age Always – 10362
12 Power_Cycle_Count 0×0002 100 100 000 Old_age Always – 62
192 Unsafe_Shutdown_Count 0×0002 100 100 000 Old_age Always – 44
232 Available_Reservd_Space 0×0003 100 100 010 Pre-fail Always – 0
233 Media_Wearout_Indicator 0×0002 099 099 000 Old_age Always – 0
225 Host_Writes_32MiB 0×0000 200 200 000 Old_age Offline - 1284966
226 Intel_Internal 0×0002 255 000 000 Old_age Always – 0
227 Intel_Internal 0×0002 000 000 000 Old_age Always – 0
228 Intel_Internal 0×0002 000 000 000 Old_age Always – 0
其中我们比较关注的有以下四点:
1、Media_Wearout_Indicator: 使用耗费,100为没有任何耗费; 表示SSD上NAND的擦写次数的程度,初始值为100,随着擦写次数的增加,开始线性递减,递减速度按照擦写次数从0到最大的比例。一旦这个值降低到 1,就不再降了,同时表示SSD上面已经有NAND的擦写次数到达了最大次数。这个时候建议需要备份数据,以及更换SSD。
上面的机器为099,按照100滴血算,目前只耗了1滴血
2、Reallocated_Sector_Ct: 出厂后产生的坏块个数, 初始值为100,如果有坏块,从1开始增加,每4个坏块增加1
这里offer的机器还没有任何坏块
3、Host_Writes_32MiB: 已写32MiB, 每写入65536个扇区raw value增加1。这个扇区还是个数量单位,512字节
比如:这块盘就是 1284966 * 65536 * 512 = 40155.1875 GB
注意到每个机器都有一块盘写的比较少,这块盘就是hotspare盘。
每台机器我们有7块ssd盘。其中6块盘做的raid 5,第7块盘做的hotspare。
4、Available_Reservd_Space: SSD上剩余的保留空间, 初始值为100,表示100%,阀值为10,递减到10表示保留空间已经不能再减少
offer的机器基本都没有什么降低。
这样我们就获得了ssd盘的使用情况。
这里我再把林总的计算ssd盘还能用多久的方法摘录如下:
从这些值还可以推算一些东西:
offer集群的SSD单块盘累计写入量大约是40T VS offer集群基本上都在99-100,磨损的程度非常低(初始值是100)。
Intel的均匀磨损算法控制得很好,基本上保证了磨损程度是平均的。
假设SSD单盘实际100GB(64GB+保留容量)大小,写入量40TB的话,就是每块单盘经历了40TB/100GB=400次相当于全盘写一遍,去除第一次空盘时写入的量,还有399次应该是“擦除”-“写入”的过程,为计算简便,我们就认为已经擦写了400次了。再考虑磨损率最大仅有1%,则我们的SSD盘厂商保证可擦写次数>=400/0.01=40000次(这个数字也是非常靠谱的),于是可以推算出:
1. 咱们的盘至少还可以写入(40000-400)*100GB=3960TB的数据
2. 上线到现在超过半年了,按已有的使用率(半年写入40TB),还可以用3960TB/40/2=49.5年
什么概念呢?不出其他的问题,理论上offer集群的SSD盘极限可用50年,当然我们不会用那么久,也不能等磨损率99%了才去考虑换盘,但是用到磨损率50%也可25年之久,再考虑材料性能的衰减,至少用上3、5年肯定是没有问题的