開啟TRIM功能後,如何使用工廠訪問模式鏡像固態硬盤驅動器(上)

固態硬盤非常奇怪,因為它們在編寫數據的方式上很奇怪,甚至在刪除信息的方式上更奇怪。在使用條帶化磁體技術進行信息記錄的硬盤中,人們在刪除文檔後,裡面的內容其實仍然是存在的,直到被覆蓋,但固態硬盤卻不是這樣。它們在處理刪除的數據方面和過去的技術有所不同,隻要是進行瞭刪除操作,被刪除的內容就不會再被恢復。隻需開啟固態硬盤,它就會啟動後臺垃圾收集,即使你寫入隻讀隔離進程,它也會刪除開啟具有trim功能的數據塊。

Trim的作用

在原理對的機械硬盤上,寫入數據時,Windows會通知硬盤先將以前的刪除,再將新的數據寫入到磁盤中。而在刪除數據時,Windows隻會在此處做個標記,說明這裡應該是沒有東西瞭,等到真正要寫入數據時再來真正刪除,並且做標記這個動作會保留在磁盤緩存中,等到磁盤空閑時再執行。這樣一來,磁盤需要更多的時間來執行以上操作,速度當然會慢下來。而當Windows識別到固態硬盤並確認固態硬盤支持Trim後,在刪除數據時,會不向硬盤通知刪除指令,隻使用Volume Bitmap來記住這裡的數據已經刪除。Volume Bitmap隻是一個磁盤快照,其創建速度比直接讀寫硬盤去標記刪除區域要快得多。這一步就已經省下一大筆時間瞭。然後再是寫入數據的時候,由於NAND閃存保存數據是純粹的數字形式,因此可以直接根據Volume Bitmap的情況,向快照中已刪除的區域寫入新的數據,而不用花時間去刪除原本的數據。註意:如果固態硬盤組建RAID0陣列0後,將失去Trim功能。

對固態硬盤進行鏡像後,即使在鏡像時實際數據仍然存在,你也將無法在刪除區域找到任何內容-。需要註意的是,你的固態硬盤的存儲容量比說明書上寫的要大,因為物理存儲容量的5%到15%專用於不可尋址池,從固態硬盤中刪除的任何數據,在被系統經過Trim處理後都可以直接進入該池,而不需要訪問甚至尋址這些塊。

不過事情總不是絕對的,現在你可以在固態硬盤上訪問已刪除的數據,不過方法也是唯一的,就是取下芯片,並手動進行分析,這個進程非常耗時,復雜且使用的設備相當昂貴。為此我們詢問瞭數據恢復的一些專傢,他們告訴我們他們大約可以在兩周內完成對一個四芯片固態硬盤的分析,而對最近的十芯片固態硬盤,他們也毫無辦法。

最近的一項 發現 指出,Windows內置的BitLocker保護傾向於將加密數據的任務委托給固態硬盤控制器,而不是在使用CPU的計算機上進行加密。正如研究中所發現的那樣,許多消費級固態硬盤都可以輕松地讓加密密鑰不受固態硬盤上存儲芯片的保護。

在本文中,我們將討論固態硬盤取證的最新發展技術,即在開啟TRIM功能後,如何防止後臺數據被刪除,並提供對磁盤的整個存儲容量(包括不可尋址的區域)的訪問。該方法采用所謂的工廠訪問模式( factory access mode)。但是,在我們討論工廠訪問模式之前,讓我們首先看一下固態硬盤是如何存儲信息的,以及為什麼這些信息很容易被刪除,且很難恢復。

固態硬盤如何存儲信息

與使用或多或少順序寫入(bar fragmentation 和壞扇區重新映射)的磁性硬盤驅動器不同,固態硬盤驅動器完全拋棄瞭線性寫入方式,而是將信息被分解成同時寫入不同NAND芯片的許多小的數據塊。這種並行寫入就是固態硬盤快速運行的原因,在某種程度上,我們就是談論安裝在單個PCB上的NAND芯片構建的raid0 (stripe)類陣列。

一個固態硬盤及時隻擁有一塊NAND芯片的固態硬盤驅動器,那它也幾乎不會以線性方式寫入信息。存儲器芯片中的每個物理塊被可以被動態分配一個邏輯地址,以幫助固態硬盤控制器進行磨損均衡。因此,讀取NAND芯片的內容將返回一個拼圖,這就意味著你所想看到的內容是以一種隨機的方式混合在多個數據塊中。

註:磨損均衡(wear leveling)這項技術在flash設備的單片機上使用瞭一種算法,來跟蹤flash內存上存儲空間的使用情況。這使得數據每次能夠重寫到內存中的不同地方,而不是一直寫入到內存中的同一個位置。

固態硬盤以及大多數其他類型的固態介質,都必須轉換NAND地址,其目的就是映射出壞的數據塊並提供耗損均衡。基本上所有的NAND的制造商都將其固態硬盤驅動器的寫入周期固定在大約1000到1500之間。諸如(Write Amplification,寫入放大)等因素都會對固態硬盤壽命產生負面影響,而智能SLC緩存算法會減少存儲單元的物理磨損,即使寫入操作的數量大於沒有緩存的數量,也會如此。我們將在下一篇文章中介紹影響固態硬盤壽命的許多其他因素。

