區塊儲存 (Block Storage)
區塊儲存 (Block Storage) 是最基本的儲存系統,就像電腦的倉庫,用來存放資料。資料在電腦裡是以 1 和 0 的形式儲存在某個「介質」上,例如:
- 機械式硬碟 (HDD) 利用磁性來儲存資料
- 固態硬碟 (SSD) 利用電子來儲存資料
- 光碟則是用光來儲存資料
區塊儲存就像是我們能看到的一塊塊硬碟和儲存裝置。我們把儲存裝置連接電腦後,就能透過區塊儲存的 API 對裡面的資料進行增刪改查。
接下來,我們有了作業系統,它方便我們把資料存進去 Block Storage 裝置,可以說,作業系統是上層應用與 Block Storage 裝置溝通的橋樑。那麼,作業系統是如何與硬碟打交道呢?首先,作業系統利用 LUN ID 識別硬碟。LUN 是一個或一組或半個硬碟的邏輯代號。為什麼有半個呢?例如我們的 Windows 有一個硬碟,把它分成 C 槽和 D 槽,那麼它們就是各半個。LUN 不是獨佔式的,也就是說多台主機能共享一個儲存設備,不過一般不會這麼用,因為 Block Storage 的資料隔離沒有做得這麼好,若是同時寫入資料容易被混淆。
Block (區塊)
為什麼叫做 Block 呢?從作業系統的角度,資料的讀取和寫入都是以 Block 為最小單位。一個 Block 是一段固定長度的 bytes,常見為 4096 bytes。這樣的設定用意是提升資料讀寫的速度。如果一個個 byte 寫,一來一往速度非常慢。我們也不需要連續的儲存這些 Block,上層的作業系統會利用 Linked-List 資料結構把碎片化的 Block 記錄下來,把整段資料拼湊出來。一個 Block 對應一個或多個硬體的扇區 (Sector),常見的一個 Sector 大小為 512 bytes。所以 Block 是給作業系統看的邏輯地址,Sector 是 Block Storage 上的實體地址。Block 大小可以透過作業系統設定,查詢指令為:
1 | #> stat /boot/ |grep "IO Block" |
扇區 (Sector)
Sector 是 Block Storage 上的實體地址,也是把多個 bytes 分組成一個 Sector。我們以機械式硬碟 (HDD) 為例,HDD 有個針頭會去掃描磁碟,掃描的部分就是一個個扇區,如下圖所示:
HDD 就是用類似光碟的圓盤一個個堆疊出來的。剛剛提到的 “扇區” 就是上圖的 Sector,代表同個半徑下一小塊長度。
最後總結一下 Block Storage 的優缺點:
優點
Block Storage 最大的優點就是它使得計算與儲存分離,我們能輕易地透過 LUN ID 外接一個硬碟或硬碟組。
- 高性能:
IOPS (Inputs Outputs per Seconds) 高,延遲低,適合用作公司的 Database Server 或數據中心。 - 易於修改:
如果想改變 Block 裡的一小部分資料,直接改那個 Block 就可以。如果是檔案系統或 Object System,需要整個檔案或 Object 都改。 - 擴充容易:
擴充非常簡單,一個 LUN ID 就可以接上系統了,適合用在 SAN (儲存區域網路) 裡。
缺點
- 不能同時讀寫:
不能多台機器同時讀寫同一塊硬碟,雖然可以透過軟體解決此問題但會造成性能下降。 - Metadata:
Block Storage 沒有什麼 Metadata,File System 有檔案路徑、名字、大小等等快速定位資料,Block Storage 只有地址起始位置 (LBA)、長度。