磁盤碎片與閃存摩擦均衡介紹

前言:

    存儲設備傳統的有機械硬盤,新型的有各種閃存:U盤、CF卡、SM卡、SD/MMC卡、記憶棒、XD卡、MS卡、TF卡、PCIe閃存卡,還有ssd固態硬盤。由於物理結構上的差異,它們在可靠性上的差異都非常大。


(一)機械硬盤:

相比與閃存,機械硬盤在機械結構上要複雜很多,也正是因爲它複雜的機械結構,導致它在性能和可靠性上有很大的缺陷。磁盤的物理結構可以查看博客《硬盤內部硬件結構和工作原理詳解

(1)磁盤損壞分類:

其實,硬盤的損壞可以大致分爲兩大類,一類是硬損壞一類是軟損壞。硬損壞主要是磁頭組件損壞控制電路損壞綜合性損壞扇區物理性損壞四種。

磁頭組件損壞:其主要指硬盤中磁頭組件的某部分被損壞掉了,從而造成部分或者全部磁頭無法正常讀寫的情況。磁頭組件損壞的原因也有很多,主要還是磁頭變髒、磨損、懸臂變形、磁線圈受損、移位等。

控制電路損壞:主要是指硬盤的電子線路板上,某一部分的線路斷路或者短路,以及某些電氣元件或者IC芯片損壞,從而導致了硬盤通電之後盤片不能正常起轉以及起轉之後磁頭不能正確尋道。

綜合性損壞:這一部分主要是一些微小的變化導致硬盤產生了種種的問題,比如在使用過程中因爲發熱導致部分芯片老化,或者是在受到震動後使得外殼或者盤面、馬達主軸產生了微小的變化及位移,也有一些是硬盤本身就在設計上面有散熱、摩擦、結構上的缺陷。這些種種原因導致了硬盤的不穩定,從而使得數據經常莫名其妙的丟失或者出現邏輯錯誤,不僅讓電腦噪音變大,讀寫也開始變得緩慢。

扇區物理性損壞:扇區物理性損壞也被大家稱爲物理壞道。顧名思義,主要是因爲碰撞、磁頭摩擦等其他原因導致磁盤盤面出現物理性損壞,出現劃傷、掉磁等現象。

軟損壞則包括:磁道伺服信息出錯、系統信息區出錯以及扇區邏輯錯誤。

磁道伺服信息出錯:因爲某一個物理磁道的伺服信息受損或者失效導致物理磁道無法被訪問。

系統信息區出錯:硬盤的系統信息區在通電自檢時讀不出某些模塊的信息或者校驗不正常,從而導致硬盤無法進入準備狀態。

扇區邏輯錯誤:因爲校驗錯誤(ECC錯誤和CRC錯誤)、扇區標誌錯誤(IDNF錯誤)、地址信息錯誤(AMNF錯誤)、壞塊標記錯誤(BBM)等原因導致此扇區失效。

(2)導致損壞的因數:

影響機械硬盤使用壽命主要有下面幾個因數:

  1. 工作時間: 時間越長,概率越高
  2. 震動,和撞擊:超標的振動會影響磁頭定位,導致硬盤性能下降乃至壽命降低。
  3. 供電電源穩定性:電源不穩定容易導致電子元器件性能下降甚至損壞
  4. 頻繁的讀寫操作,磁頭的老化與它讀寫數據量的相關性很強
  5. 環境因數:溫度,溼度,電磁干擾
  6. 非常規操作:突然斷電,頻繁分區格式化
  7. 硬盤文件的碎片和零碎文件的多少

(3)磁盤碎片:

在計算領域,文件系統碎片(英語:File system fragmentation,或稱磁盤碎片、文件系統老化)是文件系統將文件內容非連續排列以允許就地修改其內容的後果,亦是碎片化的一個特例。磁盤碎片會增加磁盤磁頭移動的頻率,即增加了尋道時間,這會降低磁盤讀寫性能,進而影響操作系統及軟件的性能。另外,文件系統不能承受無限制的碎片。對現有碎片的更正稱爲碎片整理,是將文件和可用空間重新組織爲連續區域的過程。

