On Wed, 19 Jan 2011 08:42:53 +0100 (CET) Mikael Abrahamsson <swmike@xxxxxxxxx> wrote: > On Tue, 18 Jan 2011, Marc MERLIN wrote: > > > Does this actually do what I want? Try all the blocks on each drive and > > if one block is unreadable, it forces a rewrite on the bad drive using > > the n-1 other ones to recreate it? > > You want to use the "repair" command. This has been discussed numerous > times and discussions regarding it can be found in the archives. > No, he actually wants the 'check' command, though 'repair' would work too. All you need to do is get md/raid5 to try reading the bad block. Once it does that it will get a read error and automagically try to correct it. You could do the math, figure out where in the array the bad block is and use e.g. dd to just read that block. That could work, but if the block is a parity block, then it probably won't. 'check' (i.e. echo check > /sys/block/mdXX/md/sync_action) will cause md/raid5 to read all blocks on all devices, thus auto-repairing any unreadable blocks. 'repair' will also do that but if it find that the parity looks wrong, it will try to correct the parity. It is generally best to only use 'repair' when you have good reason to believe that you need it. If you were really keen, you could cd /sys/block/mdXX/md echo 3907029168 > sync_min echo 3907029170 > sync_max echo check > sync_action and it will just sync that stripe. Though you need to adjust for any Data Offset if using 1.1 or 1.2 metadata, and you might need to round both numbers of to the next page or maybe next chunk, I'm not sure. NeilBrown -- To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html