ZFS mirrors and RAIDZ keep running when a disk dies, but the pool is DEGRADED until you replace it, and another failure could lose data. This guide shows how to replace a failed disk in a Proxmox ZFS pool, including the boot pool.
Before you start
- A replacement disk the same size or larger.
- Root shell access, and remote hands or physical access to swap the disk.
- A recent backup, in case something else fails during the rebuild.
Find the failed disk
zpool status -xLook for a device marked FAULTED, UNAVAIL or with many errors. Match it to a physical disk by serial number:
ls -l /dev/disk/by-id/Note the serial so the data centre removes the right disk. Pulling a healthy disk from a degraded mirror loses the pool.
Warning: Confirm the serial number of the disk to remove before anyone touches the server.
Replace a data disk
- Optionally take the failed disk offline:
zpool offline tank OLD_DEVICE. - Swap the physical disk.
- Replace it in the pool, using stable by-id names:
zpool replace tank /dev/disk/by-id/OLD_DISK_ID /dev/disk/by-id/NEW_DISK_ID- Watch the resilver with
zpool status tankuntil it showsONLINE.
Replace a disk in the boot pool (rpool)
Proxmox boot disks have extra partitions for the bootloader, so copy the partition table first, then replace only the ZFS partition:
sgdisk /dev/HEALTHY_DISK -R /dev/NEW_DISKsgdisk -G /dev/NEW_DISKzpool replace -f rpool OLD_ZFS_PARTITION /dev/disk/by-id/NEW_DISK-part3Then make the new disk bootable with proxmox-boot-tool (format and init its ESP partition, usually -part2), as described in the Proxmox documentation. Partition numbers depend on how the system was installed; check with lsblk.
Check afterwards
zpool statusshows all devicesONLINEand no errors.- Run a scrub when the resilver finishes:
zpool scrub tank. - For rpool,
proxmox-boot-tool statuslists both disks.
Troubleshooting
- "device is too small": the new disk is slightly smaller; use a larger disk.
- Resilver very slow: normal on large HDDs; avoid heavy load during the rebuild.
- Checksum errors but disk online: check cables and SMART (
smartctl -a) before replacing.
Frequently asked questions
Do I need to stop VMs?
No, the pool stays online during replacement and resilver.
How do I get warned next time?
Configure ZFS event emails and Proxmox notifications (email notifications).
Can I grow the pool with bigger disks?
Yes: replace every disk in a vdev with larger ones and enable autoexpand.
