歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 磁盤物理結構及IO時的過程

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

日期:2017/2/28 14:02:22   编辑:Linux教程

對於管理磁盤,分磁盤面、磁頭、磁道、柱面和扇區。

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

磁頭(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所花費的的尋道時間 ,進而提高磁盤的讀寫性能。

Copyright © Linux教程網 All Rights Reserved