ZFS Pool Expansion: Can Mirror VDevs Have Different Drive Sizes?


8 views

In ZFS storage configurations, mirror vdevs (virtual devices) can indeed have different drive sizes within the same pool. This is one of ZFS's powerful features for gradual storage expansion. When you add a new mirror pair with larger drives, ZFS will utilize the available space while maintaining data redundancy.

Consider this real-world case:

# Initial pool creation with 250GB mirrors
zpool create mypool mirror /dev/disk1 /dev/disk2

# Later expansion with 500GB mirrors
zpool add mypool mirror /dev/disk3 /dev/disk4

The resulting pool will have:

  • First mirror: 250GB usable (2x250GB drives)
  • Second mirror: 500GB usable (2x500GB drives)
  • Total usable space: 750GB

ZFS treats each vdev independently when calculating available space. The key points:

  • Each mirror vdev's capacity equals its smallest member drive
  • ZFS stripes data across all vdevs in the pool
  • No capacity is wasted in the larger mirror pair

While this configuration works, be aware of:

# Check vdev sizes in your pool:
zpool list -v
  • Performance characteristics may differ between vdevs
  • Rebalance operations won't happen automatically
  • Future replacements should match the vdev's original size

For optimal performance in mixed-size environments:

# Set allocation bias for certain datasets
zfs set special_small_blocks=32K mypool/important_data

# Monitor performance per vdev
zpool iostat -v mypool 5

This approach lets you maximize both capacity and performance when expanding your ZFS storage pool with different-sized mirror vdevs.


Yes, ZFS absolutely allows mirrored vdevs with different disk sizes within the same pool. This is one of ZFS's powerful features that enables storage expansion without requiring identical hardware across all vdevs.

Here's how you would create such a pool with different-sized mirrored pairs:


# Create initial pool with 250GB mirror
sudo zpool create mypool mirror /dev/sda /dev/sdb

# Verify the initial setup
sudo zpool status mypool

# Later, add 500GB mirror to the same pool
sudo zpool add mypool mirror /dev/sdc /dev/sdd

# Check the updated configuration
sudo zpool list -v mypool

ZFS will distribute writes across all vdevs proportionally based on their available capacity. In your scenario with one 250GB mirror and one 500GB mirror:

  • Total raw capacity: 250 + 500 = 750GB
  • Usable capacity: 750GB (since mirrors don't add capacity)
  • ZFS will naturally favor writing to the larger vdev as it has more free space

While this configuration works, there are some factors to consider:


# Check performance characteristics
zpool iostat -v mypool 1

# Monitor space allocation
zpool list -o name,size,alloc,free,cap mypool

This flexibility enables several practical scenarios:

  • Gradual storage expansion without replacing existing hardware
  • Mixing different drive generations in the same pool
  • Temporary addition of larger drives during migration

The smaller vdev will reach capacity first, potentially creating imbalance. Monitor with:


zpool status -v mypool
zfs get all mypool