註:WA是閃存及SSD相關的一個極為重要的屬性。由於閃存必須先擦除才能再寫入的特性,在執行這些操作時,數據都會被移動超過1次。這些重復的操作不單會增加寫入的數據量,還會減少閃存的壽命,更吃光閃存的可用帶寬而間接影響隨機寫入性能。WA這個術語在2008年被Intel公司和SiliconSystems公司(於2009 年被西部數據收購)第一次提出並在公開稿件裡使用。

真正重要的是,如果沒有固態硬盤控制器的幫助,即便隻恢復一個文檔都可能會非常困難。為此專傢首先要做的就是必須重建轉換表(translation table ),以確定哪些NAND芯片以及它們在哪些確切地址保存信息。不同的固態硬盤控制器的轉換表所采用的格式都是不同的,固態硬盤驅動器包含的NAND芯片越多,重建轉換表就越困難。

隨著電子設備的成本逐年下降,存儲容量超過1TB甚至2TB數據的固態硬盤驅動器現在可以被普通消費者使用瞭,而在三年前這種普及情況還是無法想象的。

為瞭以更低的價格生產具有更大容量的固態存儲器,制造商必須將更多的存儲單元擠壓到相同或更小的空間上。這無比就會減小每個單元的尺寸,減少使用壽命。雖然基於SLC的NAND閃存可以在每個單元中保存一位信息,但MLC NAND( 全稱為Multi-Level Cell,多層單元閃存,MLC通過使用大量的電壓等級,每一個單元儲存兩位數據,數據密度比較高)卻可以存儲兩位數據。如今的固態硬盤驅動器主要是TLC(每個單元三位數據),即便最便宜的驅動器可能每個單元包含四位(QLC NAND)。與低密度的NAND相比,每次迭代都會使NAND閃存的速度明顯變慢,更重要的是,可靠性會降低。

開啟TRIM功能後,如何使用工廠訪問模式鏡像固態硬盤驅動器(上)
開啟TRIM功能後,如何使用工廠訪問模式鏡像固態硬盤驅動器(上)

可以看出,TLC存儲單元是最慢和最不可靠的。為瞭讓基於TLC的固態硬盤驅動器提高存儲效率並提高使用壽命,許多制造商已經試著將部分存儲分配為專用SLC緩存。用作SLC高速緩存的數據塊,僅僅需要較小的單元來放置一位信息。它們磨損較少,而且它們的寫入速度比TLC單元更快。控制器維護用作SLC緩存的數據塊列表。如果我們試圖通過直接訪問芯片來讀取這些塊,同時期望獲得三位數據,那麼這些所謂的SLC單元將返回毫無意義的信息。

小結

閃存芯片根據內部架構分為SLC、MLC、TLC等,閃存顆粒是由多層閃存芯片構成的方形體。

閃存芯片顆粒直接影響著固態硬盤的訪問速率、使用壽命、生產成本等。

·SLC,英文全稱Single-Level Cell,1bit/cell,單層式存儲,僅允許在一個內存元素中存儲1個比特位的信息。

· MLC,英文全稱Multi-Level Cell,2bit/cell,多層式存儲,允許在一個內存元素中存儲2個比特位的信息。

· TLC,英文全稱Trinary-Level Cell,3bit/cell,三層式存儲,允許在一個內存元素中存儲3個比特位的信息。

由此得出,閃存顆粒面積相同時,存儲量由小到大:SLC<MLC<TLC。

SLC、MLC、TLC閃存芯片顆粒的優缺點分析

· SLC,訪問速率快,可擦寫次數多(使用壽命長),但生產成本價格昂貴(至少為MLC的三倍)。

· MLC,訪問速率較快,可擦寫次數相對SLC少(使用壽命約為SLC的十分之一),價格一般。

· TLC,訪問速率較慢,可擦寫次數進一步減少(使用壽命約為SLC的二十分之一),價格相對便宜。

固態硬盤的加密方法

大多數固態硬盤驅動器都會提供一種或多種硬件加密方法,一些企業級固態硬盤甚至在用戶不知情的情況下默認加密信息。在這種情況下,加密密鑰是公開存儲的,以便控制器可以從NAND芯片讀取它以解密數據。如果用戶加密這樣的磁盤,則僅僅是對加密密鑰的加密。

即使加密密鑰存儲不受保護,在沒有固態硬盤控制器幫助的情況下,找到加密密鑰也是非常困難的。

換句話說,我們需要固態硬盤控制器幫我們完成所有的相關工作。我們需要它來處理錯誤更正、地址轉換和潛在的加密,然而,簡單地將固態硬盤連接到閃存隻讀隔離保護器,然後打開電源並像以前一樣對磁盤進行鏡像,可能不是最好的方法。

