Using replace is the preferred solution, and 2-3x faster than balance. (device remove first rebalances. Perhaps it doesn't use the soft conversion type making it slower)
This answer prevents the failed disk from blocking kernel I/O.
I did the following:
Ensured that the degraded filesystem was
noautoin/etc/fstabRebooted the machine (which took about 20 minutes due to I/O hangs)
Disabled the LVM VG containing the btrfs fs on the failed drive:
sudo vgchange -an <failed-vg>Disabled the failed device:
echo 1 | sudo tee /sys/block/sdb/device/deleteMounted the filesystem
-o rw,degraded(Note:degradedcan only be used once)Got the failed
devidfrom:btrfs filesystem show /mountpoint-
btrfs replace start -B <devid> /dev/new-disk /mountpoint
As I'm writing this:
replace statusshows a healthy 0.1% progress every 30 seconds or soiostat -d 1 -m <target-dev>shows about 145MB/s (Seagate advertises 160MB/s)