WintelGuy.com

RAIDZ / dRAID Comparison Calculator

Compare side-by-side usable capacity of two different dRAID or RAIDZ configurations based on the number of disk drives, required parity level, and group width.

 
Configuration #1
Configuration #2
RAID type Select the desired RAID type.
Disk capacity Enter the disk capacity in GB or TB.
Disk sector size Choose the disk sector size (ashift)
ZFS record size ZFS record size (for information only).
Number of vdevs Enter the number of top-level vdevs in the pool.
RAIDZ Parameters
 
Drives per RAIDZ vdev Provide the number of drives per RAIDZ group.
dRAID Parameters
 
Child devices per vdev Input the total number of child devices per vdev (C).
 c
 c
Spare devices per vdev Submit the number of distributed spare devices per vdev (S).
 s
 s
Data devices per group Provide the number of data devices per redundancy group (D).
 d
 d
Configuration #1Configuration #2
RAID type: RAIDZ2dRAID2
Parity level: 22
Number of top-level vdevs: 31
Total spares: 1
Total number of drives: 2424
Capacity (TiB)
Single drive capacity: 0.4550.455
Total raw storage (w/o spares): 10.91410.459
Zpool storage capacity: 10.87510.453
Reservation for parity: 3.1442.103
Slop space allocation: 0.1250.125
ZFS usable storage capacity: 7.6068.225
Storage efficiency: 69.69 %78.64 %

About RAIDZ / dRAID Comparison Capacity Calculator

The RAIDZ / dRAID Comparison Capacity Calculator compares the usable storage capacity of two different RAIDZ or distributed RAID (dRAID) storage pools. It calculates raw, zpool, and usable file system capacity based on the selected RAID type, the number of vdevs, and redundancy group configuration.

Provide the following values:

  • RAID type - Select the desired RAID type. Supported RAID levels are:
    • dRAID1 (distributed single parity);
    • dRAID2 (distributed double parity);
    • dRAID3 (distributed triple parity);
    • RAID-Z1 (single parity with variable stripe width);
    • RAID-Z2 (double parity with variable stripe width);
    • RAID-Z3 (triple parity with variable stripe width).
  • Disk capacity - we expect this number to be in gigabytes (GB) or terabytes (TB) (powers of 10), in-line with the way disk capacity is marked by the manufacturers. This number will be converted to tebibytes (TiB) (powers of 2) for calculations. Note: 1 TB = 1000 GB = 1012 B and 1 TiB = 1024 GiB = 240 B.
  • Disk sector size - Choose the sector size. Supported sector sizes and corresponding ashift values:
    • 512 B (ashift=9);
    • 4 KiB (ashift=12).
  • Number of vdevs - the number of top-level vdevs in the pool.
  • RAIDZ Parameters:
    • Number of drives per RAID group - the number of drives per vdev.
  • dRAID Parameters:
    • Child devices per vdev - the number of child devices per vdev (C).
    • Spare devices per vdev - the number of distributed spare devices per vdev (S).
    • Data devices per group - the number of data devices per redundancy group (D).

Click Calculate to estimate the resulting raw, zpool and usable ZFS capacity.

The tool follows the OpenZFS capacity calculations model and takes into account capacity adjustments and allocations for partitioning, ZFS labels, RAID layout, parity, and slop space. It provides the following results:

  • Total raw storage capacity - the total storage capacity of all disks in the pool, excluding spares.
  • Zpool storage capacity - calculated by subtracting the space overhead for drive partitioning and metaslab allocation from the total raw pool capacity. This value should be pretty close to the ALLOC value reported by the zpool list command.
  • Reservation for parity - space allocated for storage of parity blocks.
  • Slop space allocation - equals to 1/32 of the capacity of the pool or at least 128 MiB, but never more than the lesser of 128 GiB or half the pool size.
  • ZFS usable storage capacity - calculated by subtracting the parity reservation and the slop space allocation from the zpool storage capacity. This number should be reasonably close to the sum of the USED and AVAIL values reported by the zfs list command.

