Hi,
Letztes Wochenende hab' ich meine Maschine zuhause namens "
Condorito" auf
Solaris Express 7/06 aufgerüstet. Übrigens ist gerade
8/06 verfügbar geworden, also gleich installieren!
Dabei wurde ich daran erinnert, daß es eine gute Idee ist, Prototyp-Software zu aktualisieren oder zu entfernen
bevor man den Upgrade durchführt :). In diesem Fall war noch eine ältere Version vom
experimentellen OpenSolaris Powernow!-Treiber aus dem
frkit installiert, die nach dem Upgrade zu einem Panic des Kernels beim Booten geführt hat. Abhilfe: Löschen der Powernow-Moduln aus
/kernel/drv bzw.
/kernel/drv/amd64 aus dem Failsafe-Boot-Modus heraus führte wieder zu einem bootfähigen System, danach konnte das frkit den Powernow!-Treiber wieder aktualisieren. Lektion gelernt :).
Einige wissen vielleicht, daß Condorito
den Speicher für meinen PVR zur Verfügung stellt,
meine Musiksammlung iTunes-kompatibel serviert und auch sonst nützliche Dinge tut. Alles basierend auf
ZFS.
Nun galt es, Ordnung in das historische Sammelsurium von ZFS-Pools und Filesystemen zu bringen, und die bestmögliche Konfiguration für ein Maximum an Speicherkapazität bei akzeptabler Robustheit gegen Plattenverlust zu realisieren. Das erforderte ein bisschen mehr Grübeln, als zunächst angenommen:
- Insgesamt sind 4 Platten eingebaut: 2 x 80 GB, 1 x 200GB und 1 x 250 GB.
- Die erste 80GB-Platte ist gleichzeitig Boot-Platte, mit knapp 8GB
root und 0,5 GB swap-Partitionen. - Zwei Platten/Slices als Mirror zu betreiben ist zwar relativ robust, aber dafür verliert man auch die Hälfte der Kapazität. Mit RAID-Z ist es möglich, ähnlich wie mit RAID-5 mehr als 2 Platten pro vdev zu konfigurieren, den Verlust einer Platte ohne Datenverlust tolerieren zu können und dabei immer noch (n-1) * minimale Kapazität pro Platte an Speicherplatz zu bekommen, mit n>=2.
- RAID-Z mit möglichst vielen Platten liefert also immer mehr Speicherkapazität, doch wie holt man aus diesem Zoo von Platten das Beste heraus?
Die Antwort ist, die Platten nach folgenden Regeln in Slices zu unterteilen:

- Suche die größtmögliche Slice-Größe, die auf jeder der 4 Platten angelegt werden kann und lege sie an. Theoretisch ist diese ja 80GB groß, aber eine der 80-er Platten soll ja noch einen Slice für Boot (knapp 8GB) bzw. Swap (0,5 GB) haben, also kommt hier inkl. Rundung etc. eine Slice-Größe von gut 68GB heraus.
- Jetzt finde die größtmögliche Slice-Größe, die auf 3 Platten angelegt werden kann. Nun hat nämlich die zweite 80 GB-Platte keine root/swap-Bürde und so ergibt sich hier die Möglichkeit, 3 Slices mit gut 6GB anzulegen (die 2. Platte ist auch geringfügig kleiner als die erste).
- Jetzt bleiben die beiden großen Platten übrig, hier kann man je einen Slice von gut 111GB anlegen.
- Zum Schluß bildet man ein RAID-Z vdev über die 4 x 68 GB Slices, eins über die 3 x 6 GB (Kleinvieh macht bekanntlich auch Mist), sowie ein Mirror-vdev über die 2 großen Slices mit je 111GB. Das alles läßt sich dann dank zpool -f als ein großer Pool anlegen.
- Es bleibt auf der 250GB noch Platz übrig, hier kann man einen zweiten Satz root/swap slices für Live Upgrade anlegen und den Rest als ungeschützten ZFS-Pool verwerten.
Klingt kompliziert, ist aber recht einfach, wenn man sich das grafisch hinmalt (s. links).
Ein bißchen wie Tetris spielen eben...