NVMe SSD格式化到底做了什么?
發(fā)布日期:2025-04-09 17:51:37      瀏覽次數(shù):732

無(wú)論是為了防止數(shù)據(jù)泄露,還是更改硬盤(pán)格式,我們通常會(huì)進(jìn)行格式化操作。在Windows或Linux shell中對(duì)SSD進(jìn)行格式化(format)時(shí),往往需要幾分鐘甚至幾十分鐘,這個(gè)時(shí)間通常與硬盤(pán)容量成正比。那么在這段時(shí)間里,SSD到底做了些什么操作呢?

為更好地理解本文,這里需要介紹一些SSD的工作原理。熟悉NVMe協(xié)議的讀者可跳過(guò)此部分。

· NVMe over PCIe數(shù)據(jù)傳輸原理

如圖所示,主機(jī)和SSD控制器(下文統(tǒng)一稱為“控制器”)通過(guò)隊(duì)列對(duì)(Queue Pair)進(jìn)行管理命令(Admin Command)和IO命令(I/O Command)的交互。主機(jī)將命令提交到發(fā)布隊(duì)列(Submission Queue),控制器從發(fā)布隊(duì)列中獲取命令,執(zhí)行完成后將命令完成消息提交到完成隊(duì)列(Completion Queue),主機(jī)從完成隊(duì)列獲取命令完成消息,認(rèn)為此命令執(zhí)行完成。

· LBA格式

如上圖所示,硬盤(pán)格式主要體現(xiàn)在三個(gè)方面:

1、Sector Size:圖中LBA n Data區(qū)域,表示硬盤(pán)進(jìn)行讀寫(xiě)操作時(shí)的邏輯塊大小(通常為512或4096字節(jié));

2、Metadata Size:表示主機(jī)允許攜帶的元數(shù)據(jù)大小以及Metadata的傳輸方式(如圖所示,Extend Buffer傳輸和Separate Buffer傳輸);

3、PI(Protection Information):是否有PI以及其在Metadata中的位置(在Metadata的起始字節(jié)還是末尾字節(jié))。協(xié)議要求在1.0及以后的版本中,PI信息需放在Metadata的末尾字節(jié)。

Linux下使用nvme list命令可以查看系統(tǒng)中的NVMe設(shè)備信息,其中紅框標(biāo)注的字段表示當(dāng)前硬盤(pán)的LBA格式:1)Sector Size = 512B,Metadata Size = 0,沒(méi)有PI數(shù)據(jù);

2)Sector Size = 4096B,Metadata Size = 0,沒(méi)有PI數(shù)據(jù)。

了解上述基礎(chǔ)知識(shí)后,我們來(lái)具體看看控制器執(zhí)行format時(shí)到底做了哪些操作。

1、命令參數(shù)的校驗(yàn)

1)目標(biāo)NSID:是否支持FFFFFFFF NSID、目標(biāo)NSID是否有效。

2)目標(biāo)LBA格式:在命令中,目標(biāo)格式以數(shù)組下標(biāo)的形式提供給控制器,由LBAFU和LBAFL共同組成,指向特定的目標(biāo)格式。

主機(jī)通過(guò)Identify命令從Namespace Identify數(shù)據(jù)結(jié)構(gòu)中獲取名字空間支持的目標(biāo)格式。最多支持64種格式,根據(jù)命令中組成的數(shù)組索引,可以在該結(jié)構(gòu)中找到目標(biāo)格式規(guī)定的Sector Size和Metadata Size。

3)PI信息:PI信息通過(guò)Metadata傳輸,因此支持PI信息的前提是支持Metadata。

2、停止IO調(diào)度

如下圖所示的IO流程中,控制器在第3步時(shí)不再?gòu)陌l(fā)布隊(duì)列中獲取新的IO命令,但已經(jīng)在控制器內(nèi)存中的命令仍會(huì)繼續(xù)執(zhí)行。

3、將用戶區(qū)數(shù)據(jù)全部落盤(pán)