Notes:

  • This tool estimates capacity for ZFS pools created using whole disks.
  • The calculations are based on the OpenZFS implementation and take into account whole-disk partitioning, ZFS labels, RAID geometry, distributed spare allocation, parity overhead, metaslab allocation, and slop space reservation.
  • Small discrepancies between the calculated and actual capacity values may occur due to approximations of certain internal calculations and implementation-specific differences between ZFS versions and platforms.
  • Compression, deduplication, and snapshots are not considered when estimating usable file system capacity.
  • The calculator does not support dRAID configurations where the group width (D + P) exceeds the number of children minus the number of distributed spares (C - S).

Understanding dRAID parameters

OpenZFS typically represents a dRAID configuration using the format dRAIDP:Dd:Cc:Ss, where:

  • P (Parity) - The distributed parity level of a dRAID redundancy group. This ranges from 1 to 3 and is similar to the RAIDZ parity level:
    • dRAID1 - single parity
    • dRAID2 - dual parity
    • dRAID3 - triple parity
  • D (Data) - The number of data devices per redundancy group.
  • C (Children) - The total number of devices in the dRAID vdev.
  • S (Distributed Spares) - The number of distributed hot spares.

A dRAID vdev is comprised of multiple redundancy groups, each organized into a set of data (D) and parity (P) columns, similar to RAIDZ. However, unlike RAIDZ, the data and parity columns are not fixed to a specific set of physical devices. Instead, they are distributed across all of the child devices (C) in the dRAID vdev. The distributed parity and spare capacity (S) are allocated across all drives in the vdev. To ensure an even distribution and avoid hot spots, a predetermined permutation mapping is applied to the order of the dRAID columns. As a result, every drive in the dRAID vdev participates in storing data, parity, and a portion of the distributed spare space.

For example, the configuration dRAID2:8d:24c:2s means:

Parameter Description
dRAID2 Each redundancy group uses double parity (P = 2), allowing any two drives in the vdev to fail without data loss.
8d Each redundancy group is organized similarly to a RAIDZ2 stripe with D = 8 data columns and P = 2 parity columns, for a total of 10 columns per redundancy group.
24c The dRAID vdev consists of 24 physical devices.
2s Capacity equivalent to S = 2 spare devices is distributed across all 24 devices instead of being reserved on dedicated idle devices.

dRAID vs RAIDZ

Unlike traditional RAIDZ, dRAID distributes both parity and spare capacity across all drives in a vdev, allowing a failed drive to be rebuilt using all remaining disks simultaneously. This significantly reduces rebuild times for large storage systems while maintaining the data integrity and redundancy features of OpenZFS.

Although dRAID and RAIDZ both provide parity-based data protection in OpenZFS, they are designed for different deployment scenarios.

Feature RAIDZ dRAID
Primary use General-purpose storage pools Large storage systems with many drives
Parity Parity within each RAIDZ stripe Distributed parity allocated per redundancy groups
Spare drives Dedicated hot spares Distributed spare capacity across all drives
Rebuild (resilver) Reads only allocated data blocks Sequential rebuild using distributed spare space
Rebuild performance Slower for large vdevs Much faster for large drive counts
Typical vdev size 4-12 drives 20-100+ drives
Recommended workloads Home, SMB, virtualization, NAS Large enterprise and archival storage systems

When to use RAIDZ:

For small and medium-sized storage systems, RAIDZ is usually simpler to design, requires fewer configuration parameters, and provides excellent capacity, performance, and reliability. Most home NAS systems, virtualization servers, and small business storage arrays continue to use RAIDZ1, RAIDZ2, or RAIDZ3.

When to use dRAID:

dRAID was introduced to address one of the biggest challenges of very large storage systems: rebuilding failed drives. It is primarily intended for large pools containing dozens or hundreds of drives, where minimizing rebuild time after a drive failure is more important than maximizing storage efficiency or configuration simplicity.