Posts mit dem Label Linux werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Linux werden angezeigt. Alle Posts anzeigen

Samstag, 1. November 2008

ZFS: Eine Einführung

Krank sein nervt, aber wenn man im Bett liegt kann man sich mit ein paar Sachen befassen die man sonst eher selten macht. Ich hab die letzten Tage die ich mit Grippe im Bett gelegen hab einfach mal damit verbracht mich in einige ZFS Features einzuarbeiten und mir Gedanken darüber zu machen wie man sie in einem Blog packt. Damit auch die Linuxwelt etwas davon hat hab ich mich auch gleich noch darum gekümmert ZFS unter Ubuntu zum fliegen zu bringen.

Naja lange Rede kurzer Unsinn.

ZFS! Immer wieder hört man das es sich hierbei "nur" um ein Filesystem handelt. Ich will heute mal zeigen das das zwar stimmt, ZFS aber sehr viel mehr ist. Es ist praktisch ein Storage Werkzeugkoffer der fast alles abdeckt was einem in Sachen Storage so über den Weg laufen kann. Das Element mit dem alles anfängt ist der sogenannte zpool. In einem zpool packen wir alles was wir an Storage so nutzen wollen: Festplatte, USB-Sticks, einfach nur Dateien und was weiß ich noch für Devices. Ich werde hier aufgrund eines notorischen Festplattenmangels einfach ganz normale Files nehmen die jeweils 100MB Größe haben.

ZPools

Als erstes werden wir einfach mal die einfachste Sorte von zpools anlegen, nämlich solche die nur aus einem Datenträger bestehen.

[root@itzkoatl:zfsdemo]> zpool create tank $PWD/disk1
[root@itzkoatl:zfsdemo]> zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 95.5M 73.5K 95.4M 0% ONLINE -
[root@itzkoatl:zfsdemo]> zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
/export/home/raichoo/zfsdemo/disk1 ONLINE 0 0 0

errors: No known data errors

Das wars eigentlich schon. Alleine durch die Eingabe von zpool create tank $PWD/disk1 haben wir einen neuen zpool erstellt. Kein formatieren, kein mounten. Das File wurde direkt mit einem ZFS Filesystem auf dem mountpunkt /tank angehängt. Das dauert nur wenige Sekunden.
Was aber machen wenn man mehrere Festplatten hat und deren Platz in einem pool verwenden will?

[root@itzkoatl:zfsdemo]> zpool add tank $PWD/disk2
[root@itzkoatl:zfsdemo]> zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
/export/home/raichoo/zfsdemo/disk1 ONLINE 0 0 0
/export/home/raichoo/zfsdemo/disk2 ONLINE 0 0 0

errors: No known data errors
[root@itzkoatl:zfsdemo]> zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 191M 82.5K 191M 0% ONLINE -

Wir haben die neue Platte einfach durch add in den zpool eingefügt und wir zpool list zeigt hat sich die Kapazität von tank verdoppelt.
Wir können aber auch zpool mit RAID Fähigkeiten erstellen, dazu gibt es die subkommandos mirror, raidz und raidz2.

[root@itzkoatl:zfsdemo]> zpool create tank mirror $PWD/disk1 $PWD/disk2
[root@itzkoatl:zfsdemo]> zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror ONLINE 0 0 0
/export/home/raichoo/zfsdemo/disk1 ONLINE 0 0 0
/export/home/raichoo/zfsdemo/disk2 ONLINE 0 0 0

errors: No known data errors
...
[root@itzkoatl:zfsdemo]> zpool create tank raidz2 $PWD/disk1 $PWD/disk2 $PWD/disk3 $PWD/disk4
[root@itzkoatl:zfsdemo]> zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz2 ONLINE 0 0 0
/export/home/raichoo/zfsdemo/disk1 ONLINE 0 0 0
/export/home/raichoo/zfsdemo/disk2 ONLINE 0 0 0
/export/home/raichoo/zfsdemo/disk3 ONLINE 0 0 0
/export/home/raichoo/zfsdemo/disk4 ONLINE 0 0 0