固態硬盤是如何刪除數據的?

我們認為NAND單元目前隻支持有限數量的寫入操作,這需要高級耗損均衡算法。但是,除瞭有限的使用壽命外,NAND單元還有另一個屬性,即在寫入新數據之前必須擦寫非空單元。 由於NAND閃存提供快速讀取,緩慢寫入和低速擦寫。因此,如果要重新編寫已包含數據的存儲單元,則必須首先擦寫存儲單元,然後才能接受新數據。雖然擦寫NAND單元的操作速度非常慢,但擦寫一個或兩個單元卻不是你想象的那麼簡單。因為,你將不得不處理頁面和塊。

那麼什麼是存儲單元,為什麼我們必須要用到頁面和塊?我們先來弄清楚這些術語吧。單元是用於存儲信息的基本單元。根據閃存類型(SLC,MLC,TLC或QLC)和操作模式(例如MLC,TLC和QLC驅動器中的SLC緩存),單個單元可以記錄一位數據(SLC),兩位數據(MLC),三位數據(TLC)或四位數據(QLC)。例如,配備3D TLC NAND的Crucial MX550 固態硬盤可以在其每個單元中存儲3位數據,除非其存儲池的某些部分在SLC模式下作為動態寫入被加速緩存運行。在SLC模式下寫入TLC單元不僅速度更快,而且對存儲單元的壓力也明顯減少,因此固態硬盤的整體壽命可以隨著寫入速度的提高而提高。

但這會帶來瞭另一個問題,我們無法從從單個存儲單元內讀取數據或向單個單元寫入數據。

曾經旋轉存儲(rotating storage)介質(如傳統硬盤驅動器)提供的是512位扇區,作為可以讀取或寫入的最小數據單元。 FAT或NTFS等文檔系統也可以在扇區中讀寫數據。自從固態存儲被發明以來,這種情況已經發生瞭變化,NAND閃存不使用扇區,相反,它使用頁面和塊進行操作。頁面是你可以從固態硬盤讀取的最小數據,通常,固態硬盤驅動器可以在每個時鐘周期讀取一頁。由於單個頁面包含一定數量的物理字節(例如528,2112,4320,8640,9216,18592字節等),如果你隻需要一個字節的數據,固態硬盤也會讀取整個頁面。

每個頁面可以存儲512,2048,4096,8192或16534字節的數據,可見頁面可以存儲的數據量與物理字節數不同。多餘的字節是用於每頁的標記和ECC校正碼,如果我們將兩個固態硬盤驅動器與包含8192字節數據的頁面進行比較,我們可能會發現固態硬盤1每頁使用8640個物理字節,而固態硬盤2每頁有9216個物理字節。這兩個固態硬盤之間的區別僅在於每個驅動器的ECC校正量不同。

既然現在已經搞清楚瞭存儲單元和頁面的作用,但我們還有一個疑問,為什麼存儲還需要數據塊呢?雖然此時可以讀取單頁數據,但問題是我們隻能一次寫入(或擦寫)一定數量的頁面。寫入(擦寫)數據的最小單位就被稱為數據塊,而單個塊則包含許多頁面,事實上,通常有很多頁面。典型的固態硬盤操作塊由64,128,256或甚至512頁組成,每次更改一位數據,都要擦寫或寫入大量數據!

由於NAND閃存可以支持的寫入操作的數量是有限的,而且存儲單元非常小,因此固態硬盤控制器將盡力減少對已經寫入的塊的重用。如果你隻更改瞭1位數據,那麼簡單的固態硬盤(沒有SLC緩存)就可以做到這一點。

1.在RAM中,控制器將從NAND閃存讀取數據塊;

2.NAND塊被標記為被擦寫(取決於固態硬盤和控制器,它可能稍後在後臺擦寫);

3. 控制器現在對存儲在RAM中的數據塊進行請求的更改;

4.最後,修改後的塊將被寫入NAND閃存。因為擦寫操作比寫入慢得多,為瞭耗損均衡和寫入速度,固態硬盤將使用一組不同的物理存儲單元來寫入新數據。

寫入數據時,固態硬盤控制器將嘗試選擇重新寫入那些包含數據最少的塊。這意味著,在現實的存儲環境中,控制器將相同的數據集寫入不同的塊。為瞭使操作系統看起來一致,控制器將重新動態映射塊的邏輯地址。 新的數據塊將被分配一個特定地址,而舊的數據塊將被移動到過載區域(Overprovisioned Area)中的保留池或被分配一個不同的地址。然後,固態硬盤將擦寫該塊的內容並增加其擦寫計數(Erase Count)參數。

好瞭,由於本篇文章篇幅較長,所以今天就到此為止,大傢休息一下,明天將為大傢奉上本文的後半段。

Via 4hou.win

Ref. https://borncity.com/win/2018/11/06/ssd-vulnerability-breaks-bitlocker-encryption/, https://union-click.jd.com/jdc?d=ZKPlW2

推薦閱讀:

Spread the love

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *