Block storage是最基本的儲存系統,所以讓我們從這裡開始
我們都知道數據是以1和0儲存在某個"介質"上面,例如機械式硬碟(HDD)利用磁性,而固態硬碟(SSD)利用電子
Block storage是最能與這些硬碟直接打交道的方式,那麼先回答一個問題,軟體是如何與硬碟打交道呢?首先,作業系統利用LUN ID識別硬碟,LUN是一個或一組或半個硬碟的邏輯代號,為何有半個呢?例如我們的windows有一個硬碟,把他分成C槽和D槽,那麼他們就是各半個
LUN的概念也方便了讓虛擬機掛載硬碟,就不用透過下層的hypervisor識別硬碟了
有了LUN,我們也方便了多台主機共享一個儲存設備,為了共享儲存設備,儲存設備必須是外接式,一般透過SCSI通訊協議與多主機溝通
最後,為什麼叫做block呢?這就要從我們是怎麼從硬碟讀取和寫入數據說起,一個block是一段固定長度的bytes,或是我們可以稱為"虛擬化的扇區”.
Block storage的資料讀寫方法與HDD的結構有關,如下圖所示
HDD就是用類似光碟的圓盤一個個堆疊出來了,剛剛提到的"扇區"就是上圖的sector,代表同個半徑下一小塊長度,HDD的最小單位就是一個sector,然後block storage最小的單位是一個block,sector是實體地址,block是作業系統上的邏輯地址
這樣比喻好了,大家上作業系統課的時候,應該學過虛擬記憶體,意思是實體記憶體與一個虛擬化的記憶體的Mapping關係,實體記憶體的Page就像是硬碟的sector,而虛擬記憶體的Page就像是block. Block就是作業系統最小的邏輯儲存單位,常見為4096 bytes. 可以藉由指令stat /boot/ |grep "IO Block"
查詢
為何有這樣的設計呢?因為sector有點小,傳統的硬碟一般是512bytes,如果用block作為最小單位直接讀的話,可以一次讀多個,當然,這個可以根據需求透過軟體控制
總結來說,block storage就是一種最底層讓軟體和硬碟溝通的方式
另外,本次系列的程式碼都放在這了,歡迎自行取用:https://github.com/kaichiachen/python-simple-object-storage