HxHippy

ZFS Pool Management

Creating, managing, and maintaining ZFS storage pools.

Last updated: 2025-01-15

Creating Pools

Single Disk Pool

# Basic pool (no redundancy)
zpool create tank /dev/da1

# With options
zpool create -o ashift=12 tank /dev/da1
# ashift=12 for 4K sector drives (most modern drives)

Mirror Pool (RAID 1)

# Two-disk mirror
zpool create tank mirror /dev/da1 /dev/da2

# Three-way mirror
zpool create tank mirror /dev/da1 /dev/da2 /dev/da3

RAID-Z Pools

# RAID-Z1 (single parity, like RAID 5)
zpool create tank raidz /dev/da1 /dev/da2 /dev/da3

# RAID-Z2 (double parity, like RAID 6)
zpool create tank raidz2 /dev/da1 /dev/da2 /dev/da3 /dev/da4

# RAID-Z3 (triple parity)
zpool create tank raidz3 /dev/da1 /dev/da2 /dev/da3 /dev/da4 /dev/da5

Striped Mirrors (RAID 10)

# Two mirrored pairs striped together
zpool create tank mirror /dev/da1 /dev/da2 mirror /dev/da3 /dev/da4

Pool Management

View Pool Status

# Summary
zpool list

# Detailed status
zpool status

# IO statistics
zpool iostat 5  # Every 5 seconds

# Pool history
zpool history tank

Adding Capacity

# Add vdev to pool (extends capacity)
zpool add tank mirror /dev/da5 /dev/da6

# WARNING: This stripes the new vdev
# You cannot remove vdevs once added!

# Add cache device (L2ARC)
zpool add tank cache /dev/nvme0

# Add log device (SLOG/ZIL)
zpool add tank log mirror /dev/nvme1 /dev/nvme2

Replacing Disks

# Replace failed disk
zpool replace tank /dev/da2 /dev/da5

# Resilver status
zpool status

# Offline a disk for maintenance
zpool offline tank /dev/da2

# Bring back online
zpool online tank /dev/da2

Scrub (Data Integrity Check)

# Start scrub
zpool scrub tank

# Check scrub progress
zpool status

# Schedule regular scrubs (cron)
# Add to /etc/cron.d/zfs-scrub:
0 2 * * 0 root /sbin/zpool scrub tank

Pool Properties

# View all properties
zpool get all tank

# Set property
zpool set autoexpand=on tank

# Important properties:
# - autoexpand: Auto-expand pool when larger disks added
# - autoreplace: Auto-replace disk with spare
# - bootfs: Dataset to boot from
# - cachefile: Location of pool cache file

Import/Export

# Export pool (for moving to another system)
zpool export tank

# Scan for importable pools
zpool import

# Import pool
zpool import tank

# Import with new name
zpool import tank newtank

# Import read-only
zpool import -o readonly=on tank

Destroy Pool

# WARNING: Destroys all data!
zpool destroy tank

# Force destroy
zpool destroy -f tank
intermediate ZFS Updated 2025-01-15
  • zfs
  • zpool
  • pool
  • storage
  • raid
  • mirror