現代計算機中的固態硬盤(SSD)不是真正的磁盤,也不是“旋轉的”,所以沒有磁盤碎片的問題。事實上,對這些驅動器進行碎片整理反而會縮短它們的使用壽命。同理flash也不存在磁盤碎片這個概念。

(4) 磁盤碎片化原理

磁盤主要由盤片,能夠轉動盤片的驅動馬達,機械臂以及機械臂上的讀取頭組成,在讀取數據時,馬達會驅動盤片來讓讀取頭在盤片上讀取。盤片是主要記錄數據的地方,扇區(sector)是硬盤的盤片上最小的物理存儲單位,一般爲 512 B;而塊(block)是文件系統(FAT、NTFS、Ext2,Ext3 )中最小的操作單位,由一個或多個 sector 組成,類似於 FAT 文件系統中簇的概念,讀寫文件時是按照文件系統中定義的 block 的大小來進行的。一般最小的 block 爲 4 KB,大文件讀寫時有 128 KB、256 KB。以 FAT 文件系統(Windows 98 以前的操作系統以及 U 盤常用的文件系統)爲例,文件數據一般會存放在連續的block中,比較大的文件會佔用多個block。但是當對同一文件進行頻繁更新(刪除、移動、新增等)時,文件體積發現變化後,文件系統會嘗試放在原始文件開始的 block 緊鄰的位置中,但是由於緊鄰的 block 已經沒有空間可放,此時會跳到其他 block 中存放。通常,一個文件佔用的多個 block 都是不連續的,操作過於頻繁時會使同一文件的block太過分散。

在FAT文件系統中,每一文件的 block 號碼都是記錄在前一個 block 當中,讀取方式類似上圖所示。上圖中我們假設文件的數據依序寫入 1->7->4->15 號這四個 block 號碼中, 但這個文件系統沒有辦法一口氣就知道四個 block 的號碼,他得要一個一個的將 block 讀出後,纔會知道下一個 block 在何處。 如果同一個文件數據寫入的 block 分散的太過厲害時,則我們的磁盤讀取頭將無法在磁盤轉一圈就讀到所有的數據, 因此磁盤就會多轉好幾圈才能完整的讀取到這個文件的內容!——引自《鳥哥的LINUX私房菜》磁盤碎片整理的目的就是將文件太過分散的 block 存到在磁盤開始的地方,使它們連續分佈,進而彌補磁盤上形成的大量的空洞,提高文件讀寫時的速度。而 NTFS 文件系統後來進行了優化,會在文件周圍分配一些“緩衝”的空間,在使用時間長後仍然需要進行碎片整理,而 Linux 中的 Ext 文件系統則是採用索引式式文件系統,有 inode 來記錄文件所在的 block 號碼,能夠將文件的所有 block 一口氣讀出來,所以 Linux 系統一般不太需要碎片整理。

(5)磁盤可靠性

可靠性前提條件和NL硬盤的由來再來看看可靠性。當年的高轉速企業級硬盤的MTBF(平均無故障時間)爲120萬小時左右,現在由於工藝進一步成熟,設計/製造標準普遍已達到200萬小時。而桌面硬盤還停留在70萬小時左右,沒有動力也不需要爲此而增加成本。

這裏容易被忽視的還有MTBF的先決條件。高轉速企業級硬盤是在45℃的環境溫度下,7x24小時100%工作負載;而桌面硬盤則是25℃環境,5x8小時10-20%工作負載。

一方面SSD只是擦寫次數有限而不限制讀,硬盤則不分讀寫都要考慮;另一方面,SSD壽命源自每個閃存單元的特點,在其它條件同等情況下其可寫入數據量與容量成正比;而硬盤卻不是容量越大這方面就越好,因爲磁頭的老化與它讀寫數據量的相關性更強