errors: No known data errors

Man kann noch sehr viel mehr mit zpools anstellen, aber das reicht fürs erste ;).

Filesysteme

Das erste Filesystem haben wir ja schon mit dem Erstellen des zpools angelegt. Es trägt den Namen tank und ist unter /tank gemountet.

[root@itzkoatl:zfsdemo]> zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 98.6K 158M 26.9K /tank

Wir tun jetzt einfach mal so als würden wir eine Art home-Struktur anlegen wollen. Dazu legen wir ein separates home-Filesystem und ein Filesystem für jeden Benutzer an. ZFS Filesysteme sind in etwa vergleichbar mit dem was man unter herkömmlichen Filesystemen als Partitionen bezeichnet, nur das sie sich in ihrer Größe dem Inhalt anpassen. Ein ZFS Filesystem in dem also nichts liegt wird auch praktisch nichts an Plattenplatz belegen.

[root@itzkoatl:zfsdemo]> zfs create tank/home
[root@itzkoatl:zfsdemo]> zfs create tank/user1
[root@itzkoatl:zfsdemo]> zfs create tank/user2
[root@itzkoatl:zfsdemo]> zfs create tank/user3
[root@itzkoatl:zfsdemo]> zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 247K 158M 34.4K /tank
tank/home 26.9K 158M 26.9K /tank/home
tank/user1 26.9K 158M 26.9K /tank/user1
tank/user2 26.9K 158M 26.9K /tank/user2
tank/user3 26.9K 158M 26.9K /tank/user3

So wir haben unsere Filesysteme erstellt aber UPS! unsere User sind ja gar nicht an der richtigen Stelle gemountet, eigentlich gehören die ja nach /tank/home. Kein Problem, wir können den Mountpoint im Nachhinein einfach setzen

[root@itzkoatl:tank]> zfs set mountpoint=/tank/home/user1 tank/user1
[root@itzkoatl:tank]> zfs rename tank/user1 tank/home/user1
[root@itzkoatl:tank]> zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 258K 158M 32.9K /tank
tank/home 55.3K 158M 28.4K /tank/home
tank/home/user1 26.9K 158M 26.9K /tank/home/user1
tank/user2 26.9K 158M 26.9K /tank/user2
tank/user3 26.9K 158M 26.9K /tank/user3

Das rename ist eigentlich nicht nötig, ich habe es allerdings hier aus Schönheitsgründen mal gemacht ;). Durch das Umsetzen des Mountpoints wird das Filesystem von seinem alten Standort ausgehängt und am neuen Mountpoint eingehängt, alles automatisch.
Wir räumen jetzt einfach mal die anderen Filesysteme weg und arbeiten nur noch mit user1 weiter.

[root@itzkoatl:tank]> zfs destroy tank/user2
[root@itzkoatl:tank]> zfs destroy tank/user3


Filesystem Attribute

Jetzt zu ein paar interessanten Attributen die man mit set und get setzen und auslesen kann. Ich werde nur ein paar davon zeigen weil es wirklich eine ganze Menge sind, aber ich halte diese für die praktischsten.

Reservation

Hiermit läßt sich Plattenplatz aus dem zpool reservieren. Dem Filesystem wird also eine bestimmte Menge Storage zugesichert, wie man unten sieht hat tank/home/user1 10MB mehr Speicher zur Verfügung als alle anderen Filesysteme.

[root@itzkoatl:tank]> zfs set reservation=10m tank/home/user1
[root@itzkoatl:tank]> zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 10.2M 148M 28.4K /tank
tank/home 10.0M 148M 28.4K /tank/home
tank/home/user1 26.9K 158M 26.9K /tank/home/user1


Quotas

Was man reservieren kann, kann man aus begrenzen. Mit Quotas lassen sich Filesysteme klein halten.


