Linux VPS

Replace a failed disk in a Proxmox ZFS pool

Spot a degraded ZFS pool on Proxmox, identify the failed disk by serial number, replace it with zpool replace, and fix the boot partitions when it is a boot disk.

AdvancedProxmox VE2 min read

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 -x

Look 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

  1. Optionally take the failed disk offline: zpool offline tank OLD_DEVICE.
  2. Swap the physical disk.
  3. 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
  1. Watch the resilver with zpool status tank until it shows ONLINE.

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_DISK
sgdisk -G /dev/NEW_DISK
zpool replace -f rpool OLD_ZFS_PARTITION /dev/disk/by-id/NEW_DISK-part3

Then 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 status shows all devices ONLINE and no errors.
  • Run a scrub when the resilver finishes: zpool scrub tank.
  • For rpool, proxmox-boot-tool status lists 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.

Next steps

Was this guide helpful?

Still stuck?

Ask MdmHost AI for a quick answer, or open a ticket and our team will take a look. We are here 24/7.