存儲基礎知識:扇區與塊/簇
一直以來,個人對於磁盤的底層技術很少關注,可能更多的是關注磁盤IO性能,讀寫速率,這篇博文就磁盤扇區(Sector)和塊/簇這方面的知識做一些深入性的總結,希望對你有所幫助!如有不足或錯誤的地方,也敬請指正!
扇區(Sector)的概念
什麼是扇區(Sector)呢?我們先看看維基百科關於扇區的定義:
In computer disk storage, a sector is a subdivision of a track on a magnetic disk or optical disc. Each sector stores a fixed amount of user-accessible data, traditionally 512 bytes for hard disk drives (HDDs) and 2048 bytes for CD-ROMs and DVD-ROMs. Newer HDDs use 4096-byte (4 KiB) sectors, which are known as the Advanced Format (AF).
The sector is the minimum storage unit of a hard drive.[1] Most disk partitioning schemes are designed to have files occupy an integral number of sectors regardless of the file’s actual size. Files that do not fill a whole sector will have the remainder of their last sector filled with zeroes. In practice, operating systems typically operate on blocks of data, which may span multiple sectors.[2]
Geometrically, the word sector means a portion of a disk between a center, two radii and a corresponding arc (see Figure 1, item B), which is shaped like a slice of a pie. Thus, the disk sector (Figure 1, item C) refers to the intersection of a track and geometrical sector.
In modern disk drives, each physical sector is made up of two basic parts, the sector header area (typically called “ID”) and the data area. The sector header contains information used by the drive and controller; this information includes sync bytes, address identification, flaw flag and error detection and correction information. The header may also include an alternate address to be used if the data area is undependable. The address identification is used to ensure that the mechanics of the drive have positioned the read/write head over the correct location. The data area contains the sync bytes, user data and an error-correcting code (ECC) that is used to check and possibly correct errors that may have been introduced into the data.
在計算機磁盤存儲中,扇區是磁盤或光盤上磁道的細分。每個扇區存儲固定數量的用戶可訪問數據,傳統上,硬盤(HDD)上的扇區大小為512位元組,CD-ROM和DVD-ROM的扇區大小為2048位元組。較新的硬盤(HDD)使用4096位元組(4 KiB)扇區,這些扇區稱為高級格式(AF)。
扇區是硬盤的最小存儲單元。[1]大多數磁盤分區方案旨在使文件佔據整數個扇區,而不管文件的實際大小如何。未填充完整個扇區的文件將最後一個扇區的其餘部分填充零。實際上,操作系統通常使用數據塊操作,數據塊可跨越多個扇區。[2]
從幾何學上講,「扇形」一詞是指圓盤中心,兩個半徑和相應弧之間的一部分(請參見圖1,B項 紫色部分),其形狀像一塊餡餅。因此,磁盤扇區(圖1,C項 玫紅色部分)是指磁道和幾何扇區的交集。
在現代磁盤驅動器中,每個物理扇區都由兩個基本部分組成,即扇區頭區域(通常稱為「 ID」)和數據區域。扇區頭包含驅動器和控制器使用的信息。該信息包括同步位元組,地址標識,缺陷標誌以及錯誤檢測和糾正信息。如果數據區域不可靠,則標頭還可以包含要使用的備用地址。地址標識用於確保驅動器的機械手已將讀/寫頭定位在正確的位置上。數據區域包含同步位元組,用戶數據和糾錯碼(ECC),用於檢查並可能糾正可能已引入數據中的錯誤。
我們來看看下面維基百科上的圖,形象的介紹了扇區、磁道等概念:
A:Track 磁盤磁道(粉紅色部分)
B:Geometrical sector 幾何學中的扇形(紫色部分)
C:Track sector 磁盤扇區(玫紅色部分)
D:Cluster 塊/簇(綠色部分)
圖(1)
說完扇區,就不得不提一些其他相關概念,因為它們相輔相成,不能孤立開來,這裡也簡單介紹一下,不詳細展開.
磁頭(head)
磁頭就是讀寫盤片的設備。如下所示
盤片(platter)
硬盤中一般會有多個盤片組成,這個如果拆解過磁盤的人都會知道,銀白色的盤片像鏡子一樣,曾有同事將其當鏡子用。大多數盤片的材質是鋁合金,上面覆蓋一些磁性塗層。IBM曾經生產過玻璃材質的盤片,不過早已退出了歷史舞台。每個盤片包含兩個面,每個盤面都對應地有一個讀/寫磁頭。受到硬盤整體體積和生產成本的限制,盤片數量都受到限制,一般都在5片以內。盤片的編號自下向上從0開始,如最下邊的盤片有0面和1面,再上一個盤片就編號為2面和3面。
柱面(cylinder)
硬盤通常由重疊的一組盤片構成,每個盤面都被劃分為數目相等的磁道,並從外緣的「0」開始編號,具有相同編號的磁道形成一個圓柱,稱之為磁盤的柱面。磁盤的柱面數與一個盤面上的磁道數是相等的。由於每個盤面都有自己的磁頭,因此,盤面數等於總的磁頭數。
所有盤面上的同一磁道構成一個圓柱,稱作柱面。數據的讀/寫按柱面從外向內進行,而不是按盤面進行。定位時,首先確定柱面,再確定盤面,然後確定扇區。之後所有磁頭一起定位到指定柱面,再旋轉盤面使指定扇區位於磁頭之下。寫數據時,當前柱面的當前磁道寫滿後,開始在當前柱面的下一個磁道寫入,只有當前柱面全部寫滿後,才將磁頭移動到下一個柱面。在對硬盤分區時,各個分區也是以柱面為單位劃分的,即從什麼柱面到什麼柱面;不存在一個柱面同屬於多個分區
了解完上面概念,你再看一下下面兩張圖【來自維基百科】,基本上就能有個形象的認知了。
物理扇區(physical sector)與邏輯扇區(logical sector)
關於物理扇區(physical setctor)與邏輯扇區,這個還得扯上扇區大小,由於近年來,隨着對硬盤容量的要求不斷增加,為了提高數據記錄密度,硬盤廠商往往採用增大扇區大小的方法,於是出現了扇區大小為4096位元組的硬盤。我們將這樣的扇區稱之為「物理扇區」。但是這樣的大扇區會有兼容性問題,有的系統或軟件無法適應。為了解決這個問題,硬盤內部將物理扇區在邏輯上劃分為多個扇區片段並將其作為普通的扇區(一般為512位元組大小)報告給操作系統及應用軟件。這樣的扇區片段我們稱之為「邏輯扇區」。實際讀寫時由硬盤內的程序(固件)負責在邏輯扇區與物理扇區之間進行轉換,上層程序「感覺」不到物理扇區的存在。
邏輯扇區是硬盤可以接受讀寫指令的最小操作單元,是操作系統及應用程序可以訪問的扇區,多數情況下其大小為512位元組。我們通常所說的扇區一般就是指的邏輯扇區。物理扇區是硬盤底層硬件意義上的扇區,是實際執行讀寫操作的最小單元。是只能由硬盤直接訪問的扇區,操作系統及應用程序一般無法直接訪問物理扇區。一個物理扇區可以包含一個或多個邏輯扇區(比如多數硬盤的物理扇區包含了8個邏輯扇區)。當要讀寫某個邏輯扇區時,硬盤底層在實際操作時都會讀寫邏輯扇區所在的整個物理扇區。
關於扇區的一些疑問
回過頭來,我們仔細捋一捋圖(1)這張圖片,基本上就能把扇區的概念理解得七七八八了,那麼還有幾個問題,這個是我學習過程的一些疑問和自我解答(這裡僅僅指傳統硬盤,不涉及SSD磁盤):
1:扇區的大小是固定的嗎? 同一塊磁盤上的扇區大小是否可以不一致。
扇區(Sector)大小是固定的,默認情況下,每個扇區(Sector)為512位元組,2009年後,硬盤廠商開始發佈4KB位元組扇區的硬盤了,4KB扇區硬盤已經在消費級市場廣泛應用。但是同一塊硬盤上的扇區大小一定是一致的。不可能存在多種不同大小的扇區。
至於為什麼之前的扇區大小為512位元組呢?這是1956年由industry trade organization, International Disk Drive Equipment和Materials Association三家機構確定的行業標準。有時代和技術的限制,因為磁盤技術發展初期,存儲容量非常小。512位元組的扇區也夠用,但是隨着時代的發展,512位元組大小的扇區(Sector)明顯太小了,由於每個扇區(Sector)還要存放很多其他信息,因此增大sector size可以降低扇區(Sector)的數量,從而提高實際存儲量,同時降低了差錯校驗等很多CPU計算量。但遺憾的是由於這個標準太根深蒂固,要想改變一些底層代碼或架構勢必非常困難,所以現在4KB扇區硬盤暫時還沒有全部普及。
至於為什麼要採用4KB扇區的硬盤呢?這是因為它可以提高可靠性且增加磁盤容量 — 至少從理論上講是這樣。 更多相關詳細資料,建議參閱下面資料:
//www.ituring.com.cn/article/22103
//www.ibm.com/developerworks/cn/linux/l-4kb-sector-disks/index.html
//www.ibm.com/developerworks/cn/linux/l-linux-on-4kb-sector-disks/index.html
2:每個磁道(Track)上的扇區數量都是一樣的嗎? 還是只是相同柱面(cylinder)上的扇區數量一致。
要回答這個問題,我們首先有必要了解一下CLV、CAV、ZBR等技術,當然這裡僅僅是入門介紹,更多相關知識(例如P-CAV、Z-CLV等技術),自行去搜索查閱。
CLV技術
一開始的技術叫做CLV,稱為恆定線速度,這個技術要求無論在哪個圈上,線速度都要一樣,所以對馬達的要求非常高,壽命非常短,在低於12倍速的光驅中使用的技術。光碟片和硬碟不同,光碟片上每個部分的密度都是一樣的,在同樣旋轉一圈的情況下,圓周較長的外圈部分在讀取資料時會比內圈部分快,所謂的恆定線速度是指從內到外都是同樣的讀取速度,而為了保持一開始速度,讀到外圈時會降低光碟片的轉速來配合讀取速度,讀到內圈時會提高轉速。
CAV技術
CLV因為不停的更改馬達的轉速,會對機器的壽命造成一定的影響,而且磁盤轉速也不能無限制的加快。後來又有了一種磁盤技術叫做CAV,叫做恆定角速度,馬達的轉速恆定,壽命有了很大提高,光盤上的內沿數據比外沿數據傳輸速度要低,越往外越能體現光驅的速度,倍速指的是最高數據傳輸率。但是也有缺點,浪費會很大,因為磁頭讀盤片的掃描頻率基本是恆定的,外圈的有效磁介質單元會很稀疏。這時候,各個磁道的扇區數應該是一樣的。
ZBR技術
在計算機存儲中,區域位記錄(ZBR)是磁盤驅動器用來優化磁道以增加數據容量的一種方法。它通過在外部磁道上每個區域放置比內部磁道更多的扇區來實現此目的。這與其他方法相反,例如恆定角速度(CAV)驅動器,其中每個磁道的扇區數相同。在由大致同心的軌道組成的磁盤上(無論是實現為單獨的圓形軌道還是實現為單個螺旋軌道),物理軌道的長度(周長)隨着距中心輪轂的距離增加而增加。
如下圖片所示,可以看到粉紅色、綠色、灰色部分的扇區數量不一樣。
ZBR區位記錄,也稱為zone-bit recording,zone recording,zone-density recording或者multiple-zone recording,是指為了提高磁盤的存儲容量,充分利用磁盤外面磁道的存儲能力,現代磁盤不再把內外磁道劃分為相同數目的扇區。
所有的硬盤驅動器都是由一些磁盤片組成。在每個磁盤片中,數據存放的物理位置呈同心圓狀,這些同心圓稱為磁道。每個磁道上包含若干扇區。每個扇區存儲的數據容量是一致的。磁道的周長與同心圓的直徑成正比。在早期的硬盤驅動器中,所有的磁道包含的扇區數目都是一樣的,按照固定的圓心角輻射出去,就可以簡單的將各磁道的扇區數進行統一。這樣,在磁道邊緣的扇區弧長就要大於內部的扇區弧長,其存儲數據的密度也要比內部磁道的密度要小。最終,導致外部磁道的空間浪費。為了有效利用外部磁道空間,讓所有的磁道扇區存儲數據密度一致,就需要保證所有扇區的弧長一致。這樣就要根據磁道的半徑來重新分配扇區數目。Zoned0bit recording 方法通過將磁道分組(這種磁道組稱為zone)實現了這一目標。內部磁道的扇區數目較少,外部磁道的扇區數目較多。這樣,外部磁道和內部磁道的存儲空間利用率都相等,充分利用了整個硬盤的空間。【來自百科】
ZDR(Zone Data Recording),即區域數據記錄技術。主要工作方式還是CAV,但是採取了分區方式,是每個區域內為恆定角速度,各個區域內選取的角速度不一樣。從磁盤的最外圈到內圈劃分出若干個區域。每個區域內的每磁道扇區一致,但靠內的區域比外側的區域的每磁道扇區數要少,從而可以根據不同的磁道長度來合理設定扇區的數量,以達到充分利用磁盤存儲空間的目的。但設置多少個區域,每個區域的扇區數設定也都是有講究的。否則會在向內跨區域讀寫時造成傳輸率下降過大而影響整體性能。大多數產品劃分了16個區域,最外圈的每磁道扇區數正好是最內圈的一倍,與最大的持續傳輸率的參數基本成比例。比如0到100磁道採用每小時120碼的速度,101到200磁道採用每小時100碼的速度,201到300採用每小時80碼的速度。
所以要回答這個問題,要根據磁盤的數據記錄方式:
1.舊式——非ZBR區位記錄(不同磁道扇區數相同)
所有磁道(Track)上的扇區數量一致。以前的硬盤技術(CAV),內圈外圈每個磁道的扇區數是相同的,所以速度都是一樣的。舊的磁盤驅動器中,外軌道和內軌道具有相同的扇區數,因此外磁道數據密度低。這是低效率的對可用空間的利用
2.新式——ZBR區位記錄(不同磁道扇區數不同)
不同磁道(Track)上的扇區數量不一致,離圓心越遠的磁道的扇區數量越多(外層環帶的磁道擁有較內層環帶的磁道更多的扇區)。
3:扇區在磁道上的面積大小是固定嗎?
對於舊式磁盤(非ZBR區位記錄)。如上,圖(1)所示,扇區在不同的磁道,扇區的面積大小不一樣。這個圖只是為了形象的說明扇區的邏輯概念,實際情況呢? 準確答案是:扇區的大小在不同的磁道確實不一樣。因為所有的磁道(Track)的扇區數量是一樣的,那麼離圓心越遠的磁道的面積就越大,如果全部扇區的大小都一樣的話,那麼離圓心越遠的磁道(Track)的扇區數量就應該越多,顯然不是這樣的。硬盤的每個磁道具有相同數量的扇區,並且扇區大小一致。這意味着,內部磁道中的位密度遠高於外部扇區中的位密度。也就是說不同磁道的位密度(bit density)有差別。
顯然,對於新式磁盤(ZBR區位記錄),所有的磁道扇區存儲數據密度一致,所有扇區的弧長一致。
4:磁盤介質中存儲的密度是否不一樣?
其實問題3已經順帶回答了。
我們再來聊聊塊(Block)/簇(cluster)跟扇區(sector)的關係吧,關於扇區,經過上面的介紹,相信我們已經全面了解了扇區的基本概念。其實磁盤讀寫的基本單位是扇區,而塊(Block)/簇(cluster)是一個邏輯概念,或者說是操作系統中的概念,其實對於實際物理磁盤,並沒有所謂的塊(Block)這樣的東東。操作系統為什麼要虛擬個這樣的概念出來呢?這樣又有什麼好處呢?相信你也有不少這類疑問!
塊/簇
塊(Block)/簇(Cluster)是邏輯上的概念,或者說是虛擬出來的概念。 分別對應Linux與Windows操作系統中的概念。注意:有些文章或資料叫做磁盤塊/磁盤簇。這裡統一用塊(Block)/簇稱呼,這篇文章你看到的塊(Block)指磁盤塊。後面不再做聲明。
Unix與Linux系統中,塊(Block)是操作系統中最小的邏輯存儲單位。操作系統與磁盤打交道的最小單位是塊(Block)。
在Windows下如NTFS等文件系統中叫做簇;
每個簇或者塊可以包括2、4、8、16、32、64…2的n次方個扇區
如下所示,Windows下E盤的Cluster的大小為4Kb大小,如下所示:
Linux下查看Block大小的語句如下:
# stat /home | grep "IO Block"
Size: 47 Blocks: 0 IO Block: 4096 directory
# tune2fs -l /dev/mapper/VolGroup03-LogVol00 | grep Block
Block count: 47177728
Block size: 4096
Blocks per group: 32768
#dumpe2fs /dev/sda1|grep -i "block size"
為什麼要用磁盤塊/簇?
我們知道磁盤的最小單位就是扇區,那麼為什麼操作系統不用扇區作為IO的基本單位呢? 為什麼操作系統一定要整出塊(Block)/簇(Cluster)這樣的概念呢?主要是因為下面兩個原因:
讀取方便:由於扇區的Size比較小,數目眾多時尋址時比較困難,所以操作系統就將相鄰的扇區組合在一起,形成一個塊,再對塊進行整體的操作。
分離對底層的依賴:操作系統忽略對底層物理存儲結構的設計。通過虛擬出來磁盤塊的概念,在系統中認為塊是最小的單位。
其實我們生活中也有類似的例子,例如我們生活中,現在見到最小幣值是角了,小時候的一分錢、兩分錢現在已經很難見到了,因為隨着經濟發展和生活水平提高,如果還有分或角的話,非常不方便,你能想像你用一大袋幣值
為1分的錢去買個幾千塊的商品嗎? 想想都覺得這畫面很滑稽。既不方便攜帶,也不方便計算。而且扇區是對硬盤而言,塊是對文件系統而言。出於不同的需要。
塊/簇是越大越好嗎?
Linux系統
塊(Block),也稱為邏輯塊,是文件系統層面的概念。文件系統不是一個扇區一個扇區的來讀數據,太慢了,另外由於扇區的Size比較小,數目眾多時尋址時比較困難。所以它是一個塊一個塊的讀取數據,就是說塊(Block)是文件系統存取數據的最小單位,一般大小是4KB(這個值可以修改,在格式化分區的時候修改)。
讀取一個塊,實際上是從硬件設備讀取一個或多個扇區,一個塊只能存放一個文件的內容,無論這個文件有多小。一個文件可能會佔用一個或多個Block,每讀取一個block就會消耗一次磁盤IO。如果要提升磁盤IO性能,那麼儘可能一次IO讀取更多的數據,但是Block也不是越大越好,需要結合業務來設置。
試想,如果塊的大小為8KB,但是很多小文件都是1KB大小,我們知道一個塊只能存放一個文件的內容,那麼就會造成很大的浪費。
Windows系統
磁盤簇:扇區是磁盤最小的物理存儲單元,但由於操作系統無法對數目眾多的扇區進行尋址,所以操作系統就將相鄰的扇區組合在一起,形成一個簇,然後再對簇進行管理。每個簇可以包括2、4、8、16、32或64個扇區。顯然,簇是操作系統所使用的邏輯概念,而非磁盤的物理特性。為了更好地管理磁盤空間和更高效地從硬盤讀取數據,操作系統規定一個簇中只能放置一個文件的內容,因此文件所佔用的空間,只能是簇的整數倍;而如果文件實際大小小於一簇,它也要佔一簇的空間。所以,一般情況下文件所佔空間要略大於文件的實際大小,只有在少數情況下,即文件的實際大小恰好是簇的整數倍時,文件的實際大小才會與所佔空間完全一致
這種以簇為最小分配單位的機制,使硬盤對數據的管理變得相對容易,但也造成了磁盤空間的浪費,尤其是小文件數目較多的情況下,一個上千兆的大硬盤,其浪費的磁盤空間可達上百兆位元組。
所以塊/簇的大小不是越大越好,而是對讀寫性能與節省空間的多方權衡考慮。塊和簇的大小都是可以調整的。Windows在格式磁盤時,可以通過”Allocation unit size”來調整簇的大小。如下所示,
如果我選擇”Allocation unit size”為8192, 也就是簇大小為8KB重新格式化,那麼你會看到」Bytes Per Cluster”值為8192了。
當然, Linux也可以在格式化時調整。如下所示:
#mkfs.ext4 -b 4096 /dev/sda
磁盤塊大小必須是扇區大小的整數倍呢?
磁盤讀取數據的基本單位就是一個扇區的大小,一個塊的大小對於磁盤來說就是一次獲取數據讀取的扇區數*扇區大小,如果是整數倍的扇區數對於磁盤的IO更好,速度更快,也會更合理的利用資源。否則會對扇區進行分割。
一個扇區是512位元組。有些硬盤廠商會提供4k大小扇區。這是物理結構。磁盤定下來的結構就是沒法修改的。所以必須要將塊設置為磁盤的大小。
如何映射磁盤塊?
磁盤控制器,其作用除了讀取數據、控制磁頭等作用外,還有的功能就是映射扇區和磁盤塊的關係
如何查看磁盤的扇區大小呢?
在Linux系統下面,我們可以下面命令查看操作系統邏輯塊與物理塊的大小,如下所示:
You can display what physical/logical sector sizes your disk reports via the /sys pseudo filesystem, for instance:
# cat /sys/block/sda/queue/physical_block_size
4096
# cat /sys/block/sda/queue/logical_block_size
512
我們可以查看具體磁盤的扇區大小(物理扇區大小與邏輯扇區大小)
[root@KerryDB ~]# fdisk -l /dev/sda
Disk /dev/sda: 500.1 GB, 500107862016 bytes, 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x8de02bd4
Device Boot Start End Blocks Id System
/dev/sda1 * 63 208844 104391 83 Linux
Partition 1 does not start on physical sector boundary.
/dev/sda2 208896 2306047 1048576 83 Linux
/dev/sda3 2306048 976773119 487233536 8e Linux LVM
[root@mylnx11 ~]# fdisk -l /dev/sda
Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000b86b7
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 125829119 61864960 8e Linux LVM
注意,一些老舊的操作系統,使用fdisk -l沒有明確顯示扇區大小的信息,如下所示:
# more /etc/issue
Oracle Linux Server release 5.7
# fdisk -l /dev/sdb
Disk /dev/sdb: 171.7 GB, 171798691840 bytes
255 heads, 63 sectors/track, 20886 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 20886 167766763+ 83 Linux
但是其Units計算,暗示了扇區大小為512位元組。對於Windows系統而言,可以使用命令fsutil fsinfo ntfsinfo查看,如下截圖所示
查看塊(Block)的大小。
# stat /home | grep "IO Block"
Size: 47 Blocks: 0 IO Block: 4096 directory
# tune2fs -l /dev/mapper/VolGroup03-LogVol00 | grep Block
Block count: 47177728
Block size: 4096
Blocks per group: 32768
磁盤一次物理IO是讀取一個扇區還是多個扇區? 這個是和朋友討論的時候,最糾結的一個問題,因為之前確實沒有了解過。諮詢了不少人,得到的答案是一次IO會讀取一個或多個扇區。雖然磁盤最小操作單位是扇區,但是不代表一次只能讀取一個扇區。當然對於寫操作也是如此。
讀/寫IO,最為常見說法,讀IO,就是髮指令,從磁盤讀取某段扇區的內容。指令一般是通知磁盤開始扇區位置,然後給出需要從這個初始扇區往後讀取的連續扇區個數,同時給出動作是讀,還是寫。磁盤收到這條指令,就會按照指令的要求,讀或者寫數據。控制器發出的這種指令+數據,就是一次IO,讀或者寫。
有興趣的話,可以了解一下Multiple sector I/O
來自:Managing RAID on Linux: Fast, Scalable, Reliable Data Storage
參考資料:
//en.wikipedia.org/wiki/Disk_sector
//en.wikipedia.org/wiki/Cylinder-head-sector
//en.wikipedia.org/wiki/Zone_bit_recording
//blog.csdn.net/badbad_boy/article/details/4313645
//www.ibm.com/developerworks/cn/linux/l-4kb-sector-disks/index.html
//www.ibm.com/developerworks/cn/linux/l-linux-on-4kb-sector-disks/index.html
//blog.csdn.net/lyh__521/article/details/46795201