16.07.2015 11:01, Vladimir 'φ-coder/phcoder' Serbinenko пишет: > On 16.07.2015 05:42, Andrei Borzenkov wrote: >> В Wed, 15 Jul 2015 20:05:56 +0200 >> Vladimir 'φ-coder/phcoder' Serbinenko пишет: >> >>> On 28.06.2015 20:06, Andrei Borzenkov wrote: >>>> I was looking at implementing detection of outdated RAID members. >>>> Unfortunately it appears to be fundamentally incompatible with lazy >>>> scanning as implemented currently by GRUB. We simply cannot stop >>>> scanning for other copies of metadata once "enough" was seen. Because >>>> any other disk may contain more actual copy which invalidates >>>> everything seen up to this point. >>>> >>>> So basically either we officially admit that GRUB is not able to detect >>>> stale members or we drop lazy scanning. >>>> >>>> Comments, ideas? >>>> >>> We don't need to see all disks to decide that there is no staleness. If >>> you have an array with N devices and you can lose at most K of them, >>> then you can check for staleness after you have seen max(K+1, N-K) >>> drives. Why? >>> >> >> It's not the problem. The problem is what to do if you see disk with >> generation N+1 after you assembled array with generation N. This can >> mean that what we see is old copy and we should through it away and >> start collecting new one. If I read Linux MD code correctly, that is >> what it actually does. And this means we cannot stop scanning even >> after array is complete. >> > While it's true that it's possible that all the members we have seen are > stale, it shouldn't be common and it's not the biggest problem. Biggest > problem is inconsistency. > We can never guarantee of having seen all the disks as they may not be > eeven visible through firmware but it shouldn't stop us from fixing the > inconsistency problem. >> Extreme example is three-pieces mirror where each piece is actually >> perfectly valid and usable by itself so losing two of them still means >> we can continue to work with remaining one. >> > Mirrors get completely assembled in my patch. > I fixed trivial read error in case of raid1/raid10 (see attached patch). It works in naive testing. We need regression tests for stale data.