工具篇 - 如何管理和监控NVMe磁盘
> 随着现在SSD磁盘的价位越来越低,以及业务对数据库响应要求的提高,越来越多在生产环境中使用固态硬盘[1],比如使用NVMe(Non-Volatile Memory Express)[2]协议的卡,之前使用过的企业级存储卡[3]有Fusion-io、Intel、华为、宝存(被慧榮收购)等,那如何来监控SSD磁盘的健康状态呢?
1lspci 命令
查看SSD存储信息、个数
通过lspci |grep -i non
可以看到nvme卡信息,通过计数可以判断是否有发生掉盘,如:
Intel磁盘卡:
查看带宽
使用lspci -vvv | grep -A30 Non-Volatile | grep -E '(LnkSta)|(Non-Volatile)'
查看卡带宽速率(如这里显示速率为8GT/s),通过观察Speed和Width[4]数值,是否有降速,或者对比不同磁盘的带宽是否不一致(如因主板问题等)
查看驱动
使用lspci -s $id -vv
查看驱动是否一致
lspci -vv |grep -A100 "Non-Volatile"\
|grep -E '(Kernel driver)|(Non-Volatile)'
如输出为:Kernel driver in use: nvme
其他命令
如点灯,可以在进行维护时帮助定位磁盘是哪个。不同厂商的指令有不同,如:
## 1. 使用lspci -D输出磁盘ID
# lspci -D|grep "Non-Volatile memory controller"
0000:00:05.0 Non-Volatile memory controller: Intel Corporation NVMe Datacenter SSD [3DNAND, Beta Rock Controller]
## 2. 使用lspci -v -s ${ID}查看Slot的编号
# lspci -v -s 0000:00:05.0 |grep "Physical Slot:"
Physical Slot: 5
## 3. 然后往对应的Slot编号输入对应的点灯命令
# 华为
echo 1 > /sys/bus/pci/slots/${Slot_ID}/attention
# 三星、Intel
echo 13 > /sys/bus/pci/slots/${Slot_ID}/attention
2nvme-cli[5] 命令
Linux命令行工具nvma-cli[6]是由NVMe组织开发提供,以前各个厂商都有自己的管理工具。
查看设备列表
使用nvme list
查看NVMe 设备的名称、序列号、固件版本、容量等信息
查看NVMe SMART健康状态、温度
通过nvme smart-log ${device_name}
可以查看健康状态、温度信息
需要关注的项:
-
critical_warning,是位图,每位表示一个状态,当不为0时进行告警
-
- Available Spare[0] : 0 nvme可用空间警告
- Temp. Threshold[1] : 0 温度警告
- NVM subsystem Reliability[2] : 0 nvme子系统可靠性警告
- Read-only[3] : 0 设置是否被设置成只读
- Volatile mem. backup failed[4] : 0 nvme backup设备失败
- Persistent Mem. RO[5] : 0
-
percentage_used,表示磁盘寿命预测,超过一定值时告警(如85%)
-
media_errors,表示磁盘内可能出现ECC,CRC等错误,当不为零时进行告警
-
unsafe_shutdowns,不安全的(在未发送关机通知的情况下)断电次数,可能会损坏数据
有些厂商还支持smart-log-add
指令,比如Intel的卡:
nvme intel smart-log-add /dev/nvme0
查看控制器信息
使用命令nvme id-ctrl ${device_name}
可以查看控制器的信息(如sn序列号、model No.),固件版本(使用命令nvme id-ctrl /dev/nvme0 | grep "fr "
)
固件升级
固件相当于SSD磁盘的操作系统,一般在上架NVMe SSD卡时,跟厂家沟通固件是否需要更新,避免当服务上线后因固件版本太低,出现I/O性能差、io util高、写Hung住等奇怪的问题。
固件升级可以使用nvme命令,但是每个厂商有专用的命令,可以咨询最佳升级的方式,将工具封装成脚本,进行自动化的处理。
3格式化
一般NVMe磁盘支持格式化为512B或4KB的sector,可以根据业务需要选择格式化的类型,使用MySQL可以格式化为4KB(较大的块,减少元数据操作、降低文件系统碎片和提高磁盘空间利用率,适合随机I/O负载,可以依据基准测试和厂商建议来进行选择)。
参考命令:具体的指令可以通过咨询厂商或使用nvme id-ns /dev/nvme0n1 –H|grep -w lbaf
查看
# 512B
nvme format /dev/nvme0n1 -l 0
# 4KB
nvme format /dev/nvme0n1 -l 3
格式化后一定要重启系统才使用,避免出现问题。
4smartctl 命令
smartmontools[7]软件包提供了两个实用程序:smartctl、smartd。可以用于对大多数ATA/SATA、SCSI/SAS和NVMe磁盘设备进行监控、分析和进行SMART报告。
如果需要查看NVMe磁盘的信息,需要安装高版本的smartmontools。
cd smartmontools-7.3
./configure --prefix=/opt/smartmontools
make && make install
使用smartctl --all ${device_name}
可以查看磁盘序列号、固件版本、容量、健康状态等信息,如:显示为Intel的4T的NVMe磁盘卡:
以及磁盘的健康状态,如寿命信息: