FR1 is a Linux kernel driver that adapts the kernel's own software RAID1 driver.
It's intelligent in that it doesn't blindly resynchronize a whole mirror component when only a few blocks need resyncing. That can save hours of resync time on a large device. In addition, it always chooses the fastest device to read from on reads.
The driver keeps a bitmap of pending writes in memory, and writes them to the mirror component that's just been repaired when it comes back on line. The bitmap is two-level and created pagewise on demand, so it's not too expensive.
A terabyte sized device with blocks of 4K will cost max 32MB of memory per mirror component, thus 64MB max for a two component mirror.
But in practice only a few pages of bitmap will have been allocated by the time you come to fix the device.
· Ditto for arrays with spare components. The 2.4 kernel code is very obscure in the area of array management and I can be excused! The situation has bettered in 2.6, but it is still not perfectly obvious code.
· I really don't know what to do about mirror components that have a nonzero offset recorded for them in the array metadata. I've never seen it in the field. Probably things will go horribly wrong.