[root@itzkoatl:tank]> zfs set quota=10m tank/home/user1
[root@itzkoatl:tank]> zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 10.2M 148M 28.4K /tank
tank/home 10.0M 148M 28.4K /tank/home
tank/home/user1 26.9K 9.97M 26.9K /tank/home/user1


Compression

Der Name sagt es schon. Filesysteme lassen sich transparent komprimieren. Es gibt unterschiedliche Algorithmen wir nehmen hier gzip als Beispiel.

[root@itzkoatl:tank]> zfs set compression=gzip tank/home/user1
[root@itzkoatl:tank]> zfs get compression tank/home/user1
NAME PROPERTY VALUE SOURCE
tank/home/user1 compression gzip local

Hier sollte man daran denken das nur Dateien komprimiert werden die nachträglich im Filesystem erstellt werden. Auch zeigt ls nicht die komprimierte sondern die reale Größe der Datei an.

NFS

Besonders praktisch ist NFS Sharing. Ich werde hier nur die einfachste Form zeigen, aber anstatt on lassen sich die normalen NFS Optionen für das Filesystem angeben. Unter Solaris wird hier alles automatisch eingerichtet und gestartet so das das eingeben einer einzige Zeile reicht um Filesysteme zu sharen (keine Ahnung wie das unter anderem Systemen ist).

[root@itzkoatl:tank]> zfs set sharenfs=on tank/home/user1


Das sind nur ein paar der vielen Attribute die ZFS bietet, alle zu zeigen würden den Rahmen sprengen ;)

Snapshots

Kommen wir zu einem meiner Lieblingsfeatures: Snapshots. Mit Snapshots lassen sich Filesysteme zu einem bestimmten Zeitpunkt einfrieren und auch wieder zurückspielen (und das innerhalb von ein paar Sekunden und ohne das es extra Plattenplatz belegt). Es ist ebenfalls jederzeit möglich in angelegt Snapshots reinzugucken. Wir werden jetzt einfach mal folgendes machen: Wie legen eine Datei mit dem Text "Das ist ein Test" an, danach erstellen wir einen Snapshot und werden die Datei verändern.

[root@itzkoatl:user1]> echo "Das ist ein Test" > text
[root@itzkoatl:user1]> ls
text
[root@itzkoatl:user1]> cat text
Das ist ein Test
[root@itzkoatl:user1]> zfs snapshot tank/home/user1@kleinertest

Ok wir haben den Zustand unseres Filesystems jetzt unter dem Snapshot mit dem Namen kleinertest gesichert. Nun wollen wir unsere Datei mal kaputtmachen und alles wieder herstellen.
[root@itzkoatl:user1]> echo "Ich mach alles kaputt!" >| text 
[root@itzkoatl:user1]> cat text
Ich mach alles kaputt!
[root@itzkoatl:user1]> cat .zfs/snapshot/kleinertest/text
Das ist ein Test
[root@itzkoatl:user1]> zfs rollback tank/home/user1@kleinertest
[root@itzkoatl:user1]> cat text
Das ist ein Test

Wie man sieht existiert ein versteckter Ordner .zfs, dieser wird nicht von ls -a angezeigt (Es sei denn man setzt ein bestimmtes Attribut) sondern praktisch on-the-fly erstellt wenn man explizit auf ihn zugreift. Mit zfs rollback spulen wir das Filesystem wieder zu dem Zeitpunkt zurück an dem wir den Snapshot kleinertest erstellt haben (der Snapshot selber existiert weiter). Snapshot sind nicht beschreibbar aber es lassen sich mit zfs clone schreibbare Filesysteme aus einem Snapshot erstellen.

Serialisieren

Ein Filesystem läßt sich in eine einzelne Datei ausgeben die sich dann verschicken läßt und woanders wieder in ein Filesystem umwandeln läßt (sehr praktisch für Backups). Dazu brauchen wir erst einmal einen Snapshot, dieser läßt sich mit zfs send serialisieren und mit zfs receive wieder "entpacken".

