主要闡述以下內容:

磁盤的內部結構及實現機制
分區的結構及實現機制
塊的構造及原理
扇區的構造及結構

 

由于機械硬盤的訪問機制為移動磁頭,并等待磁碟旋轉,因此在設計磁盤時,需要考慮如何組織數據為順序訪問,并且最大限度提供一次順序訪問盡可能多的數據

由于塊大小設計直影響到性能、內存、空間等因素,因此需要合理設置塊大小,同時需要合理的為業務擴展預留升級空間

機械磁盤讀寫原理

 

機械硬盤獲取數據的方式為:

1、通過查找meta數據(圖中的Data Meta,它是用于描述數據的數據,所以稱為數據元,通常這些數據會被Cache在磁盤Cache或OS Cache中),捕獲數據存儲物理區域。包括:磁頭指向的磁道位置、磁道的起始、結束位置等,其中還包含了數據塊的標記,如使用狀態,分區、塊、卷、扇區等等存儲細節等,是磁盤運作機制的核心組件

2、驅動磁碟旋轉(服務器通常磁盤會一直旋轉,但為了省電及減少對驅動軸的損耗,通常會對旋轉進行優化,即空閑時降低磁盤旋轉速度或停止轉動,但重新驅動磁盤也會消耗大量的功耗,廠家進行了很多節能減排的優化措施,為綠色環保做了不少貢獻)

3、將磁頭(圖中的head)移動到指定的磁道,并從指定的起始位置開始讀取bit流,一直至指定的結束位置,并將信號傳送至處理程序,最后轉化為OS識別的數據


機械硬盤核心組件:

1、磁盤控制器:內部包含用于控制多磁碟并行訪問的機制,包括磁頭移動、盤片旋轉、供電、緩存、寫保護等,是整個磁盤的核心組件

2、分區(LUN):機械硬盤要被使用,通常先要被分區,并基于分區進行格式化,格式化將產生Meta數據,Meta數據通常會占用部分磁盤空間。空間大小取決于Block大小、分區量,Block越小,需要消耗的空間,用于于索引磁盤數據,接下來我們將還會介紹塊及扇區的組合方式,多碟磁盤中,磁盤控制器將在每塊磁碟中劃分一塊空間用于該分區使用,達到并行訪問的目的,提升響應速度(通常某些訪問需要集中訪問的數據都集中在某些分區中),此處的分區不同于OS中的分區,此處為物理分區

3、塊:塊由扇區構成,塊大小決定了數據訪問的性能,如果大數據如果存儲在小塊中會導致浪費大量的數據元空間,并消耗更多的Cache、更多的尋道時間(數據是被分散再分區中的各個位置),所以當應用數據塊比較小的時候,我們建議將數據劃分成更大的塊,提升性能,但如果塊劃的太大,會導致存儲空間的浪費,當這些不需要的數據被LOAD到應用中時,同樣會消耗額外的OS內存,通常我們建議根據業務的類型,在應用層選擇合適的數據集大小,并設置合理的磁盤塊大小

塊由扇區構成,扇區直接構建再磁碟的磁面上,每個扇區為512byte,業績意味著4KB的塊大小將需要8個扇區組成(通常Linux設置塊大小為4K),但再某些數據庫應用中我們將數據庫的數據設置為更大,如8K、16K、64K,日志設置為更大,如8K、16K、64K等,結構如下

 

4、扇區:扇區是磁盤存儲的單元,扇區顧名思義,機械硬盤是圓形的,通過分區格式化后將得到一個一個的扇形結構,一條磁道的存儲空間被格式化后將的到大量的扇形結構,磁盤的扇區大小為512byte,其在磁盤的結構如下圖:


圖中我們可以看到扇區結構非常復雜,包含數據區域、扇區分界標識區域、扇區間隙區域,磁盤在處理數據時為了更好的保護數據及容錯、設計了扇區分界標識及扇區間隙(當然遠遠不止如此)