磁盤這塊主要有幾個部份的概念:
1. 磁盤的基本結(jié)構(gòu)和工作原理
2. 如何在虛擬內(nèi)存機制下與內(nèi)存高效地交換數(shù)據(jù)
3. 磁盤如何保證數(shù)據(jù)存儲的可靠性及故障恢復
磁盤的基本結(jié)構(gòu)和工作原理
從單個磁盤來講,由1個個的同心圓組成,1個同心圓就是1個磁道,每一個磁道由多個扇區(qū)組成,每一個扇區(qū)之前由沒有磁性的間隙分隔。扇區(qū)有磁性物資,支持讀和寫操作。
每一個磁道的扇區(qū)數(shù)量是1個常量,每一個扇區(qū)的大小1般是4KB。扇區(qū)是磁盤基本的物理單元。
每個盤面對應1個傳動臂,傳動臂的頭部有1個讀/寫頭可以讀和寫磁盤介質(zhì)。 傳動臂可以覆蓋所有的磁道,通過旋轉(zhuǎn)盤面和移動傳動臂,就能夠訪問到盤面所有扇區(qū)的數(shù)據(jù)。
1般的硬盤都有多個盤面構(gòu)成,每一個盤面都有上述的結(jié)構(gòu)。1個硬盤上的多個傳動臂是固定在1起的,也就是同時移動的半徑都是1樣的。這樣同1時刻位于多個磁頭下的的各個磁道構(gòu)成1個柱面,采取多個盤面的好處是可以同時讀取同1個柱面的數(shù)據(jù)。
我們知道存儲系統(tǒng)都采取邏輯單元塊來表示基本的數(shù)據(jù)單位,這樣可以提高存儲的效力,比如虛擬內(nèi)存采取頁為基本的存儲單位。一樣在磁盤領域,也用塊這個邏輯單元來管理磁盤。扇區(qū)是基本的物理單元,大小為4KB。磁盤塊1般為4KB - 64KB,包括1個或多個扇區(qū)。主存和磁盤交換數(shù)據(jù)時以塊為基本單位。
每個磁盤都有1個磁盤控制器來管理1個或多個磁盤。磁盤處理器的作用有:
1. 控制傳動臂,將磁頭定位到1個特定的半徑位置
2. 選擇1個準備讀寫的盤面,定位到特定的扇區(qū)
3. 將從所要求的扇區(qū)讀取的2進制數(shù)據(jù)傳送到主存,或?qū)⒅鞔娴臄?shù)據(jù)寫回到磁盤的扇區(qū)
看1個實際的磁盤的參數(shù),Megatron 747磁盤有以下參數(shù):
1. 8個圓盤,16個盤面
2. 每一個盤面有2^16次個磁道
3. 每一個磁道平均有256個扇區(qū)
4. 每一個扇區(qū)有4KB個字節(jié)
所以它是 16個盤面 * 2^16個磁道 * 256個扇區(qū) * 4KB個字節(jié) = 1TB的大小。1個磁道寄存1MB字節(jié)。如果1個塊是16KB,那末1個塊使用4個連續(xù)的扇區(qū),1個磁道上有32個塊
磁道的讀寫有3個步驟,即 尋道時間 + 旋轉(zhuǎn)延遲 + 傳輸時間
1. 磁盤控制器將磁頭組合定位在磁盤塊所在磁道的柱面上所需要的尋道時間
2. 磁盤控制器等待訪問塊的第1個扇區(qū)轉(zhuǎn)到磁頭下,即旋轉(zhuǎn)延遲
3. 磁盤控制器讀寫數(shù)據(jù)時,數(shù)據(jù)所在的扇區(qū)和扇區(qū)間的空隙經(jīng)過磁頭,即傳輸時間
尋道時間取決于磁頭到它訪問位置的距離,如果磁頭恰好在要訪問的柱面,那末尋道時間為0,但需要1ms的時間來啟動磁頭。磁頭需要10ms的時間來經(jīng)過所有的磁道,所以尋道時間在 0 - 10ms,平均5ms
磁盤旋轉(zhuǎn)1圈的時間約為10ms,因此旋轉(zhuǎn)延遲是0 - 10ms,平均為5ms
傳輸時間相對很小,在毫秒1下。
所以讀取磁盤的1個字節(jié)的平均延遲是10ms,最大延遲差不多是它的兩倍。
可以很自然地想到提高磁盤讀寫速度方法就是盡可能減小尋道時間和旋轉(zhuǎn)延遲,比如以下方式:
1. 按柱面組織數(shù)據(jù),將要1起訪問的塊放在同1個柱面,這樣可以常常避免尋道時間,也可能避免旋轉(zhuǎn)延遲
2. 將數(shù)據(jù)分隔存儲在多個相對較小的磁盤而不是放在1個大磁盤,這樣可讓更多的磁頭組裝備分別區(qū)訪問磁盤塊,可增加單位時間內(nèi)的磁盤塊訪問量
3. 鏡像磁盤,把兩個或更多的數(shù)據(jù)副本放在不同的磁盤上,1方面保證了數(shù)據(jù)的冗余存儲,另外一方面也能夠讓我們1次訪問多個磁盤塊
4. 把連續(xù)的快預加載到主存的緩沖區(qū),這是空間局部性的使用,從緩存原理的角度來加速磁盤訪問
從虛擬內(nèi)存的角度理解磁盤和主存的數(shù)據(jù)交換
首先理解1下CPU是如何來向磁盤IO要求數(shù)據(jù)的。我們知道計算機的各個組件通過總線連接,總線包括數(shù)據(jù)總線,地址總線,控制總線等。CPU采取內(nèi)存映照IO的技術來訪問IO裝備。虛擬地址空間有專門的地址,稱為IO端口,來于IO裝備通訊,當1個裝備連接到總線后,它被映照到1個或多個端口。
假定磁盤控制器被映照到0xa0端口,CPU發(fā)起IO讀的流程以下:
1. CPU把命令,邏輯塊號,目的虛擬內(nèi)存地址寫到0xa0端口,發(fā)起1個磁盤讀要求
2. 磁盤控制器把邏輯塊號翻譯成對應的扇區(qū)位置讀取扇區(qū),由DMA(直接內(nèi)存訪問,Direct Memery Access)控制器履行磁盤數(shù)據(jù)到內(nèi)存的傳輸,不需要CPU的參與
3. 當DMA傳輸結(jié)束后,磁盤控制器采取中斷的方式通知CPU讀取終了
有幾個注意點:
1. CPU只發(fā)起讀要求和最后由中斷獲知讀操作結(jié)束,其他時間可以履行其他任務,提高了CPU的使用率
2. 內(nèi)存1般都會有1個緩沖區(qū)來于磁盤交互,這實際也是緩存原理的使用,在內(nèi)存中開辟了1個緩沖區(qū),實際的內(nèi)存讀寫與緩沖區(qū)交互,緩沖區(qū)和磁盤交互,這樣提高了內(nèi)存讀寫的效力
3. 內(nèi)存和磁盤的傳輸數(shù)據(jù)以塊為最小單位,這個也是緩存原理的利用,1次傳輸1個或多個塊。從虛擬內(nèi)存的角度來講,虛擬頁和磁盤中的塊映照起來,當虛擬頁被加載到內(nèi)存的物理頁的時候,就由DMA把虛擬內(nèi)存對應的磁盤塊加載到內(nèi)存的對應地址的物理頁中。當物理頁寫回到磁盤時,也是由DMA把數(shù)據(jù)傳輸?shù)酱疟P控制器,由磁盤控制器寫到磁盤塊對應的扇區(qū)。內(nèi)存和磁盤交換數(shù)據(jù)的時候?qū)嶋H采取了內(nèi)存的緩沖區(qū)來加速磁盤的訪問速度。
緩沖區(qū)的目的是適配兩個速度不1致的裝備,從磁盤的工作原理我們看到磁盤操作是1個很慢的操作,內(nèi)存操作相比磁盤操作是1個很快的操作,為了讓內(nèi)存對磁盤的讀寫沒必要等待磁盤操作返回再返回,操作系統(tǒng)設置了內(nèi)存緩沖區(qū)來加速對磁盤的訪問速度。
內(nèi)存緩沖區(qū)是緩存原理的使用,它是磁盤和內(nèi)存之間傳輸數(shù)據(jù)的1個重要的組件。后面會單獨寫1篇文章介紹內(nèi)存緩沖區(qū)的原理。這里簡單說1下,內(nèi)存緩沖區(qū)由緩存塊組成,緩存塊的大小和磁盤塊的大小是1樣的。每一個緩存塊都有1個buffer_head數(shù)據(jù)結(jié)構(gòu),里面存儲了這個緩存塊對應的磁盤的deviceId和磁盤塊,這樣相當于把1個緩存塊和1個物理的磁盤塊綁定了。磁盤和內(nèi)存緩沖區(qū)之間交換數(shù)據(jù)以塊為基本單位。
有了內(nèi)存緩沖區(qū),CPU要訪問某個磁盤文件的某些數(shù)據(jù),只需要提供該數(shù)據(jù)所處的磁盤塊號,就能夠從內(nèi)存緩沖區(qū)尋覓是不是已緩存了該磁盤塊的內(nèi)容。
另外磁盤還專門設置了1塊交換區(qū)swap來寄存從內(nèi)存中交換出來的頁,swap是和操作系統(tǒng)的頁面回收子系統(tǒng)相干的,和內(nèi)存緩沖區(qū)沒有直接關系,后面也會單獨寫1篇介紹磁盤上的交換區(qū)swap的機制。
磁盤如何保證數(shù)據(jù)的可靠性和故障恢復
磁盤保證數(shù)據(jù)存儲的可靠性主要就是靠冗余。而冗余又有很多策略,比如
1. 單塊磁盤的穩(wěn)定存儲,把扇區(qū)依照兩兩結(jié)對,比如X和Y成對,每次寫的時候X和Y都要寫一樣的數(shù)據(jù),這樣當其中之1出現(xiàn)故障,就能夠用另外1塊來恢復。兩個扇區(qū)同時出現(xiàn)故障的情況很小
2. 多塊磁盤組成的磁盤陣列RAID,RAID0就是采取冗余鏡像的方式
3. 軟件保證的冗余,比如HDFS采取了3份冗余存儲的策略
磁盤故障通常有幾種
1. 間歇性故障,讀或?qū)?個扇區(qū)的某次嘗試沒有成功,但是經(jīng)過反復嘗試又能成功地讀寫
2. 介質(zhì)破壞,磁盤的1位或多個位永久地破壞了,致使讀不可能讀取某些扇區(qū)
3. 寫故障,嘗試寫1個扇區(qū)時,即不能正確地寫,也不能檢索先前寫入的扇區(qū),多是寫的時候供電中斷引發(fā)的
4. 磁盤崩潰,全部磁盤永久不可讀
對間歇性故障,采取奇偶校驗的方式,可以快速地檢查出某次讀寫是不是成功。磁盤控制器會通過奇偶校驗的方式來檢查讀寫是不是正確,失敗的話會進行重試,如果超過嘗試次數(shù),就返回讀寫失敗
對磁盤中部份位的破壞,或?qū)懝收?,可以采取上面說的單塊磁盤穩(wěn)定存儲的方式,把扇區(qū)結(jié)對存儲,這樣可以下降介質(zhì)破壞和寫故障的影響
對全部磁盤的崩潰,可以采取硬件方式的RAID磁盤陣列,或則軟件保證的多個磁盤的冗余存儲,來應對全部磁盤崩潰的影響,并可以快速回復破壞磁盤的數(shù)據(jù)