[root@itzkoatl:user1]> zfs send tank/home/user1@kleinertest > /tank/dump
[root@itzkoatl:user1]> ls -l /tank/dump
-rw-r--r-- 1 root root 15680 Nov 1 17:29 /tank/dump
[root@itzkoatl:user1]> zfs receive tank/home/user2 < /tank/dump
[root@itzkoatl:user1]> cat /tank/home/user2/text
Das ist ein Test
[root@itzkoatl:user1]> zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 10.2M 148M 45.6K /tank
tank/home 10.1M 148M 31.4K /tank/home
tank/home/user1 29.1K 9.97M 29.1K /tank/home/user1
tank/home/user2 27.6K 148M 27.6K /tank/home/user2

Wir haben also nun aus der dump-datei einfach ein neues Userverzeichnis erstellt welches den Zeitpunkt wiederspiegelt an dem wir kleinertest erstellt haben. Snapshots lassen sich auch separat mit zfs list -t snapshot anzeigen

[root@itzkoatl:user1]> zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
tank/home/user1@kleinertest 0 - 29.1K -
tank/home/user2@kleinertest 0 - 27.6K -

Wie man sieht waren in unserem dump sogar alle Snapshots des Filesystems erhalten (user2 hat ebenfalls einen Snapshot kleinertest)

Import und Export

Filesysteme müssen manchmal mobil sein, z.b. wenn sie auf USB-Sticks liegen. Hierzu kann man zpools einfach exportieren. Exportierte zpools sind ohne das man sie wieder importiert nicht benutzbar (sie werden auch automatisch ausgehängt etc). Steckt man z.b. einen USB-Stick mit einem zpool in das System ein, reicht unter Solaris ein zpool import und alle exportierten Ports werden angezeigt. Ohne Paramter durchsucht dieser Befehl automatisch alle Datenträger nach exportierten zpools im /dev Filesystem.
Da unsere disk Dateien jetzt aber keine echten Devices sind müssen wir den Ort an dem zpool import suchen soll explizit angeben.

[root@itzkoatl:~]> zpool export tank
[root@itzkoatl:~]> zpool import -d ./zfsdemo
pool: tank
id: 14691414290482700440
state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:

tank ONLINE
raidz2 ONLINE
/export/home/raichoo/zfsdemo/disk1 ONLINE
/export/home/raichoo/zfsdemo/disk2 ONLINE
/export/home/raichoo/zfsdemo/disk3 ONLINE
/export/home/raichoo/zfsdemo/disk4 ONLINE
[root@itzkoatl:~]> zpool import -d ./zfsdemo tank


Das war ein kleiner aber recht umfangreicher Ausflug in die Welt von ZFS. Und vielen dürfte jetzt klar sein das ZFS mehr ist als nur Volumemanager und Filesystem in einem, es ist ein Storage Verwaltungstools. ZFS ist inzwischen neben Solaris auf FreeBSD, MacOSX und Linux (nur über FUSE) verfügbar. An weiteren Ports wird gearbeitet.

ZFS unter Ubuntu Intrepid Ibex

ZFS und Linux ist ja leider ein Thema für sich, aber mit ein paar Handgriffen kann man es sich zumindest so zurechtbiegen das es unter FUSE im Userspace rennt. Auch wenn das nicht gerade die performanteste Lösung auf Erden ist kann man so wenigstens seine zpools unter Linux benutzen.

Um die aktuelle Version 0.5.0 zu kompilieren muss man lediglich die folgenden Pakete nachinstallieren:
build-essential libfuse-dev libaio-dev zlib1g-dev scons

Die aktuelle "ZFS on FUSE" Version findet man hier. Übersetzen und installieren läßt sich das ganze nachdem wir die oben genannten Pakete installiert haben:

raichoo@tensaiga:Projects$ tar xfvj zfs-fuse-0.5.0.tar.bz2
...
raichoo@tensaiga:Projects$ cd zfs-fuse-0.5.0/src
raichoo@tensaiga:Projects$ scons
...
raichoo@tensaiga:Projects$ sudo scons install


