NVMe SSD格式化到底做了什么?
发布日期:2025-05-02 04:35:18      浏览次数:796

无论是为了防止数据泄露,还是更改硬盘格式,我们通常会进行格式化操作。在Windows或Linux shell中对SSD进行格式化(format)时,往往需要几分钟甚至几十分钟,这个时间通常与硬盘容量成正比。那么在这段时间里,SSD到底做了些什么操作呢?

为更好地理解本文,这里需要介绍一些SSD的工作原理。熟悉NVMe协议的读者可跳过此部分。

· NVMe over PCIe数据传输原理

如图所示,主机和SSD控制器(下文统一称为“控制器”)通过队列对(Queue Pair)进行管理命令(Admin Command)和IO命令(I/O Command)的交互。主机将命令提交到发布队列(Submission Queue),控制器从发布队列中获取命令,执行完成后将命令完成消息提交到完成队列(Completion Queue),主机从完成队列获取命令完成消息,认为此命令执行完成。

· LBA格式

如上图所示,硬盘格式主要体现在三个方面:

1、Sector Size:图中LBA n Data区域,表示硬盘进行读写操作时的逻辑块大小(通常为512或4096字节);

2、Metadata Size:表示主机允许携带的元数据大小以及Metadata的传输方式(如图所示,Extend Buffer传输和Separate Buffer传输);

3、PI(Protection Information):是否有PI以及其在Metadata中的位置(在Metadata的起始字节还是末尾字节)。协议要求在1.0及以后的版本中,PI信息需放在Metadata的末尾字节。

Linux下使用nvme list命令可以查看系统中的NVMe设备信息,其中红框标注的字段表示当前硬盘的LBA格式:1)Sector Size = 512BMetadata Size = 0,没有PI数据;

2)Sector Size = 4096BMetadata Size = 0,没有PI数据。

了解上述基础知识后,我们来具体看看控制器执行format时到底做了哪些操作。

1、命令参数的校验

1)目标NSID:是否支持FFFFFFFF NSID、目标NSID是否有效。

2)目标LBA格式:在命令中,目标格式以数组下标的形式提供给控制器,由LBAFU和LBAFL共同组成,指向特定的目标格式。

主机通过Identify命令从Namespace Identify数据结构中获取名字空间支持的目标格式。最多支持64种格式,根据命令中组成的数组索引,可以在该结构中找到目标格式规定的Sector Size和Metadata Size。

3)PI信息:PI信息通过Metadata传输,因此支持PI信息的前提是支持Metadata。

2、停止IO调度

如下图所示的IO流程中,控制器在第3步时不再从发布队列中获取新的IO命令,但已经在控制器内存中的命令仍会继续执行。

3、将用户区数据全部落盘

IO数据经过主机内存和控制器内存这两个易失性存储后,才会写入非易失性存储NAND颗粒。在实际的固件应用中,控制器会先将主机下发的数据临时保存在控制器内存中,只有在满足一个PU(Program Unit)时,才会统一将数据刷新(FLUSH)到NAND颗粒中。在格式化时,如果主机下发的数据不满足一个PU,就需要补充虚拟数据(dummy)以达到一个PU的大小,然后再进行数据落盘。

4、下发全盘擦除命令,将所有用户数据擦除干净。

5、使用新的格式重新初始化相关硬件和数据结构。

6、根据新的format格式修改Namespace Identify数据结构,如NSZE、NCAP和格式索引等属性。

例如,当旧格式Sector Size为512字节,新格式为4096字节时,NSZE和NCAP描述的是以Sector Size为粒度的数量,因此需要将NSZE和NCAP分别除以8。

7、恢复IO调度,控制器将重新从命令发布队列中获取IO命令,并提交format结果到命令完成队列。

在主机端执行format操作如下:

首先,使用Identify命令查看支持的lbaf格式以及当前使用的格式。如下图所示,目前格式为Sector Size=4096,Metadata Size=0。

nvme list命令显示也符合上述描述:

接着,输入nvme format命令,指定nsid=1,格式索引为0(代表Sector Size=512,Metadata Size=0),切换成功后,日志(log)显示相应信息:

最后,再次使用Identify命令查看支持的lbaf格式及当前使用的格式,如下图所示,显示目前格式为Sector Size=512,Metadata Size=0:

通过使用Format NVM命令,可以在SSD所支持的不同格式之间切换,实现低级格式化的功能。由于格式化操作会擦除盘上原有的数据,因此在执行格式化之前,务必将所有的重要数据进行备份,以防数据丢失。

关于云海芯科

四川云海芯科微电子科技有限公司是一家业界领先的数据存储解决方案提供商,团队核心成员深耕存储行业15+年,拥有成熟的存储产品研发上市经验。 公司扎根国产存储,坚持产品和技术创新发展,拥有闪存管理、数据保护、硬件设计等多项SSD关键技术专利,具备存储产品设计到开发的全流程交付能力,已推出NVMe和SATA全系列SSD产品,在HPC/HPDA、云计算、数据中心、虚拟化、人工智能等领域广泛应用,为金融、交通、通信、智能制造、互联网、能源等行业提供高稳定、高可靠的存储解决方案。

相关推荐