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