Mit sudo zfs-fuse starten wir den Userspace Prozess der ZFS verwaltet.

Leider schmeißt der Code sehr viele Warnings und es ist gleichzeitig das -Werror Flag gesetzt welches ein kompilieren in diesem Fall unmöglich macht. Also entfernen wir dieses Flag aus der src/SConstruct aus dem CFLAGS Eintrage. Das ganze sieht dann so aus:

env['CCFLAGS'] = Split('-pipe -Wall -std=c99 -Wno-switch
-Wno-unused -Wno-missing-braces -Wno-parentheses
-Wno-uninitialized -fno-strict-aliasing -D_GNU_SOURCE
-D_FILE_OFFSET_BITS=64 -D_REENTRANT
-DTEXT_DOMAIN=\\"zfs-fuse\\" -DLINUX_AIO')

Ich weiß das ist unschön und gehört eigentlich verboten... vielleicht kennt jemand einen besseren Weg, ich würde mich sehr über Tipps freuen.




Ich plane im Moment eine kleine ZFS Einführung an der jetzt hoffentlich auch die Linuxuser ihren Spaß haben werden.

Freitag, 17. Oktober 2008

ZFS für Linux kriegt ein Upgrade

Totgesagte leben länger heißt es ja so schön. So ist in dem ganzen Rummel um das Datenbank-Filesystem Btrfs und die neue ext Version wohl untergegangen das es schon im letzten Monat ein Upgrade für ZFS on Fuse. Die neue Version unterstützt unter anderem ZFS Pools der Version 13 und beseitigt kritische Bugs. Das eröffnet die Möglichkeit ZFS Wechseldatenträger jetzt auf Mac OS X, FreeBSD, Linux und natürlich Solaris zu nutzen (wenn Windows jetzt noch ZFS kriegen würde könnte man endlich auf FAT verzichten... *träum*). Weitere Open Source Betriebssysteme wie NetBSD und DragonflyBSD arbeiten ebenfalls an einer Portierung. Natives ZFS unter Linux ist derzeit nicht möglich da die GPL das mischen mit Open Source Code der nicht unter GPL steht verbietet (bei Nvidia-Treibern scheint es zu gehen... ein Schelm wer Böses denkt ;) ).

Mich persönlich würde interessieren wie hoch der Performanceverlust ist wenn man ein derartig komplexes Filesystem im Userspace laufen läßt. Falls Linux-user mit ZFS Erfahrung das lesen würde mich ein Feedback interessieren.

Sonntag, 3. August 2008

Dtrace überall

In den letzten Jahren hat dtrace, das dynamische Tracingtool von OpenSolaris, für eine Menge aufsehen gesorgt und inzwischen findet es auf immer mehr Plattformen ein zuhause. Ports existieren bereits für Mac OS X und QNX. Derzeit werden auch vom FreeBSD (man munkelt auch über einen NetBSD Port) Team Anstrengungen unternommen es zu portieren und vor einigen Monaten wurde der erste Code in den CURRENT Zweig commited.
Unter Linux gab es allerdings Probleme da die CDDL-Lizenz, unter der dtrace steht, nicht kompatibel zur GPL ist. Es wurden zwar mit systemtap Ansätze unternommen dtrace zu kopieren, doch ist es in keiner Weise vergleichbar da es unter anderem nicht in der Lage ist Userspace Prozesse zu tracen und die Stabilität des Systems beeinträchtigt da unter anderem das "Skripten" welches fast C ähnlich ist, völlig über das Ziel hinausschiesst und gefährlichen Code ermöglicht. Inzwischen ist das ftrace-Framework im Gespräch welches aber im Gegensatz zu dtrace und systemtap nicht skriptbar ist und damit extrem an Flexibilität einbüßt. Alles in allem eher spärliche Aussichten. Für ein Licht am Ende des Tunnels sorgt Paul Fox der sich daran gemacht hat dtrace auf Linux zu portieren. Ob es letztendlich möglich sein wird Linux Distributionen mit dtrace auszuliefern kann ich derzeit leider nicht sagen (da mir der ganze Lizenzkram langsam eh zu undurchschaubar wird), aber es bleibt die Hoffnung das es wenigstens ein Patchset geben wird das dieses unglaublich mächtige Tool in die Linuxwelt bringen wird.