當然,10K/15K高轉速硬盤在質保期內沒有這些限制。

(6)文件預分配方案

從上面可以知道,在機械硬盤中中存在磁盤碎片導致性能下降的問題,對於有些錄像設備而言,他們進行7*24小時的工作,磁盤空間滿了之後,會將舊的文件進行刪除操作,然後再新建新的文件繼續寫入文件。這樣重複的操作就會不斷的增加磁盤的碎片化,從而導致磁盤性能下降。

爲解決這一問題,針對這一種場景,可以在磁盤分區格式化之後,將所有空間預創建好所有的文件,之後只往已經創建好的文件中寫入數據,在另外的一個文件(索引文件)中記錄寫入數據的位置。但磁盤寫滿之後,不進行文件刪除的操作,而是對原來問價中的數據直接進行覆蓋。通過這種方式可以解決磁盤碎片化影響性能的問題。

需要特別注意:磁盤碎片化只在機械硬盤中存在,所以文件預分配方案也只是在機械硬盤中能夠起到作用。


(二)閃存設備

常見的閃存設備有:U盤、CF卡、SM卡、SD/MMC卡、記憶棒、XD卡、MS卡、TF卡、PCIe閃存卡,還有ssd固態硬盤。這裏只介紹SD卡。

(1)SD卡的構成

結構簡圖如下:

它包括自己的控制器,內存(有可能是控制器自帶),和NAND Flash. 

再看其中一款SD卡的內部架構圖

它這裏的處理器是ARM。尤其是在大多數Class10的SD卡上,ARM和DMA協調工作,才能保證傳輸速度。具體舉個例子,Samsung的SD卡大多采用ARM7TDMI,它是基於ARMv4T架構的,T代表Thumb指令集,D是說支持JTAG調試(Debugging),M意指快速乘法器,I則對應一個嵌入式ICEBreaker模塊。

從上圖可以看出:SD卡雖小,五臟俱全。ARM控制器加上固件,它包括了馮諾依曼所有的元素,它實現了FTL層,從而實現了負載均衡。儘管SD卡的標準並沒有明確要求實現負載均衡,但沒有負載均衡的FTL層,某些特殊設計的寫操作,在幾分鐘之內就可以寫壞SD卡,這是不可以接受的。所以,幾乎所有SD卡都實現了FTL層。

(2)磨損均衡

耗損平均技術(英語:Wear Leveling)是快閃記憶體(NAND flash)上的一種抹平技術。快閃記憶體的區塊有抺寫次數的限制,針對同一個單一區塊,進行重複抺除、寫入,將會造成讀取速度變慢,甚至損壞而無法使用。耗損平均技術目的在於平均使用快閃記憶體中的每個儲存區塊,以避免某些“特定”儲存區塊因過度使用而形成壞區塊。

磨損均衡算法通過將寫入分配到閃存介質上的多個扇區,控制閃存介質扇區的不均勻“磨損”。磨損均衡算法集成在閃存盤控制器的韌體內,通過建立閃存介質的邏輯扇區和物理扇區之間的文件分區表,使文件系統一目瞭然。原則上,磨損均衡算法能使閃存介質上的所有扇區幾乎同時達到其耐久限制,從而延長閃存介質的使用壽命。通過使用老化機制,可警告用戶何時達到耐久限制,從而提前進行內容備份,防止數據丟失。

耗損平均技術的性能及壽命依賴演算法及控制器的優劣,性能常會在經常多次寫入及剩餘容量很少時下降,有時可以藉由犧牲壽命來增加性能、或以掉速爲代價來確保可靠度。

具體而言,它又分爲:動態磨損均衡靜態磨損均衡,這裏不再介紹,
 

(3)FTL(Flash Translation Layer)

幾乎所有的應用NAND Flash的設備都必須配備FTL,包括我們經常碰到的SD, eMMC, UFS, SSD等等。

