抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

记录一次在服务器上捣鼓好久把 NVMe 盘弄没了,最后误打误撞给弄回来的经验。

服务器上存在多个 nvmeXnY 命令空间,同时还有未显示的空间(多个命名空间容量之和仍小于盘的容量), 打算把他们合并成一个 nvmeXn1,并能达到最大容量。可以采取以下方法:

nvme0 为例

  1. 查看 NVMe 盘相关参数
1
nvme id-ctrl /dev/nvme0

主要查看 cntlidtnvmcap 参数,如:

1
2
3
4
5
...
cntlid: 0x41
...
tnvmcap: 1600321314816
...

获取设备块大小,一般为 512 bytes4096 bytes,可以通过 fdisk -l 查看。

  1. 计算逻辑块个数

N = tnvmcap / block_size = 1600321314816 / 512 = 3125627568

  1. 关键一步:分离 NS 和 Controller
1
nvme detach-ns /dev/nvme0 -n 1 -c 0x41
  1. 删除命名空间
1
nvme delete-ns /dev/nvme0 -n 1
  1. 创建命名空间
1
nvme create-ns /dev/nvme0 --nsze=3125627568 --ncap=3125627568 --flbas=0
  1. 连接 Controller
1
nvme attach-ns /dev/nvme0 -n 1 -c 0x41

大功告成。