使用环境时发现nvme磁盘namespace空间小于实际可分配空间,并尝试修复
问题现象:
首先需要用到nvme命令,此命令依赖于nvme-cli包,安装此包
yum install -y nvme-cli
然后查看到nvme list 中nvme0n1 和nvme6n1 Usage值仅500多G
此时尝试1:
nvme format -s 1 /dev/nvme0n1 安全擦除设备 , 然后
nvme reset /dev/nvme0 重置设备
未解决
尝试2:
nvme delete-ns /dev/nvme0 -n 1 删除设备nvme0 的namespace 1
nvme attach-ns /dev/nvme0 -n 1 -c 1 然后绑定controller
nvme reset /dev/nvme0 重置设备
解决
-----------------------------------------------------************--------------------------------------------------------
下面是nvme-cli包中 nvme支持的命令(常用,作用为检查设备)
nvme list 查看所有连接到当前系统的nvme设备:名称,序列号,大小,LBA 和 serial
nvme id-ctrl 展示nvme 控制器和它所支持的一些特性
nvme id-ns 展示nvme 的命名空间,优化特性和支持特性
nvme format 安全擦除SSD上的数据,格式化LBA大小或保护信息以实现端到端数据保护
无返回, 安全擦除设备
nvme sanitize 安全得擦除SSD上的所有数据
nvme smart-log 查看NVME的smart log信息:page的健康状态,温度,稳定性情况等
nvme fw-log 查看NVME的固件日志,会打印每个entry的健康情况
nvme error-log NVME的异常日志
nvme fw-download 为一个设备下载一个新的固件系统
nvme fw-commit 让固件立即运行
列出设备/dev/nvme0的控制器号
nvme list-ctrl /dev/nvme0
将名字空间与controller解绑(-c是controllerid, -n是namespace)这时还可以查到该设备但是看到空间为0了
nvme detach-ns /dev/nvme1 -c 0 -n 1
删除设备及命名空间
nvme delete-ns /dev/nvme1 -n 1
创建命名空间
nvme create-ns用于创建一个名字空间,-f 0指的是用LBA模式0,这个模式下blocksize是512B。-s -c指定的大小,最大可设置totalnvm 大小除以512,但是建议设置比最大值小一些,不要使用全部空间,实际使用中,有一个盘会报错。
nvme create-ns /dev/nvme1 -s 6000000000 -c 6000000000 -f 0 -d 0 -m 0
nvme create-ns /dev/nvme1 -s 6251233968 -c 6251233968 -f 0 -d 0 -m 0
和controller绑定
nvme attach-ns /dev/nvme1 -c 0 -n 1
重置一下这个盘
nvme reset /dev/nvme1
使用nvme read读一下,检查一下,如果读不到说明这个盘有问题。读到会报成功。
nvme read /dev/nvme1n1 -s 0 -c 1 -z 1024
nvme解绑与spdk绑定
将盘从nvme设备中解绑
cd /sys/bus/pci/drivers/nvme && ll
echo “0000:1a:00.0” > unbind
echo “0000:1b:00.0” > unbind
echo “0000:1c:00.0” > unbind
echo “0000:1d:00.0” > unbind
将盘绑定到spdk设备中
cd /sys/bus/pci/drivers/uio_pci_generic && ll
echo “0000:1a:00.0” > bind
echo “0000:1b:00.0” > bind
echo “0000:1c:00.0” > bind
echo “0000:1d:00.0” > bind