# Disk很大,你忍一下 ###### tags: `IT鐵人` ## 小故事 既然這篇要講硬碟,先問各位一下,電腦一般來說我們都把系統還有程式放在C槽,資料放在D槽,那麼各位知道為什麼沒有AB槽嗎? 杰哥昨天騎腳踏車聽呱吉的Podcast時才知道的,其實以前電腦還有兩個槽,裝的分別是大小磁碟,其中小磁碟容量為1.4MB,大磁碟是1.22MB,遠遠不及現在的SSD跟HDD。 ![](https://i.imgur.com/3GJsCD4.png) 而裝那兩片的位置我們就稱為AB槽,不過隨著時代演進以及習慣,AB槽已經被淘汰,而名稱也尚未被取代。 杰哥拿到的第一臺3C產品是爸爸買給杰哥的MP4,就是下圖的創見MP860,之前幾乎所有照片都是網路抓的,不過這次因為本體還在身邊,而且爸爸還在拿來騎車聽歌用,就有實體可以拿來拍照了。 ![](https://i.imgur.com/kXqy40T.png =40%x) 那時候出了4GB跟8GB的款式,已經是那時候不可多得的酷東西了,基本上杰哥小學的時候,只要身上有一台MP4就是班上的King了,簡直可以配上MACKLEMORE的[THRIFT SHOP](https://www.youtube.com/watch?v=QK8mJJJvaes),甚至有人還有MP5,更是有資格征服宇宙。 ![](https://i.imgur.com/axyz2XW.png) 不過隨著時代演進,現在隨便一個小小的隨身碟都能有64GB的容量,手機也發展到512GB了,根據Moore's Law,每18~24個月,單位面積能儲存的電晶體數量能變兩倍,未來的成長值得期待。 ## Disk功能 相較於前面的Cache跟Memory要求速度,Disk我們更需要的是它能夠安全的儲存資料,萬一資料消失了,花在多時間也沒有用。 後面我們會先介紹HDD的構造,再介紹Disk的Dependability。 ## 構造 目前主要的Disk分為SSD跟HDD,這邊只介紹HDD,關於SSD的技術暫時不討論。 HDD是Hard Drive Disk的縮寫,也就是一般看到下圖這種好幾個盤子的構造: ![](https://i.imgur.com/aPvqHvv.png) 底下的表格展示圓盤的結構: <style> table th:first-of-type { width: 10%; } table th:nth-of-type(2) { width: 50%; } table th:nth-of-type(3) { width: 50%; } </style> |名稱|圖片|說明| |-|-|-| |整體|![](https://i.imgur.com/cTLejCd.png)|HDD的架構是好幾個存取資料的platter,上面有好幾圈的track,每圈都有好幾個sector,由於每層都有一個讀寫頭,所以可以同時讀取一整個柱子的內容,這個track上下對應的tracks合稱cylinder。| |track|![](https://i.imgur.com/ZFFK1cA.png)|每一圈都是一個track,上面被切成一段一段的sector。 |sector|![](https://i.imgur.com/mGEu8V5.png)|track上儲存資料的小單位稱為sector。| |cylinder|![](https://i.imgur.com/wSdCokL.png)|在每一個platter同樣位置的tracks合稱為cylinder,代表所有讀取頭能同時讀到的track集合。| ## 運作時間 圓盤做成圓形的就是為了旋轉給讀取頭讀取,由於轉動方向不改變,所以平均的轉動時間為半圈的轉動時間。 ![](https://i.imgur.com/ZxkDYu1.png) 在硬碟上讀取資料時有三個步驟,花費的時間稱為下列三者: * seek time:移動到正確的track上。 * rotational latency:轉動到正確的sector。 * transfer time:傳送一個區塊的資料。 最後還要把硬碟的資料放到Memory中,需要controller完成複雜的程序,此部份稱為controller time。 以上提到的四個時間再加上其他人佔用disk的時間稱為waiting time。 ## 例子 >舉例來說:如果一個轉速為10000RPM的HDD,廣告提到seek time = 6ms,transfer rate = 50MB/sec,controller time = 0.2ms,那麼讀取或寫入一個512bytes所花的時間會是多少? 首先把每個時間算出或是列出: seek time = 6ms rotational latency = 1/2 x (ms per round = 60x1000/10000) = 3ms transfer time = 1000x0.5KB/50MB = 0.01ms controller time = 0.2ms 合計為9.21ms 計算的方式大概是這樣,計算部份不困難,只是要特別注意單位。 ## What's Next? 下次會跟大家說說其實你的硬碟比你想的還大,主要就是為了防止你的資料損壞不能用,所以需要額外的空間做這件事情,就醬掰啦~ <style> table th:first-of-type { width: 50%; } table th:nth-of-type(2) { width: 50%; } table th:nth-of-type(3) { width: 50%; } </style> | 上一篇 | 下一篇 | |-|-| |[Miku Memory](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/r1ziQtgWF)|[RAID](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/rkjkZXBZY) ![](https://i.imgur.com/Dx5KlCO.png)