今天我以磁碟結構作為硬碟的開篇,來分享我這些年在這方面的思考。
為了方便討論,我們還是先從最基本的磁碟物理結構說起吧,對於常見的機械磁碟,分磁碟面、磁軌、柱面和扇區。(注意本文只討論機械磁碟,ssd先放一放再說)。
機械硬碟拆開以後,結構如下
我們再用乙個邏輯圖看一下
可見有以下概念 :
所以,磁碟儲存的最小組成單位就是扇區。
單柱面的儲存容量 = 每個扇區的位元組數*每個柱面扇區數*磁碟面數
整體磁碟的容量就等於單柱面容量乘以總的柱面數字。
扇區與扇區之間其實不是緊挨著的,而是在每個扇區結尾其實還有乙個儲存糾錯碼的位置。假設某乙個扇區讀取時發生了錯誤,這樣在扇區結尾的糾錯碼就能發現。磁頭就會在磁碟下一圈轉過來的時候再讀取一遍。linux相比較windows作業系統,乙個優點就是對開發非常友好和透明。只要你願意,你總能扒到你想要的資訊。linux上可以通過fdisk命令,來檢視當前系統使用的磁碟的這些物理資訊。
首先我們檢視伺服器上安裝的硬碟數量以及大小,這需要借助lsblk
這命令。
# lsblk
name maj:min rm size ro type mountpoint
sdb 8:16 0 20t 0 disk
`-sdb1 8:17 0 20t 0 part /search
sda 8:0 0 278.5g 0 disk
|-sda1 8:1 0 200m 0 part /boot
`-sda2 8:2 0 278.3g 0 part
|-vgroot-lvroot (dm-0) 253:0 0 10g 0 lvm /
|-vgroot-lvswap (dm-1) 253:1 0 8g 0 lvm [swap]
|-vgroot-lvvar (dm-2) 253:2 0 15g 0 lvm /var
|-vgroot-lvusr (dm-3) 253:3 0 10g 0 lvm /usr
`-vgroot-lvopt (dm-4) 253:4 0 136.7g 0 lvm /opt
通過上面命令我們可以看到,筆者的伺服器上裝了兩塊硬碟,分別是sda(278.5g)和sdb(20t)。接下來我們再通過fdisk
這個命令來檢視硬碟更詳細的資訊:
#fdisk -l /dev/sda
disk /dev/sda: 299.0 gb, 298999349248 bytes
255 heads, 63 sectors/track, 36351 cylinders
units = cylinders of 16065 * 512 = 8225280 bytes
sector size (logical/physical): 512 bytes / 4096 bytes
i/o size (minimum/optimal): 4096 bytes / 4096 bytes
disk identifier: 0x00053169
device boot start end blocks id system
/dev/sda1 * 1 26 204800 83 linux
partition 1 does not end on cylinder boundary.
/dev/sda2 26 36352 291785728 8e linux lvm
可以看出sda這塊磁碟:
上面的units說的是每個磁軌的儲存容量大小,8225280 bytes(=255盤面 * 63扇區 * 邏輯扇區大小512位元組)。 那麼該磁碟的總大小=36351 cylinders * units(8225280 bytes)=299gb。
按理說,磁軌是一組同心圓,越是外圈的磁軌周長會越長,儲存的資料應該越多才對。這個問題的答案其實應該按時間來看:
現代的磁碟人們改用等密度結構生產硬碟,也就是說,外圈磁軌的扇區比內圈磁軌多。這種磁碟裡扇區是線性編號的,即從0到某個最大值方式排列,並連成一條線。這種定址模式叫做lba,全稱為logic block address(即扇區的邏輯塊位址)。磁碟內部是自己會通過磁碟控制器來完成chs到lba的轉換,進而定位到具體的物理扇區
現在新的磁碟真正的扇區也不是512位元組,真正磁碟的i/o size和physical sector size都是4096 bytes。 但這時存在乙個問題是扇區大小為512位元組的假設已經貫穿於整個軟體鏈,比如bios,啟動載入器,作業系統核心,檔案系統**,以及磁碟工具,等等。直接切換到4096 byte相容性問題太大了,所以每個新的磁碟控制器將4096位元組的物理扇區對應成了8個512位元組的邏輯扇區,相容各種老軟體。
除了fdisk -l
命令外,如下方式也可以檢視物理/邏輯扇區大小。
上面的裡只有幾個磁頭,如果硬碟裡真的裝下255個這樣的磁頭的話,很難想象磁碟得有多厚。而且磁頭多了以後硬碟的可靠性就越差,因為多磁頭出故障的機率總會比單磁頭要高一些。所以fdisk -l
裡看到的255 heads其實和扇區一樣,也是虛擬出來的。 另外cylinders也一樣,也是虛擬出來的。
開發內功修煉之硬碟篇**:
拆開機械硬碟看一看
硬碟是計算機系統中用於儲存大量資料 檔案 的部件。雖然現在基於半導體器件的固態硬碟 ssd 應用數量逐步增加,但機械硬碟仍然保持在容量和應用量方面的領先地位。下面是乙個容量為80g的報廢的機械硬碟簡潔的內部,拆開之後可以看到其中包括有乙個讀寫磁頭,乙個碟片。用於訊號處理的電路附著在懸臂上的柔性電路板...
機械硬碟的延時
硬碟一次讀寫的時間由兩個部分組成 time latency data size bandwidth latency主要由平均硬碟尋道時間和平均硬碟轉動延遲組成。硬碟有多個磁碟片組成,每個磁碟又由n個同心的track構成,每個track又分成m個sector。磁頭移動到目標track,就是尋道的時間 ...
固態硬碟和機械硬碟的區別
1.固態硬碟和機械硬碟的區別 1 固態硬碟solid state disk 固態硬碟是由控制單元和固態儲存單元組成的硬碟。儲存單元負責儲存資料,控制單元負責讀取 寫入資料 固態硬碟的介質分為兩種,一種是採用快閃儲存器 flash memory 作為介質,另外一種是採用dram作為儲存介質,目前絕大多...