Früher einmal war "vinum" der bekannteste und zuverlässigste Weg unter FreeBSD Softraids und Volumenmanagement aller Art zu implementieren. Als ein Klon des im professionellen Umfeld seinerzeit sehr verbreiteten Veritas Volume Managers war vinum sehr leistungsfähig und beliebt. Dann jedoch kam FreeBSD 5 und brachte GEOM mit. Damit funktionierte der alte vinum nicht mehr, er wurde auf "gvinum" aktualisiert. Doch gvinum war nie fertig gestellt worden, ihm fehlte Funktionalität und Geschwindigkeit. Darunter so wichtige Dinge wie ein "online rebuild", also das Neubauen eingehängter Pleyes (Volumes). Wurde er mit FreeBSD 7.0 zumindest soweit feherfrei, dass man ihn wieder benutzen konnte, kommt nun eine weitere Aktualisierung.
In den letzten Jahren haben Ulf Lilleengen und Lukas Ertl im Rahmen des Google SoC sowie ind er Zeit danach gvinum grundlegend überarbeitet. Die fehlenden Funktionen wurden eingebaut, die Architektur grundlegend überarbeitet und eine ganze Reihe Fehler beseitigt. gvinum kann nun wieder zur Laufzeit eingehängt und ausgehängt werden, man kann diverse RAID-Typen nutzen (mirror, stripe, concat, raid5), Plexes können wieder aufgebaut werden, wärend das System läuft und genutzt wird, defekte Laufwerke verschwinden nicht mehr ohne Warnung, Plexes können zur Laufzeit erweitert werden, etc. Viele dieser Funktionalität ist schon durch andere GEOM-Klassen abgedeckt, aber dennoch ist gvinum sinnvoll. Erfüllt es doch den Ruf nach einem integrierten Volumenmanager abseits von ZFS.
In den letzten Jahren haben Ulf Lilleengen und Lukas Ertl im Rahmen des Google SoC sowie ind er Zeit danach gvinum grundlegend überarbeitet. Die fehlenden Funktionen wurden eingebaut, die Architektur grundlegend überarbeitet und eine ganze Reihe Fehler beseitigt. gvinum kann nun wieder zur Laufzeit eingehängt und ausgehängt werden, man kann diverse RAID-Typen nutzen (mirror, stripe, concat, raid5), Plexes können wieder aufgebaut werden, wärend das System läuft und genutzt wird, defekte Laufwerke verschwinden nicht mehr ohne Warnung, Plexes können zur Laufzeit erweitert werden, etc. Viele dieser Funktionalität ist schon durch andere GEOM-Klassen abgedeckt, aber dennoch ist gvinum sinnvoll. Erfüllt es doch den Ruf nach einem integrierten Volumenmanager abseits von ZFS.
Ulf Lilleengen schrieb:Date: Mon, 16 Mar 2009 16:58:00 +0100
From: Ulf Lilleengen <lulf@FreeBSD.org>
To: freebsd-current@freebsd.org
Cc: freebsd-arch@freebsd.org, freebsd-geom@freebsd.org
Subject: [HEADS UP] Merge of projects/gvinum to head
[-- PGP Ausgabe folgt (aktuelle Zeit: Di 17 Mär 09:57:51 2009) --]
gpg: WARNING: This version has been built with support for the Camellia cipher.
gpg: It is for testing only and is NOT for production use!
Warning: using insecure memory!
gpg: Unterschrift vom Mo 16 Mär 16:57:52 2009 CET mittels DSA-Schlüssel ID
+73087425
gpg: Korrekte Unterschrift von "Ulf Lilleengen <lulf@idi.ntnu.no>"
gpg: alias "Ulf Lilleengen <lulf@bbnett.no>"
gpg: alias "Ulf Lilleengen <lulf@FreeBSD.org>"
gpg: alias "Ulf Lilleengen <lulf@pvv.ntnu.no>"
gpg: alias "Ulf Lilleengen <lulf@kerneled.com>"
gpg: alias "Ulf Lilleengen <lulf@kerneled.org>"
gpg: alias "Ulf Lilleengen <lulf@stud.ntnu.no>"
gpg: WARNUNG: Dieser Schlüssel trägt keine vertrauenswürdige Signatur!
gpg: Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen
+Besitzer gehört.
Haupt-Fingerabdruck = FDC2 6422 3949 9965 0F33 8726 0882 E0F2 7308 7425
[-- Ende der PGP-Ausgabe --]
[-- Die folgenden Daten sind signiert --]
Hello,
This is a heads-up for a merge of gvinum project code into HEAD. This means
that gvinum implementation will be changed some. The code is based on the
work done by Lukas Ertl as well as the work I did before/during Google SoC
2007 and afterwards. It has been staying in p4 for some time, and then moved
to the subversion project repository not long ago. The main reason for the
delay of getting this into HEAD have been the lack of reviewers of the code,
but after some discussion and help from testers, I've decided this is a good
time to get it in (should perhaps have been merged a bit earlier) Testers
have spotted several differences from the original gvinum, and I've tried to
make it behave as the old implementation wherever that seemed the best way to
go. Luckily, the work has gotten a bit of attention lately, thanks to Rick C.
Petty for helping out with testing and bugfixing, as well as all others who
have dared to run the new gvinum. So, what does this update offer?
From the user aspect:
- Implementation of many of the missing commands from the old vinum:
attach/detach, start (was partially implemented), stop (was partially
implemented), concat, mirror, stripe, raid5 (shortcuts for creating volumes
with one plex of these organizations).
- Support for fixing degraded plexes while mounted. - Support for growing
for striped and raid5-plexes, meaning that one can extend the volumes for
these plex types in addition to the concat type. Also works while the
volume is mounted.
- The parity check and rebuild no longer goes between userland/kernel,
meaning that your gvinum command will not stay and wait forever for the
rebuild to finish. You can instead watch the status with the list command.
- Many problems with gvinum have been reported since 5.x, and some has been
hard to fix due to the complicated architecture. Hopefully, it should be
more stable and better handle edge cases that previously made gvinum
crash.
- Failed drives no longer disappears entirely, but now leave behind a dummy
drive that makes sure the original state is not forgotten in case the
system is rebooted between drive failures/swaps.
From the technical aspect:
- Gvinum now uses one single workerthread instead of one thread for each
volume and each plex. The reason for this is that the previous scheme was
very complex, and was the cause of many of the bugs discovered in gvinum.
Instead, gvinum now uses one worker thread with an event queue, quite
similar to what used in gmirror.
- The rebuild/grow/initialize/parity check routines no longer runs in
separate threads, but are run as regular I/O requests with special flags.
This made it easier to support on-mount growing and parity rebuild.
Probably, there are many other issues that have been fixed, perhaps new
issues introduced. This is why this is dropped in HEAD now, to give it more
attention from the uses before the 8.0 branch. All in all, this will make
gvinum an easier beast to handle for users. If you have any issues related to
this, send in problem reports or drop me an e-mail, and I'll take a look.
For interested reviewers, the code resides in
svn://svn.freebsd.org/base/projects/gvinum
--
Ulf Lilleengen
[-- Ende der signierten Daten --]

