Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Nov 2007 20:55:29 +0100
From:      Erik Trulsson <ertr1013@student.uu.se>
To:        Gert Lynge <gert@lynge.org>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: SV: RAID1 synchronisation - howto OR not necessary?
Message-ID:  <20071123195529.GA86913@owl.midgard.homeip.net>
In-Reply-To: <01e301c82dfa$f049c720$d0dd5560$@org>
References:  <20071122155640.fa7e0536.wmoran@potentialtech.com> <20071123092146.E0E1B2878E@smtp.proximedia.com> <14989d6e0711230545k4b32c55bs3564647043f9f4ed@mail.gmail.com> <20071123150500.GA85473@owl.midgard.homeip.net> <01e301c82dfa$f049c720$d0dd5560$@org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Nov 23, 2007 at 07:01:56PM +0100, Gert Lynge wrote:
> >The disks themselves handle the checksumming to detect bad blocks.
> >With modern disks it is *very* rare that a block on the disk goes bad
> >without the disk being able to report it it as such.  
> >This means that if you have a functioning RAID1 setup and one of the
> >disks report a bad block, then the controller can simply read the
> >corresponding block from the other disk, and rewrite it to the disk
> >with the bad block.  If a disk has problems writing a block it will
> >transparently re-map the block to another.
> >The problems can occur when one disk in a RAID-array has failed and you
> >try to rebuild it from the other disk(s). If you then encounter a bad block
> >on that disk you have a problem since you don't have a good copy of that
> >block.
> >This is what verification (which, btw, is not the same as synchronization)
> >tries to prevent by reading every block on each disk on a regular basis. 
> >Then the RAID controller can recover the data on any bad blocks from the
> >other disk(s) in the array.
> 
> I've been wondering how to do this with a BIOS assisted soft raid for some
> time.
> I have a server with ad4 ad6 in a mirror detected as ar0:
> ----
> ws# atacontrol status ar0
> ar0: ATA RAID1 subdisks: ad4 ad6 status: READY
> ----
> ws# cat /var/run/dmesg.boot
> [...]
> ar0: 76316MB <Intel MatrixRAID RAID1> status: READY
> ar0: disk0 READY (master) using ad4 at ata2-master
> ar0: disk1 READY (mirror) using ad6 at ata3-master
> [...]
> ----
> 
> ...and was wondering if dd could not do the job for me?
> ----
> ws# man dd
> [...]
> EXAMPLES
>      Check that a disk drive contains no bad blocks:
>            dd if=/dev/ad0 of=/dev/null bs=1m
> [...]
> ----
> 
> What if I run:
> dd if=/dev/ad4 /of=/dev/null bs=1m
> dd if=/dev/ad6 /of=/dev/null bs=1m
> 
> ...once a week - will that not verify that the two drives can read all
> blocks?

Yes.  If those complete without any errors then you know that the disks are
fine.
If one of the disks show a bad block you could then try using 'dd' to copy
that block from the other disk.  Hopefully this will not confuse the
ataraid(4) code.  It shouldn't, but you never know.


> 
> It would be nice to limit the load (the throughput of dd) though - anyone
> know if that is possible? Maybe by pipeing through a second command (I guess
> a throughput limiter could easily be programmed?).
> 

-- 
<Insert your favourite quote here.>
Erik Trulsson
ertr1013@student.uu.se



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20071123195529.GA86913>