3 ms·
With ZFS you can just partition larger and smaller disks to fir your needs. Lets assume you have 3 disks: - 10 TB - 5 TB - 8 TB Here is how you would partiti
by vermaden 5y ago
With ZFS you can just partition larger and smaller disks to fir your needs.
Lets assume you have 3 disks:
- 10 TB
- 5 TB
- 8 TB
Here is how you would partition them:
disk A - 10 TB <_ZFS RAIDZ - disk 1/3 - 5 TB SIZE_> | <_ZFS MIRROR - disk 1/2 - 3 TB SIZE_> | <_ZFS STRIPE - disk 1/1 - 2 TB SIZE_>
disk B - 5 TB <_ZFS RAIDZ - disk 2/3 - 5 TB SIZE_>
disk C - 8 TB <_ZFS RAIDZ - disk 3/3 - 5 TB SIZE_> | <_ZFS MIRROR - disk 2/2 - 3 TB SIZE_>
This way you can create three separate pools:
5 TB each disk ZFS RAIDZ = 10 TB effective space with redundantion
3 TB each disk ZFS MIRROR = 3 TB effective space with redundantion
2 TB single disk ZFS STRIPE = 2 TB effective space without redundantion
You can of course 'connect' the two redundant ZFS pools into one with these commands below on creation.
This is a test that I just did on FreeBSD but with GB units instead of TB as with real disks:
# truncate -s 10G disk10
# truncate -s 5G disk5
# truncate -s 8G disk8
# mdconfig.sh -c disk10
IN: created vnode at /dev/md0
# mdconfig.sh -c disk5
IN: created vnode at /dev/md1
# mdconfig.sh -c disk8
IN: created vnode at /dev/md2
# gpart create -s GPT md0
md0 created
# gpart add -t freebsd-zfs -s 5g md0
md0p1 added
# gpart add -t freebsd-zfs -s 3g md0
md0p2 added
# gpart add -t freebsd-zfs md0
md0p3 added
# gpart create -s GPT md1
md1 created
# gpart add -t freebsd-zfs md1
md1p1 added
# gpart create -s GPT md2
md2 created
# gpart add -t freebsd-zfs -s 5g md2
md2p1 added
# gpart add -t freebsd-zfs md2
md2p2 added
# zpool create HYBRID raidz /dev/md0p1 /dev/md1p1 /dev/md2p1 mirror /dev/md0p2 /dev/md2p2
# zpool create NONRED /dev/md0p3
# zpool list HYBRID
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
HYBRID 17.2G 161K 17.2G - - 0% 0% 1.00x ONLINE -
# zfs list HYBRID
NAME USED AVAIL REFER MOUNTPOINT
HYBRID 126K 12.0G 27.3K /HYBRID
# zpool status HYBRID
pool: HYBRID
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
HYBRID ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
md0p1 ONLINE 0 0 0
md1p1 ONLINE 0 0 0
md2p1 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
md0p2 ONLINE 0 0 0
md2p2 ONLINE 0 0 0
errors: No known data errors
# zpool list NONRED
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
NONRED 1.88G 108K 1.87G - - 0% 0% 1.00x ONLINE -
# zfs list NONRED
NAME USED AVAIL REFER MOUNTPOINT
NONRED 108K 1.75G 24K /NONRED
# zpool status NONRED
pool: NONRED
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
NONRED ONLINE 0 0 0
md0p3 ONLINE 0 0 0
errors: No known data errors
This means that instead of that 12 GB space on real 10/8/5 TB disks you would get 12 TB of redundant space and 2 TB of non-redundant space.
Instructions for real SATA disks on FreeBSD:
# gpart create -s GPT ada0
ada0 created
# gpart add -t freebsd-zfs -s 5t ada0
ada0p1 added
# gpart add -t freebsd-zfs -s 3t ada0
ada0p2 added
# gpart add -t freebsd-zfs ada0
ada0p3 added
# gpart create -s GPT ada1
ada1 created
# gpart add -t freebsd-zfs ada1
ada1p1 added
# gpart create -s GPT ada2
ada2 created
# gpart add -t freebsd-zfs -s 5t ada2
ada2p1 added
# gpart add -t freebsd-zfs ada2
ada2p2 added
# zpool create HYBRID raidz /dev/ada0p1 /dev/ada1p1 /dev/ada2p1 mirror /dev/ada0p2 /dev/ada2p2
You can also create two separate ZFS pools like that:
# zpool create RAID5 raidz /dev/ada0p1 /dev/ada1p1 /dev/ada2p1
# zpool create MIRRORED mirror /dev/ada0p2 /dev/ada2p2
The mdconfig.sh script is here:
- https://github.com/vermaden/scripts/blob/master/mdconfig.sh https://github.com/vermaden/scripts/blob/master/mdconfig.sh
Hope that helps.
After all the 'stable' years with ZFS/OpenZFS I would just not trust 'some new hybrid RAID' implementation ... not to mention all the ZFS features like compression/deduplication/snapshots/clones/copies/bookmarks/send/recv/...
Regards.