存儲基礎知識:扇區與塊/簇

 

一直以來,我的對於磁盤的底層技術不多關注,可能更多的是關注磁盤IO性能,讀寫速率,這篇博文就磁盤扇區(Sector)和塊/簇這方面的知識作一些深刻性的總結,但願對你有所幫助!若有不足或錯誤的地方,也敬請指正!html

 

 

扇區(Sector)的概念linux

 

什麼是扇區(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). app

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] less

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. ide

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-ROMDVD-ROM的扇區大小爲2048字節。較新的硬盤(HDD)使用4096字節(4 KiB)扇區,這些扇區稱爲高級格式(AF)。學習

扇區是硬盤的最小存儲單元[1]大多數磁盤分區方案旨在使文件佔據整數個扇區,而無論文件的實際大小如何。未填充完整個扇區的文件將最後一個扇區的其他部分填充零。實際上,操做系統一般使用數據塊操做,數據塊可跨越多個扇區。[2]優化

從幾何學上講,扇形一詞是指圓盤中心,兩個半徑和相應弧之間的一部分(請參見圖1B項 紫色部分),其形狀像一塊餡餅。所以,磁盤扇區(圖1C項 玫紅色部分)是指磁道和幾何扇區的交集。ui

在現代磁盤驅動器中,每一個物理扇區都由兩個基本部分組成,即扇區頭區域(一般稱爲 ID)和數據區域。扇區頭包含驅動器和控制器使用的信息。該信息包括同步字節,地址標識,缺陷標誌以及錯誤檢測和糾正信息。若是數據區域不可靠,則標頭還能夠包含要使用的備用地址。地址標識用於確保驅動器的機械手已將讀/寫頭定位在正確的位置上。數據區域包含同步字節,用戶數據和糾錯碼(ECC),用於檢查並可能糾正可能已引入數據中的錯誤。

 

 

咱們來看看下面維基百科上的圖,形象的介紹了扇區、磁道等概念:

 

 

ATrack   磁盤磁道(粉紅色部分)

BGeometrical sector  幾何學中的扇形(紫色部分)

CTrack sector   磁盤扇區(玫紅色部分)

DCluster  /簇(綠色部分)

 

                                             圖(1)

image

 

說完扇區,就不得不提一些其餘相關概念,由於它們相輔相成,不能孤立開來,這裏也簡單介紹一下,不詳細展開.

 

