I have a software RAID5 array (Linux md) on 4 disks. I would like to replace one of the disks with a new one, without putting the array in a degraded state, and if possible, online. How would that be possible? It's important because I don't wan't to: take the risk of stressing the other disks so one may crash during rebuild, take the risk of being in a no-parity state so I don't have a safety net for some time. I suppose doing so online is too much asking and I should just raw copy (dd) the data of the old disk to the new one offline and then replace it, but I think it is theoretically possible... Some context: Those disks have all been spinning almost continuously for more than 5.5 years. They still work perfectly for the moment and they all pass the (long) SMART self-test. However, I have reasons to think that one of those 4 disks will not last much longer (supposed predictive failure). 
How to safely replace a not-yet-failed disk in a Linux RAID5 array?
linux;software raid;mdadm;raid5
Using mdadm 3.3Since mdadm 3.3 (released 2013, Sep 3), if you have a 3.2+ kernel, you can proceed as follows: # mdadm /dev/md0 --add /dev/sdc1# mdadm /dev/md0 --replace /dev/sdd1 --with /dev/sdc1sdd1 is the device you want to replace, sdc1 is the preferred device to do so and must be declared as a spare on your array. The --with option is optional, if not specified, any available spare will be used.Older mdadm versionNote: You still need a 3.2+ kernel. First, add a new drive as a spare (replace md0 and sdc1 with your RAID and disk device, respectively):# mdadm /dev/md0 --add /dev/sdc1Then, initiate a copy-replace operation like this (sdd1 being the failing device):# echo want_replacement > /sys/block/md0/md/dev-sdd1/state ResultThe system will copy all readable blocks from sdd1 to sdc1. If it comes to an unreadable block, it will reconstruct it from parity. Once the operation is complete, the former spare (here: sdc1) will become active, and the failing drive will be marked as failed (F) so you can remove it.Note: credit goes to frostschutz and Ansgar Esztermann who found the original solution (see the duplicate question). Older kernelsOther answers suggest: Johnny's approach: convert array to RAID6, replace the disk, then back to RAID5, Hauke Laging's approach: briefly remove the disk from the RAID5 array, make it part of a RAID1 (mirror) with the new disk and add that mirror drive back to the RAID5 array (theoretical)...