IO數(shù)據(jù)經(jīng)過(guò)主機(jī)內(nèi)存和控制器內(nèi)存這兩個(gè)易失性存儲(chǔ)后,才會(huì)寫(xiě)入非易失性存儲(chǔ)NAND顆粒。在實(shí)際的固件應(yīng)用中,控制器會(huì)先將主機(jī)下發(fā)的數(shù)據(jù)臨時(shí)保存在控制器內(nèi)存中,只有在滿足一個(gè)PU(Program Unit)時(shí),才會(huì)統(tǒng)一將數(shù)據(jù)刷新(FLUSH)到NAND顆粒中。在格式化時(shí),如果主機(jī)下發(fā)的數(shù)據(jù)不滿足一個(gè)PU,就需要補(bǔ)充虛擬數(shù)據(jù)(dummy)以達(dá)到一個(gè)PU的大小,然后再進(jìn)行數(shù)據(jù)落盤(pán)。

4、下發(fā)全盤(pán)擦除命令,將所有用戶數(shù)據(jù)擦除干凈。

5、使用新的格式重新初始化相關(guān)硬件和數(shù)據(jù)結(jié)構(gòu)。

6、根據(jù)新的format格式修改Namespace Identify數(shù)據(jù)結(jié)構(gòu),如NSZE、NCAP和格式索引等屬性。

例如,當(dāng)舊格式Sector Size為512字節(jié),新格式為4096字節(jié)時(shí),NSZE和NCAP描述的是以Sector Size為粒度的數(shù)量,因此需要將NSZE和NCAP分別除以8。

7、恢復(fù)IO調(diào)度,控制器將重新從命令發(fā)布隊(duì)列中獲取IO命令,并提交format結(jié)果到命令完成隊(duì)列。

在主機(jī)端執(zhí)行format操作如下:

首先,使用Identify命令查看支持的lbaf格式以及當(dāng)前使用的格式。如下圖所示,目前格式為Sector Size=4096,Metadata Size=0。

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

接著,輸入nvme format命令,指定nsid=1,格式索引為0(代表Sector Size=512,Metadata Size=0),切換成功后,日志(log)顯示相應(yīng)信息:

最后,再次使用Identify命令查看支持的lbaf格式及當(dāng)前使用的格式,如下圖所示,顯示目前格式為Sector Size=512,Metadata Size=0:

通過(guò)使用Format NVM命令,可以在SSD所支持的不同格式之間切換,實(shí)現(xiàn)低級(jí)格式化的功能。由于格式化操作會(huì)擦除盤(pán)上原有的數(shù)據(jù),因此在執(zhí)行格式化之前,務(wù)必將所有的重要數(shù)據(jù)進(jìn)行備份,以防數(shù)據(jù)丟失。

關(guān)于云海芯科

四川云海芯科微電子科技有限公司是一家業(yè)界領(lǐng)先的數(shù)據(jù)存儲(chǔ)解決方案提供商,團(tuán)隊(duì)核心成員深耕存儲(chǔ)行業(yè)15+年,擁有成熟的存儲(chǔ)產(chǎn)品研發(fā)上市經(jīng)驗(yàn)。 公司扎根國(guó)產(chǎn)存儲(chǔ),堅(jiān)持產(chǎn)品和技術(shù)創(chuàng)新發(fā)展,擁有閃存管理、數(shù)據(jù)保護(hù)、硬件設(shè)計(jì)等多項(xiàng)SSD關(guān)鍵技術(shù)專利,具備存儲(chǔ)產(chǎn)品設(shè)計(jì)到開(kāi)發(fā)的全流程交付能力,已推出NVMe和SATA全系列SSD產(chǎn)品,在HPC/HPDA、云計(jì)算、數(shù)據(jù)中心、虛擬化、人工智能等領(lǐng)域廣泛應(yīng)用,為金融、交通、通信、智能制造、互聯(lián)網(wǎng)、能源等行業(yè)提供高穩(wěn)定、高可靠的存儲(chǔ)解決方案。

相關(guān)推薦