Dienstag, 8. Juli 2008

Freie Betriebssysteme: Ein Vergleich

Ich habe mich in den letzten Monaten mal etwas mehr mit dem befasst was der Markt an freien Betriebssystemen alles so hergibt. Deswegen habe ich mich hier mit den Alternativen FreeBSD und OpenSolaris befasst. Sicherlich bin ich nicht so weit in die unterschiedlichen Systeme eingetaucht das ich einen wirklich allumfassenden Bericht abliefern könnte aber ich hoffe trotzdem einen kleinen Einblick geben zu können.
Ich werde im folgenden einfach mal einen Vergleich zwischen den 3 Systemen anstellen die ich hier hauptsächlich laufen habe: Kubuntu 8.04.1, FreeBSD 7.0-RELEASE-p2 und OpenSolaris 2008.05 snv_91.

Packaging System


Kubuntu:

Hier kommt das weitverbreitete APT System aus der Debianwelt zum Zuge. Zusammen mit einer fast unerschöpflichen Auswahl an Paketen ist es sicher absolut ungeschlagen wenn es um eine Kollektion freier Software geht. Es ist schnell und leicht in der Anwendung und durch zusätzliche Repos flexibel und erweiterbar. Ein Nachteil den ich persönlich empfinde ist, das das selber packen ziemlich umständlich ist im Vergleich zu anderen Systemen. Es gibt mehrere Skriptverfahren zur Auswahl mit denen man seine Software verschnüren kann und zusätzlich noch Prä- und Postinstallationsskripte welche sich darum kümmern die Software einzurichten.
Fazit: +

FreeBSD:
Hier scheiden sich bei mir die Geister. Sicherlich ist das Ports-System von FreeBSD sehr mächtig und steht mit einer Auswahl von 18.000+ Paketen sicherlich nicht schlechter da als viele andere Systeme, doch ist die Handhabung meiner Meinung nach alles andere als zeitgemäß. Es gibt einen ganzen Berg an Tools für den Umgang mit diesem System und viele davon machen das gleiche... nur anders. Die pkg_* Familie (die jetzt nicht direkt was mit den Ports zu tun hat, sondern dafür zuständig ist vorkompilierte Pakete zu verwalten), dazu portsnap, portmaster, portupgrade, portaudit und vermutlich noch andere die ich vergessen oder noch nie gesehen habe. Es ist allerdings sehr einfach seine Software selbst zu kompilieren und gegebenenfalls auf seine Ansprüche zuzuschneiden. Dennoch:
Fazit: --

OpenSolaris:
Ian Murdock, Vater der Debian Distribution und inzwischen Mitarbeiter von Sun hat für OpenSolaris das IPS System entwickelt. Es ist komplett in Python geschrieben und versucht die Vorteile vieler Packagesysteme zu vereinigen. Besonders interessant ist das IPS vor jedem Update einen Snapshot des Systems anlegt, was dem Benutzer ermöglicht zurückzuspringen wenn z.B. das Update nicht geglückt ist. Auch lässt sich das System "branchen" so das man unterschiedliche Instanzen seines Systems gleichzeitig auf der Festplatte haben kann (alle bootbar). Gespeichert werden lediglich die Unterschiede zueinander und das völlig transparent und performant. All diese Optionen lassen sich mit wenigen einfachen Befehlen steuern. Auch hier gibt es Repos die das System flexibeler machen (auch ist das Aufsetzten eines eigenen Repos kinderleicht). Selbst Pakete bauen ist ebenfalls einfach und bequem realisiert, da sie ähnlich wie die Handhabung eines SVN abläuft.
Fazit:++

Filesystem

