ZFS pools, VDEVs, physical drivers
大多數情況下是這樣:physical drivers(物理驅動器)組合在一起形成VDEVs(Virtual Devices虛擬裝置)。當然,VDEVs還可以是
- 最普通的單一的物理硬碟
- Mirror或是n-way mirror,或者是RAID1
- RAIDZ,這個基本上和RAID5一樣,但規避了RAID5的缺點.
- RAIDZ2或RAIDZ3,這兩者的區別是使用幾塊硬碟來進行備份
- 接著 VDEVs組合成一個ZFS pool。這個池裡的資料分佈在所有的VDEVs上,使用更高階別的條帶化(具說raid5就是這塊有點問題)
所以如果把資料存在池中,如果池中的 VDEVs 有一個不安全,那麼這個資料肯定也不安全。
磁碟資訊
# camcontrol devlist
<NECVMWar VMware SATA CD00 1.00> at scbus2 target 0 lun 0 (cd0,pass0)
<VMware Virtual disk 2.0> at scbus32 target 0 lun 0 (pass1,da0)
<VMware Virtual disk 2.0> at scbus32 target 1 lun 0 (pass2,da1)
<ATA HGST HTS721010A9 A3W0> at scbus33 target 0 lun 0 (pass3,da2)
<ATA ST500DM002-1BD14 KC65> at scbus33 target 1 lun 0 (pass4,da3)
<ATA WDC WD10EZEX-08M 1A01> at scbus33 target 2 lun 0 (pass5,da4)
<ATA ST500DM002-1BD14 KC65> at scbus33 target 3 lun 0 (pass6,da5)
可見,當前系統有一個 CD 驅動器,兩塊VMware提供的硬碟以及4塊走通的 ATA 硬碟組成.
檢視當前分割槽:
root@nfs:/home/panjie # gpart show
=> 40 62914480 da0 GPT (30G)
40 1024 1 freebsd-boot (512K)
1064 984 - free - (492K)
2048 4194304 2 freebsd-swap (2.0G)
4196352 58716160 3 freebsd-zfs (28G)
62912512 2008 - free - (1.0M)
=> 40 62914480 da1 GPT (30G)
40 1024 1 freebsd-boot (512K)
1064 984 - free - (492K)
2048 4194304 2 freebsd-swap (2.0G)
4196352 58716160 3 freebsd-zfs (28G)
62912512 2008 - free - (1.0M)
檢視池資訊
root@nfs:/home/panjie # zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
zroot 27.5G 1.35G 26.1G - - 0% 4% 1.00x ONLINE -
可見,當前有一個zroot池,大小為27.5GT,已使用了1.35G,可用容量為26.1G,使用率為4%,狀態為線上.
接下來我看看這個zroot池由幾個VDEV組成:
root@nfs:/home/panjie # zpool status
pool: zroot
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
da0p3 ONLINE 0 0 0
da1p3 ONLINE 0 0 0
errors: No known data errors
可見當前zroot由一個VDEV組成,名稱為mirror-0,該VDEV中有兩塊硬碟塊(da0p3實際上是da0硬碟的第3個分割槽)組成.
接下來我們使用另外4塊硬碟組成RAIDZ,並新建一個池叫:yzpool
建立池及RAIDZ
RAIDZ也叫RAIDZ1,指使用1塊硬碟來做備份,組成RAIDZ要求最少有3塊硬碟。
root@nfs:/home/panjie # zpool create -f yzpool raidz da2 da3 da4 da5
root@nfs:/home/panjie # zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
yzpool 1.81T 912K 1.81T - - 0% 0% 1.00x ONLINE -
zroot 27.5G 1.35G 26.1G - - 0% 4% 1.00x ONLINE -
此時我們便有了兩個pool,其中一個zroot用於執行系統,該pool有兩塊大小均為30G的虛擬硬碟組成,分別存放在兩塊不同的物理硬碟上。這保證了其中一塊損壞後系統也可以正常執行。另一個yzpool由4塊硬碟組成,兩塊500G,兩塊1T。得益於 ZFS 的優秀機制,我們後期可以任意替換容器小的硬碟從而達到提升儲存池大小的目的。
root@nfs:/home/panjie # zpool status yzpool
pool: yzpool
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
yzpool ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
da2 ONLINE 0 0 0
da3 ONLINE 0 0 0
da4 ONLINE 0 0 0
da5 ONLINE 0 0 0
errors: No known data errors
此時yzpool這個新池已經被自動掛載到/yzpool上了:
root@nfs:/yzpool # df -h
...
yzpool 1.3T 140K 1.3T 0% /yzpool
其它
# 檢視yzpool儲存池寫入讀取狀態
# zpool iostat -v yzpool
# 檢視更多寫入、等待狀態
# zpool iostat -vly yzpool 1 1