通常FTL由這些設備的固件提供實現。

FTL簡單來說就是系統維護了一個邏輯Block地址(LBA,logical block addresses )和物理Block地址(PBA, physical block addresses)的對應關係,有了這層映射關係,我們需要修改時就不需要改動原來的物理塊,只需要標記原塊爲廢塊,同時找一個沒用的新物理塊對應到原來的邏輯塊上就好了。

flash固件也就是通過FTL層實現磨損均衡的一個技術

 (4)結論

現在基本上所有的SD卡或是其它的閃存固件,都有帶FTL層,也就是說不再需要用戶自己去做磨損均衡的工作,也就不存在SD卡讀寫熱點區域這個概念。在使用閃存固件的時候,需要考慮的是閃存的擦寫次數,一般說的10萬次這個說法並不準確。對於帶有磨損均衡的存儲設備,以SD卡爲例,它的擦寫次數一般是全部容量空間擦寫500次左右。比如一個1G的SD卡,一般它的壽命是循環讀寫500G數據量的壽命。當然這個也跟SD卡的質量有非常大的關係。


(三)非拔插閃存(裸flash)

在開發板中,我們一般都是直接使用裸的flash,常見的nor flash 和nand flash 都是直接與設備一起連接的。那麼,對於這類flash的使用,是由誰來做這個磨損平衡的工作能?還是它就直接不使用磨損平衡功能。

對於裸flash而言,除了FTL層可以對flash進行抽象之外,還可以使用特定的閃存文件系統來實現磨損平衡的工作

閃存文件系統與FTL比較

上層應用需要藉助於閃存文件系統或者 FTL 機制,來完成對閃存芯片的直接管理和控制。閃存存儲管理的主要目的就是爲上層應用提供硬件抽象,主要包括兩種方式,即閃存文件系統閃存轉換層(FTL: Flash Translation Layer)

閃存文件系統是直接針對閃存設計的文件系統,比如 JFFS2(Journalling Flash File System Version 2)和 YAFFS,閃存轉換層則是通過一箇中間層來隱藏閃存的底層硬件細節,把閃存設備模擬成一個塊設備,上層應用可以和訪問磁盤一樣的方式來訪問閃存設備。

  1. 閃存文件系統只能針對特殊廠商的閃存設備,無法廣泛應用關於各種不同類型的閃存設備,通用性不強;
  2. 閃存轉換層可以將現有的各種常用的磁盤管理技術移植到閃存設備上,可以把各個不同廠商的閃存產品模擬成類似磁盤的塊設備,具有廣泛的應用範圍。

閃存文件系統比 FTL 具有更高的性能,一般用於固定的、非插拔的 NAND 閃存管理。
 



Reference

SD卡標準協議

東芝SD卡官網

【科普】解密SD卡的種類、規格、速度、容量和壽命,附SD卡選購指南

JFFS2 文件系統及新特性介紹

磁盤碎片

磁盤碎片整理的原理是什麼?

從機械硬盤到SSD:高性能I/O之路

基於nand flash的文件系統的整理

《雜談閃存三:FTL》

《microSD卡會寫壞嗎?它裏面有固件嗎?它是如何構成的?》

《sd card》 維基百科的英文版  中文版內容少了很多

磁盤I/O那些事

漲姿勢 | 如何修復硬盤,以及如何避免硬盤損壞

影響硬盤壽命的主要因素是什麼? 硬盤硬件硬盤壽命主要因素

高性能磁盤 I/O 開發學習筆記 -- 軟件手段篇

從I/O到索引的那些事

從文件 I/O 看 Linux 的虛擬文件系統

《閃存數據庫概念與技術》

這些硬盤參數你都懂嗎?(上)-從案例引發的討論

這些硬盤參數你都懂嗎?(下)-監控選型與系統設計

生活不易,轉載請註明出處https://caibiao-lee.blog.csdn.net/article/details/105272274

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章