工具篇 - 如何管理和监控NVMe磁盘

> 随着现在SSD磁盘的价位越来越低,以及业务对数据库响应要求的提高,越来越多在生产环境中使用固态硬盘[1],比如使用NVMe(Non-Volatile Memory Express)[2]协议的卡,之前使用过的企业级存储卡[3]有Fusion-io、Intel、华为、宝存(被慧榮收购)等,那如何来监控SSD磁盘的健康状态呢?

1lspci 命令

查看SSD存储信息、个数

通过lspci |grep -i non可以看到nvme卡信息,通过计数可以判断是否有发生掉盘,如:

image-20230717162325543

Intel磁盘卡:

image-20230717162454848

查看带宽

使用lspci -vvv | grep -A30 Non-Volatile | grep -E '(LnkSta)|(Non-Volatile)'查看卡带宽速率(如这里显示速率为8GT/s),通过观察Speed和Width[4]数值,是否有降速,或者对比不同磁盘的带宽是否不一致(如因主板问题等)

image-20230717162655210

查看驱动

使用lspci -s $id -vv查看驱动是否一致

lspci -vv |grep -A100 "Non-Volatile"\
|grep -E '(Kernel driver)|(Non-Volatile)'

如输出为:Kernel driver in use: nvme

image-20230717162950099

其他命令

如点灯,可以在进行维护时帮助定位磁盘是哪个。不同厂商的指令有不同,如:

## 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 设备的名称、序列号、固件版本、容量等信息

image-20230717163138473

查看NVMe SMART健康状态、温度

通过nvme smart-log ${device_name} 可以查看健康状态、温度信息

image-20230717163207276

需要关注的项:

  • 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

image-20230717163314042

查看控制器信息

使用命令nvme id-ctrl ${device_name} 可以查看控制器的信息(如sn序列号、model No.),固件版本(使用命令nvme id-ctrl /dev/nvme0 | grep "fr ")

image-20230717163351884

固件升级

固件相当于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磁盘卡:

image-20230717163720850

以及磁盘的健康状态,如寿命信息:

image-20230717163751804

posted @ 2023-07-17 16:49  寻梦99  阅读(4859)  评论(0)    收藏  举报