Kubuntu:
Ext3. Der Fels in der Brandung und leider auch genauso aktuell. Sicherlich zeichnet es sich durch hervorragende Stabilität aus dennoch sind die immer wiederkommenden Filesystem-Checks bei immer größer werdenden Festplatte einfach nur noch zeitaufwendig und lästig. Ebenso ist das System nach dem Aufsetzen starr und lässt sich nur bei einem vorher aufgesetztem LVM halbwegs elegant erweitern. Derzeit befindet sich ext4 in der Entwicklung, aber auf einen produktiven Einsatz wird man wohl noch lange warten müssen.
Fazit:-

FreeBSD:
Vorteilhaft ist hier das der Filesystemcheck bei UFS2 im Hintergrund abläuft. Das spart Zeit und Nerven (vor allem bei großen Platten welche heutzutage einfach Standard sind). Leider habe ich mich nicht besonders mit dem GEOM System befasst welches ein sehr starkes Konzept zu seinen scheint. Darum kann ich hierzu leider nicht viel sagen.
Fazit:+

OpenSolaris:
The Last Word in Filesystems. Damit preist Sun sein Filesystem ZFS an. Nicht ganz zu unrecht. Scheint es doch nichts zu geben was ZFS nicht bewerkstelligen kann: Softwareraids, Mirroring, Striping, dynamisch wachsenden Partitionen, Snapshots, Clones, inkrementelle Backups die sich über SSH verschicken lassen, transparente Kompression und sogar Selbstheilung. ZFS ist wie viele sagen eine eierlegende Wollmilchsau. Jetzt mag man glauben das sich ein solches Filesystem kaum handhaben lässt und ungemein kompliziert ist. In Wirklichkeit lassen sich alle diese Funktionen mit nur 2 einfachen Befehlen steuern ohne dabei irgendetwas von ihrer Mächtigkeit zu verlieren. Alles in allem: Ein hochmodernes einfach handzuhabendes Filesystem welches einem völlig neue Möglichkeiten eröffnet.
Fazit: ++

Kernel und Userland

Kubuntu:

Hier wird wie die meisten sicher wissen der weit verbreitete Linuxkernel verwendet. Er verfügt über eine große Anzahl an Treibern und ist relativ stabil. Als Userland wird das GNU-Userland verwendet welches vom Linuxkernel eigentlich unabhängig ist. Dies führt dazu das sich beides hin und wieder nicht im Einklang befindet, sprich das neue Features des Kernels sich nicht unbedingt auf das Userland auswirken. Auf großen Systemen wird allerdings immer wieder bemängelt das der Linux Kernel schlecht skaliert (ab 4 oder 8 CPUs geht die Performance bergab) Dies kann ich selber nicht bestätigen sondern muss mich hier auf das Wort von Experten verlassen.
Fazit: +

FreeBSD:

Wie bei allen anderen BSDs auch kommt hier alles aus einem Guss. Userland sowie Kernel werden zusammen entwickelt und dementsprechend lässt sich das System erstklassig darüber bedienen. Im Gegensatz zum Linuxkernel handelt es sich beim FreeBSD Kernel um einen echten Nachkommen von BSD Unix. Derzeit werden viele neue Fähigkeiten die ihren Ursprung in Solaris in den FreeBSD Kernel integriert wie z.b. ZFS und dtrace (beides ist unter Linux derzeit aus Lizenzgründen nicht möglich). Das System soll sich durch extreme Stabilität auszeichnen. Dennoch habe ich es geschafft durch vermutlich etwas dämlichen Einsatz zum UnionFS das System zu einer Panic zu bringen. Auch skaliert das System durch den neuen ULE Scheduler (welcher auch in den nächsten Mac OS X Kernel aufgenommen werden soll) sehr gut.
Wie Linux auch verfügt FreeBSD über eine Vielzahl von Treibern und auch NVidia liefern einen Treiber für ihre Grafikkarten (allerdings nur als 32-Bit Version) aus.
Fazit:++

