首頁 > 軟體

磁碟物理結構及IO時的過程

2020-06-16 18:02:08

對於管理磁碟,分磁碟面、磁頭、磁軌、柱面和磁區。

    磁碟面:磁碟是由一疊磁碟面組成,見下左圖。

    磁頭(Heads):每個磁頭對應一個磁碟面,負責該磁碟面上的資料的讀寫。

    磁軌(Track):每個盤面會圍繞圓心劃分出多個同心圓圈,每個圓圈叫做一個磁軌。

    柱面(Cylinders):所有碟片上的同一位置的磁軌組成的立體叫做一個柱面。

    磁區(Sector):以磁軌為單位管理磁碟仍然太大,所以計算機前輩們又把每個磁軌劃分出了多個磁區,見下圖

 Linux上可以通過fdisk命令,來檢視當前系統使用的磁碟的這些物理息。
[root@dbserver ~]# fdisk -l

 Disk /dev/sda: 1199.6 GB, 1199638052864 bytes
 255 heads, 63 sectors/track, 145847 cylinders
 Units = cylinders of 16065 * 512 = 8225280 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disk identifier: 0x54ab02ca

    Device Boot      Start        End      Blocks  Id  System
/dev/sda1              1          5      40131  de  Dell Utility
 Partition 1 does not end on cylinder boundary.
 /dev/sda2  *          6        267    2097152    c  W95 FAT32 (LBA)
 ......

 
可以看出我的磁碟有255個heads,也就是說共有255個盤面。145847 個cylinders,也就是說每個盤面上都有145847 個磁軌, 63sectors/track說的是每個磁軌上共有63個磁區。命令結果也給出了Sector size的值是512bytes。那我們動筆算一下該磁碟的大小。
255盤面  * 145847 柱面 * 63磁區 * 每個磁區512bytes =1199632412160 byte=1117.25GB
結果是1117.25GB,和磁碟的總大小相符。
 在如上圖可以發現一個錯誤(標紅),是即/dev/sda1的start位置從第 1 磁區個刪除開始,如果將第0至62個磁區,即第一磁軌(cylinders)單獨留給磁碟MBR並從第64個磁區,即第二個磁軌(cylinders)開始分割區,將會對檔案系統的效能會帶來很大的提升。
 
接下來讓我們在了解一下磁碟IO時的過程。
    第一步,首先是磁頭逕向移動來尋找資料所在的磁軌。這部分時間叫尋道時間。
    第二步,找到目標磁軌後通過盤面旋轉,將目標磁區移動到磁頭的正下方。
    第三步,向目標磁區讀取或者寫入資料。到此為止,一次磁碟IO完成。
 故:單次磁碟IO時間 = 尋道時間 + 旋轉延遲 + 存取時間。

 對於旋轉延時,現在主流伺服器上經常使用的是1W轉/分鐘的磁碟,每旋轉一周所需的時間為60*1000/10000=6ms,故其旋轉延遲為(0-6ms)。對於存取時間,一般耗時較短,為零點幾ms。對於尋道時間,現代磁碟大概在3-15ms,其中尋道時間大小主要受磁頭當前所在位置和目標磁軌所在位置相對距離的影響。
 作業系統通過按磁軌對應的柱面劃分分割區,來降低磁碟IO所花費的的尋道時間 ,進而提高磁碟的讀寫效能。

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-04/116419.htm


IT145.com E-mail:sddin#qq.com