SAN最終給客戶提供的是基於塊設備的存儲,客戶實際分區格式化用到的文件系統的類型決定了上層的data/ meta data的組織形式,但是對提供塊存儲設備的系統而言,上層的data/medta data都是它的data,都需要根據上層傳遞進來的flag (O_DIREC/O_SYNC/O_DSYNC)到達io 隊列或者磁盤。而提供塊存儲的 文件系統中的其他數據結構都是meta data。
因此,zfs中的meta data包括:
- 首尾的四個label
其中每個Label存儲了跟整個系統池相關的全局信息,結構如下:
-
uber block、name value pair
super block 如何定位到具體的磁盤偏移super block中是索引數據的入口? 下圖紅線部分指出了相關數據結構之間的關聯: - 基於葉子節點的vtree
在上面112KB的Label 區間,有一個叫做vdev tree 的name-value pairs,內容如下:
兩個或多個vdev可以構成不同類型和級別的vtree,比如RAID1/2/3//5/10等。以下面的截圖爲例來說明一個基於兩個葉子節點的mirror 的name-value pairs:
上面中的ubber-block框圖可以由來解釋基於塊的zfs on-disk靜態數據的layout結構,那麼這些塊block又是如何管理的呢?實際是由zfs DMU統一管理文件系統操作的所有的對象,比如dnode/directory/zvol/intent log 都抽象成一個object。 由SPA層根據object/object set的需求一塊塊申請和分配、釋放的.