Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Mar 2004 19:28:53 -0300
From:      Joao Carlos Mendes Luis <jonny@faperj.br>
To:        grog@freebsd.org
Cc:        jonny@jonny.eng.br
Subject:   Serious bug in vinum?
Message-ID:  <20040326222853.GA93269@zeus.faperj.br>

next in thread | raw e-mail | index | archive | help
Hi Greg,

    I've been a big fan of vinum since it's beggining.  I use it for RAID0
and RAID1 solution for lots of servers.

    In some RAID0 (stripe) configurations, though, I've had some serious
problems.  If an underlying disk fails, the respective plex and volume do
not fail, as they should.  This leads to full corruption of data, but worst
of that, leads to a system which believes the data is safe.  In one ocasion,
for example, the backup ran and overwrote good data with bad data, full of
zeros.

    I am not fully aware of vinum programming details, but a quick look at
4.9-STABLE, in file vinumstate.c, dated Jul, 7, 2000, at line 588, function
update_volume_state() sets volume state to up if plex state is corrupt or
better for at least one plex:

    for (plexno = 0; plexno < vol->plexes; plexno++) {
        struct plex *plex = &PLEX[vol->plex[plexno]];       /* point to the plex */
        if (plex->state >= plex_corrupt) {                  /* something accessible, */
            vol->state = volume_up;
            break;
        }
    }
 
    I think this should be like:

        if (plex->state > plex_corrupt) {                  /* something accessible, */

    Or, in other words, volume state is up only if plex state is degraded
or better.

    I did not test this, since the situation is not easy to reproduce, but
I think it depends only on the real meaning of the "corrupt" state.

    Thanks in advance for your attention,

				Jonny



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