磁頭(head

 

    磁頭就是讀寫盤片的設備。以下所示

clip_image003

 

盤片(platter

 

    硬盤中通常會有多個盤片組成,這個若是拆解過磁盤的人都會知道,銀白色的盤片像鏡子同樣,曾有同事將其當鏡子用。大多數盤片的材質是鋁合金,上面覆蓋一些磁性塗層。IBM曾經生產過玻璃材質的盤片,不過早已退出了歷史舞臺。每一個盤片包含兩個面,每一個盤面都對應地有一個讀/寫磁頭。受到硬盤總體體積和生產成本的限制,盤片數量都受到限制,通常都在5片之內。盤片的編號自下向上從0開始,如最下邊的盤片有0面和1面,再上一個盤片就編號爲2面和3面。

 

柱面(cylinder

 

    硬盤一般由重疊的一組盤片構成,每一個盤面都被劃分爲數目相等的磁道,並從外緣的0開始編號,具備相同編號的磁道造成一個圓柱,稱之爲磁盤的柱面。磁盤的柱面數與一個盤面上的磁道數是相等的。因爲每一個盤面都有本身的磁頭,所以,盤面數等於總的磁頭數。

 

    全部盤面上的同一磁道構成一個圓柱,稱做柱面。數據的讀/寫按柱面從外向內進行,而不是按盤面進行。定位時,首先肯定柱面,再肯定盤面,而後肯定扇區。以後全部磁頭一塊兒定位到指定柱面,再旋轉盤面使指定扇區位於磁頭之下。寫數據時,當前柱面的當前磁道寫滿後,開始在當前柱面的下一個磁道寫入,只有當前柱面所有寫滿後,纔將磁頭移動到下一個柱面。在對硬盤分區時,各個分區也是以柱面爲單位劃分的,即從什麼柱面到什麼柱面;不存在一個柱面同屬於多個分區

 

瞭解完上面概念,你再看一下下面兩張圖【來自維基百科】,基本上就能有個形象的認知了。

 

clip_image005

 

clip_image006

 

 

 

物理扇區(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 EquipmentMaterials Association三家機構肯定的行業標準。有時代和技術的限制,由於磁盤技術發展初期,存儲容量很是小。512字節的扇區也夠用,可是隨着時代的發展,512字節大小的扇區(Sector)明顯過小了,因爲每一個扇區(Sector)還要存放不少其餘信息,所以增大sector size能夠下降扇區(Sector)的數量,從而提升實際存儲量,同時下降了差錯校驗等不少CPU計算量。但遺憾的是因爲這個標準太根深蒂固,要想改變一些底層代碼或架構勢必很是困難,因此如今4KB扇區硬盤暫時尚未所有普及。

至於爲何要採用4KB扇區的硬盤呢?這是由於它能夠提升可靠性且增長磁盤容量 至少從理論上講是這樣。 更多相關詳細資料,建議參閱下面資料:

https://www.ituring.com.cn/article/22103

https://www.ibm.com/developerworks/cn/linux/l-4kb-sector-disks/index.html

https://www.ibm.com/developerworks/cn/linux/l-linux-on-4kb-sector-disks/index.html

 

2:每一個磁道(Track)上的扇區數量都是同樣的嗎? 仍是隻是相同柱面(cylinder)上的扇區數量一致。

 

要回答這個問題,咱們首先有必要了解一下CLVCAVZBR等技術,固然這裏僅僅是入門介紹,更多相關知識(例如P-CAVZ-CLV等技術),自行去搜索查閱。

CLV技術

   一開始的技術叫作CLV,稱爲恆定線速度,這個技術要求不管在哪一個圈上,線速度都要同樣,因此對馬達的要求很是高,壽命很是短,在低於12倍速的光驅中使用的技術。光碟片和硬碟不一樣,光碟片上每一個部分的密度都是同樣的,在一樣旋轉一圈的狀況下,圓周較長的外圈部分在讀取資料時會比內圈部分快,所謂的恆定線速度是指從內到外都是一樣的讀取速度,而爲了保持一開始速度,讀到外圈時會下降光碟片的轉速來配合讀取速度,讀到內圈時會提升轉速。

CAV技術

   CLV由於不停的更改馬達的轉速,會對機器的壽命形成必定的影響,並且磁盤轉速也不能無限制的加快。後來又有了一種磁盤技術叫作CAV,叫作恆定角速度,馬達的轉速恆定,壽命有了很大提升,光盤上的內沿數據比外沿數據傳輸速度要低,越往外越能體現光驅的速度,倍速指的是最高數據傳輸率。可是也有缺點,浪費會很大,由於磁頭讀盤片的掃描頻率基本是恆定的,外圈的有效磁介質單元會很稀疏。這時候,各個磁道的扇區數應該是同樣的。

ZBR技術

在計算機存儲中,區域位記錄(ZBR)是磁盤驅動器用來優化磁道以增長數據容量的一種方法。它經過在外部磁道上每一個區域放置比內部磁道更多的扇區來實現此目的。這與其餘方法相反,例如恆定角速度(CAV)驅動器,其中每一個磁道的扇區數相同。在由大體同心的軌道組成的磁盤上(不管是實現爲單獨的圓形軌道仍是實現爲單個螺旋軌道),物理軌道的長度(周長)隨着距中心輪轂的距離增長而增長。

以下圖片所示,能夠看到粉紅色、綠色、灰色部分的扇區數量不同。

clip_image008

ZBR區位記錄,也稱爲zone-bit recordingzone recordingzone-density recording或者multiple-zone recording,是指爲了提升磁盤的存儲容量,充分利用磁盤外面磁道的存儲能力,現代磁盤再也不把內外磁道劃分爲相同數目的扇區。

全部的硬盤驅動器都是由一些磁盤片組成。在每一個磁盤片中,數據存放的物理位置呈同心圓狀,這些同心圓稱爲磁道。每一個磁道上包含若干扇區。每一個扇區存儲的數據容量是一致的。磁道的周長與同心圓的直徑成正比。在早期的硬盤驅動器中,全部的磁道包含的扇區數目都是同樣的,按照固定的圓心角輻射出去,就能夠簡單的將各磁道的扇區數進行統一。這樣,在磁道邊緣的扇區弧長就要大於內部的扇區弧長,其存儲數據的密度也要比內部磁道的密度要小。最終,致使外部磁道的空間浪費。爲了有效利用外部磁道空間,讓全部的磁道扇區存儲數據密度一致,就須要保證全部扇區的弧長一致。這樣就要根據磁道的半徑來從新分配扇區數目。Zoned0bit recording 方法經過將磁道分組(這種磁道組稱爲zone)實現了這一目標。內部磁道的扇區數目較少,外部磁道的扇區數目較多。這樣,外部磁道和內部磁道的存儲空間利用率都相等,充分利用了整個硬盤的空間。【來自百科】

ZDR(Zone Data Recording),即區域數據記錄技術。主要工做方式仍是CAV,可是採起了分區方式,是每一個區域內爲恆定角速度,各個區域內選取的角速度不同。從磁盤的最外圈到內圈劃分出若干個區域。每一個區域內的每磁道扇區一致,但靠內的區域比外側的區域的每磁道扇區數要少,從而能夠根據不一樣的磁道長度來合理設定扇區的數量,以達到充分利用磁盤存儲空間的目的。但設置多少個區域,每一個區域的扇區數設定也都是有講究的。不然會在向內跨區域讀寫時形成傳輸率降低過大而影響總體性能。大多數產品劃分了16個區域,最外圈的每磁道扇區數正好是最內圈的一倍,與最大的持續傳輸率的參數基本成比例。好比0100磁道採用每小時120碼的速度,101200磁道採用每小時100碼的速度,201300採用每小時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等文件系統中叫作簇;

 

    每一個簇或者塊能夠包括二、四、八、1六、3二、64…2的n次方個扇區

 

 

以下所示,Windows下E盤的Cluster的大小爲4Kb大小,以下所示:

 

clip_image009

 

 

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系統

 

磁盤簇:扇區是磁盤最小的物理存儲單元,但因爲操做系統沒法對數目衆多的扇區進行尋址,因此操做系統就將相鄰的扇區組合在一塊兒,造成一個簇,而後再對簇進行管理。每一個簇能夠包括二、四、八、1六、32或64個扇區。顯然,簇是操做系統所使用的邏輯概念,而非磁盤的物理特性。爲了更好地管理磁盤空間和更高效地從硬盤讀取數據,操做系統規定一個簇中只能放置一個文件的內容,所以文件所佔用的空間,只能是簇的整數倍;而若是文件實際大小小於一簇,它也要佔一簇的空間。因此,通常狀況下文件所佔空間要略大於文件的實際大小,只有在少數狀況下,即文件的實際大小剛好是簇的整數倍時,文件的實際大小纔會與所佔空間徹底一致

 

這種以簇爲最小分配單位的機制,使硬盤對數據的管理變得相對容易,但也形成了磁盤空間的浪費,尤爲是小文件數目較多的狀況下,一個上千兆的大硬盤,其浪費的磁盤空間可達上百兆字節。

 

因此塊/簇的大小不是越大越好,而是對讀寫性能與節省空間的多方權衡考慮。塊和簇的大小都是能夠調整的。Windows在格式磁盤時,能夠經過"Allocation unit size"來調整簇的大小。以下所示,

 

 

clip_image010

 

若是我選擇"Allocation unit size"爲8192, 也就是簇大小爲8KB從新格式化,那麼你會看到Bytes Per Cluster"值爲8192了。

clip_image011

 

固然, 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

 

 

clip_image012

 

 

[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查看,以下截圖所示

 

 

clip_image011[1]

 

 

 

查看塊(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

clip_image013

 

 

 

參考資料:

 

https://en.wikipedia.org/wiki/Disk_sector

https://en.wikipedia.org/wiki/Cylinder-head-sector

https://en.wikipedia.org/wiki/Zone_bit_recording

 

 

 

https://blog.csdn.net/badbad_boy/article/details/4313645

https://www.ibm.com/developerworks/cn/linux/l-4kb-sector-disks/index.html

https://www.ibm.com/developerworks/cn/linux/l-linux-on-4kb-sector-disks/index.html

https://blog.csdn.net/lyh__521/article/details/46795201

https://unix.stackexchange.com/questions/178899/optimizing-logical-sector-size-for-physical-sector-size-4096-hdd

相關文章
相關標籤/搜索