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
at scbus2 target 0 lun 0 (cd0,pass0)
at scbus32 target 0 lun 0 (pass1,da0)
at scbus32 target 1 lun 0 (pass2,da1)
at scbus33 target 0 lun 0 (pass3,da2)
at scbus33 target 1 lun 0 (pass4,da3)
at scbus33 target 2 lun 0 (pass5,da4)
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