OpenSolaris:
Auch hier ist alles aus einem Guss und durch dtraceprobes lässt sich dem System so ziemlich alles an Informationen entlocken die man zum administrieren und entwickeln so braucht oder immer schon mal haben wollte. Da das Geschäft von Sun große Rechner sind, verwundert es nicht das Solaris extrem gut skaliert und auch noch auf Systemen mit vielen CPUs (angeblich bis zu 64 Stück) ohne Performanceverlust arbeitet. Solaris verfügt über eine Vielzahl einzigartiger und mächtiger Tools und Features (ZFS, dtrace, SMF, Zones etc) welche sowohl auf dem Desktop als auch auf dem Server neue und spannende Anwendungen eröffnen. Um Treiber ist es im Moment etwas schlecht bestellt, dennoch werden alle paar Wochen neue Treiber zum System hinzugefügt. Auch hier bieten NVidia Treiber für ihre Grafikkarten an. Solaris stammt ebenfalls von BSD ab und ist somit ein echtes Unix.
Fazit:++

Oberfläche

Kubuntu:
Wird standardmäßig mit KDE ausgeliefert, ebenso existiert eine KDE4 Version welche
jedoch eher für Entwickler und nicht für den Endanwender gedacht ist.
Fazit:++

FreeBSD:
Kommt ohne installierte GUI und läßt sich somit frei einrichten. Derzeit wird noch an einer Portierung von KDE4 gearbeitet die nach Aussage von Martin Wilke inzwischen kompiliert und läuft.
Fazit:+

OpenSolaris:
Ist derzeit nur mit Gnome erhältlich, dennoch wird auch hier KDE4 portiert. Experimentelle Tarballs sind bereits unter www.bionicmutton.org/solaris/ erhältlich. Ab der kommenden Version von OpenSolaris soll es möglich sein auf die Installation einer GUI zu verzichten.
Fazit:+

Dokumentation

Linux:
Eine wirklich gute Anlaufstelle für Dokumentation gibt es für Linux leider nirgends. Es gibt zwar viele Wikis von denen sehr viele veraltet sind. Oft muss man sich passende Howtos per Google raussuchen welche auch selten über Grundwissen hinausgehen. Auch macht es einem die Menge an unterschiedlichen Distributionen welche Probleme oft sehr unterschiedlich behandeln alles andere als leicht.
Fazit:--

FreeBSD:
FreeBSD bietet auf seiner Seite ein umfangreiches Handbuch an welches so ziemlich jedes Thema abdeckt auf das man beim benutzen und administrieren seines Systems stoßen kann. Alles ist umfassend erklärt und in unterschiedlichen Sprachen erhältlich.
Fazit:+

OpenSolaris:
Besonders angetan hat er mir der Dokumentationsserver von Sun. docs.sun.com bietet so ziemlich die ausführlichste Datenbank an Informationen die man zu einem System erhalten kann. Alles als PDF herunterladbar, sowie in mehreren Sprachen verfügbar. Alles auf dem neusten Stand versteht sich. Absolut vorbildlich!
Fazit:++

Wenn es um Paketvielfalt und Einfachheit geht, hat hier Kubuntu ganz klar das Rennen gemacht. Dennoch halte ich OpenSolaris für einen extrem vielversprechenden Kandidaten (vor allem da das System in dieser Form erst seit 3 Monaten erhältlich ist). Mit mehr Paketen würde es sich hier definitiv um eine ernstzunehmende Alternative handeln. FreeBSD taugt für mich leider gar nicht für den Desktop (Ok, der Vergleich ist schon etwas unfair da es eher für Server gedacht ist ;). PC-BSD soll hier allerdings Abhilfe schaffen.

Das war ein kleiner Einblick in das von mir Erlebte zu den unterschiedlichen Systemen. Sicherlich wird das ein oder andere Urteil etwas sehr subjektiv ausgefallen sein, aber naja. Ich hoffe es war trotzdem aufschlussreich :).

Informationen zu den unterschiedlichen Systemen wie z.B. ausgewählte Artikel findet man übrigens auch bei Distrowatch.