本篇文章著重在FreeBSD與ubuntu下實作ZFS 檔案系統,ZFS理論與優缺點部分不再贅述。
ZFS (Zettabyte file system):
實作上以兩個指令(zpool與zfs)來運作
- zpool: 設定ZFS storage pools
- zfs --設定 ZFS datasets
zpool指令: 管理實體儲存設備,形成storage pool
- Device: 一個實體儲存設備,例如硬碟等.
- Virtual Device(vdev): 一個虛擬設備(vdev)可以是單一個device組成,也可以是多的devices組成mirror, raidz, raidz2, raidz3等主要儲存虛擬設備,也可以當成是hot spare,log等虛擬設備。
- zfs pool: 一個storage pool是由多個vdevs組成,若主要儲存是由多個vdevs組成,則這幾個vdevs在storage pool中是以stripe方式組成。因此若vdev是由單一個device構成,則損換一個device則整個storage pool就會損壞。因此構成storage pool的vdevs一般會採用mirror 或raidz[1-3]較為適合。
zfs指令:管理在storage pool內的dataset
dataset分為:
- File system: 能直接掛載在檔案系統中,就像一般檔案系統一樣。
- Volume: 是一種block device,可視為是一顆邏輯硬碟,若要掛載在檔案系統中使用,需partition與format後才可mount在檔案系統下。一般直接用來當作iSCSI target的device。
- Snapshot: file system或volume特定時間點的快照,一般以 filesystem@name 或 volume@name形式表示。
- Bookmark: 像snapshot,但沒有實際保留資料空間。
實機測試:
實際在FreeBSD與ubuntu下,使用12個 20GB虛擬硬碟測試。
包含:
- ZFS pool硬碟設備故障,如何手動與自動更換故障的設備。
- ZFS pool在不同作業系統中實體移轉。
- zfs dataset 的snapshot, rollback, clone
- zfs dataset在同機器或跨機器間備份與回存(zfs send/zfs receive)
實作過程請參閱以下影片