Solaris auf der Überholspur
Artikel erschienen in Swiss IT Magazine 2005/05
Lange ist es her, seit die letzte Version von Sun Microsystems' Betriebssystem Solaris im Mai 2002 erschienen ist. Damals war der Sprung von Solaris 8 auf Solaris 9 kein sehr grosser – zumindest wurden keine so tief greifenden Änderungen und neuen Features wie in das aktuelle Solaris eingeführt. Sun selbst spricht davon, dass Solaris 10 rund 600 Innovationen vereint, und rührt entsprechend kräftig die Marketingtrommel. Und Suns stolz auf ihr neustes Baby ist absolut gerechtfertigt, denn mit den neuen Funktionen, die hauptsächlich den High-end-Bereich adressieren, wurde die Position von Suns Unix weiter gestärkt.
Ein für Solaris neues Konzept, welches man aber bereits in ähnlicher Form von anderen Plattformen (etwa Micropartitioning von IBMs AIX) kennt, sind die Solaris-Zonen (Container). Es ist nun möglich, innerhalb eines laufenden Solaris weitere Solaris-Instanzen zu starten. Dabei werden weitere Kerne mit allen notwenigen Prozessen geladen. Die einzelnen Instanzen bilden dabei vollständig voneinander unabhängige Einheiten. Die Mutter-Zone, Global Zone genannt, kann auf die Prozesse der einzelnen virtuellen Zonen zugreifen – umgekehrt kann aber weder von einer Zone auf die globale Zone noch auf die parallel laufenden Zonen zugegriffen werden. Jede Zone hat ein eigenes Dateisystem (eigene Partition oder Verzeichnis der globalen Zone), in die eine Kopie des Mutterbetriebssystems installiert wird. Dabei werden auch Patches und installierte Software mitberücksichtigt. Patches, die auf die globale Zone installiert werden, werden gleichzeitig auf die einzelnen Container angewandt.
Eine weitere Neuerung, welche sowohl Systemadministratoren als auch Entwicklern viel Arbeitserleichterung bringt, ist das sogenannte Dynamic Tracing (DTrace). Um einen Prozess zu debuggen oder herauszufinden, was ein System zu einem bestimmten Zeitpunkt macht, kannte man früher vor allem drei Tools: mdb (Modular Debugger zum Analysieren von Core Files), adb (General Purpose Debugger zum Live-Debugging von Programmen) und truss (Verfolgen von System Calls). Alle diese Tools konnten aber nicht für laufende Prozesse verwendet werden. Ein zu debuggender Task musste neu gestartet oder Core Files analysiert werden. Das war zeit- und fehleranfällig. DTrace bietet an vielen Stellen des Betriebssystems (Kern, Bibliotheken, Treiber) nun sogenannte Provider, mit denen die Analysetools kommunizieren können. Ein solcher Provider ist eine Art intelligenter Interrupt. Wird so ein Provider angesprungen oder tritt ein bestimmter Zustand auf, erkennt dies das Analysetool und kann darauf reagieren. Dazu wurde eine eigene Script-Programmiersprache mit dem Namen D Programming Language entwickelt. Mit ihrer Hilfe können nun beliebige Tools zum Überwachen, Analysieren oder zum Erstellen von Systemstatistiken geschrieben werden.
Sehr vielversprechend ist das neue Zettabyte File System (ZFS). Es handelt sich um ein Dateisystem, welches ein für die Unix-Welt neuartiges Konzept zum Verwalten von Speichermedien einführt. Es gibt keine Partitionen beziehungsweise Slices oder Volumes mehr. Statt dessen werden Platten zu einem Pool zusammengefasst. Auf so einen Pool werden dann die einzelnen Dateisysteme montiert. Alle Dateisysteme eines Pools teilen sich den kompletten verfügbaren Plattenplatz. Wird dieser knapp, wird einfach eine Platte zum Pool hinzugefügt, ohne dass die darüberliegenden Dateisysteme davon berührt würden. Für den Benutzer bzw. die Prozesse ändert sich nichts. ZFS präsentiert sich als ein ganz normales POSIX-Kompatibles Dateisystem. Moderne Dateisysteme bieten aktuell 64 Bit zur Speicheradressierung, ZFS kann mit seinen 128 Bit Datenmengen bis zu 2 137 Bytes speichern. Weiter legt ZFS eine 64-Bit-Checksumme über die belegten Blöcke und kann diese im Fehlerfall auch vollkommen selbständig korrigieren. Zur weiterer Datensicherheit trägt das Copy-on-Write-Konzept (bekannt vom WAFL-Dateisystem in NAS-Filern) bei: Bevor ein Datum auf die Platte geschrieben wird, wird von den Daten auf der Platte eine Kopie angelegt. Erst dann wird geschrieben. So bleib ein konsistenter Zustand der Daten erhalten. Die meisten Schreiboperationen sind dadurch sequentiell, und somit wird wertvolle Zugriffszeit für Seeks gespart.
Zudem bietet ZFS die Möglichkeit, Snapshots zu erstellen. Diese stellen eine Art Momentaufnahme der Daten auf den Platten dar und sind vereinfacht gesehen eine Art Hardlinks der Inodes. Denn beim Erzeugen eines Snapshot werden keine Daten kopiert, sondern die belegten Inodes einfach mehrfach indiziert. In diesem Zustand belegt ein Snapshot keinen Plattenplatz, da die «echten» Daten und der Snapshot auf dieselben Inodes zeigen. Erst wenn sich die Daten ändern, zeigen sie auf neue Inodes, was dann zusätzlichen Plattenplatz belegt. Der Snapshot zeigt aber weiterhin auf die alten Inodes und somit auf die alten Daten. Da beim Anlegen keine Daten kopiert werden, geschieht das Erzeugen eines Snapshot praktisch sofort. Sie sind aber keine Alternative zu einem Backup und dienen lediglich dazu, Benutzern mit dem «nervösen Zeigefinder» die Möglichkeit zu bieten, selbst auf Sicherungen ihrer Daten zugreifen zu können.
Solaris hat die Möglichkeit, sich selbst zu heilen beziehungsweise auf Soft- und Hardwareprobleme bis zu einem bestimmten Grad selbst zu reagieren. Dazu gibt es auf Hardware-Seite die Fault Management Architecture und auf Software-Seite die Service Management Facility. Ein Daemon im System mit dem Namen fmd (Fault Management Daemon) sammelt telemetrische Daten über das System. Treten Anomalien auf, wird auf diese reagiert. Wenn zum Beispiel eine Speicherbank einen «ECC Correctable Error» meldet, ist dies an und für sich noch nicht schlimm. Tritt dieser Fehler jedoch mehrfach auf, erkennt der fmd dies und nimmt die Speicherbank offline. Gleichzeitig wird ein Report an den Systemadministrator generiert. Dieser kann nun auf das Problem reagieren und den Speicherriegel austauschen. Damit ein Self-Healing auch auf Software-Seite funktioniert, hat sich Sun etwas Neues einfallen lassen: Anstatt beim Systemstart die einzelnen Dienste und Daemons über Scripte in /etc/init.d respektive /etc/rcX.d und dem inetd hochzufahren, werden die einzelnen Prozesse nun von einem einzelnen Daemon (sv.startd) gesteuert. Dieser kann die von ihm gestarteten Prozesse überwachen; stirbt ein Daemon, wird er neu gestartet, was an die Funktionalität der Daemontools von Dan J. Bernstein erinnert. Aus Kompatibilitätsgründen existiert das von Unix System V geerbte /etc/init.d allerdings weiterhin, wodurch man nach wie vor mit Startscripten operieren kann, auch wenn empfohlen wird, dieses nicht mehr zu verwenden.
Sun setzt viel auf sein Projekt Janus, welches einem x86-Solaris ermöglichen soll, Linux-Applikationen nativ unter Solaris ausführen zu lassen. Solaris soll einem Programm ein mitLSB-Linux (Linux Standard Base) kompatibles System vorgaukeln. Der Kern erkennt Linux Binaries und münzt die System Calls entsprechend um. Es wird also keine Hardware emuliert, sondern die Linux System Calls in ihre Solaris-Entsprechungen übersetzt. Der Windows-Emulator Wine macht dies ähnlich: Windows-Funktionen werden in X- bzw. Unix-Funktionen umgesetzt. Die Performance soll in etwa um 5 Prozent niedriger liegen als auf einem nativen Linux-System auf gleicher Hardware. Allerdings soll Janus nur für die x86-Architektur verfügbar sein.
FS/Volume Modell im Vergleich zu ZFS
Sun hat in der Vergangenheit mit Trusted Solaris eine eigens auf Sicherheit getrimmte Solaris-Version herausgebracht. Dieses hat auf Solaris 8 aufgebaut und ist heute nicht mehr zeitgemäss. Das eigenständige Trusted Solaris wurde zu Gunsten einer Art von Aufsatz auf Solaris 10 aufgegeben. Dabei sind einige Funktionen von Trusted Solaris in Solaris 10 eingeflossen. Eines der neuen Features ist das Process Rights Management. Dabei erhalten gewisse Prozesse nur bestimmte, eingeschränkte Rechte. Selbst die als Root laufenden Prozesse haben dann nicht mehr vollen Zugriff auf das System. Wird ein solcher (potentiell unsicherer) Dienst gehackt, erlangt ein Hacker nicht vollen Zugriff auf das gesamte Betriebssystem. Im weiteren ist eine Crypro API integriert worden, welche die wichtigsten Algorithmen anbietet: DES, 3DES, AES, Blowfish, RC4 (symmetrische Algorithmen), RSA, DSA, DH (asymmetrische), die Hash-Algorithmen MD5 und SHA1 und Zufallsgeneratoren. Dabei werden für die Anwendung transparent eventuell vorhandene Crypto-Hardwarebeschleuniger erkannt und verwendet.
Ebenfalls wurde damit begonnen, die Netzwerkleistung von Solaris zu verbessern. Mit Solaris 10 hat Sun begonnen, einen neuen Netzwerk-Stack zu implementieren, der auf den Namen Fire Engine hören soll. Dieser basiert nicht mehr auf dem BSD-Stack und soll enorme Performance bringen. Mit den nächsten Service-Releases von Solaris 10 werden dann weitere Teile implementiert, und mit Solaris 11 soll die Migration auf den neuen Stack abgeschlossen werden.
Summa summarum bietet Solaris 10 viele Neuerungen und neue Konzepte, welche durchaus konkurrenzfähig sind oder gar neue Massstäbe setzen. Durch die erneut vollständige Unterstützung und Pflege von Solaris für x86-Systeme und AMDs Operton-Prozessoren wird Solaris auch für das untere Marktsegment interessant. Nicht zuletzt deshalb, weil Solaris kostenlos einsetzbar ist. Zudem hat Sun versprochen, Solaris nach und nach unter eine Open-Source-Lizenz zu stellen, was Suns Unix-Derivat weiteren Schub verleihen dürfte. Einen ersten Teil (DTrace) hat Sun bereits freigegeben. Der Rest soll voraussichtlich bis zum 2. Quartal 2005 freigegeben werden. Ebenso lange wird man auf das ZFS und Janus warten müssen, die es beide noch nicht in das aktuelle Release geschafft haben.
Solaris Container zur Virtualisierung von Solaris-Instanzen
Zettabyte Filesystem
Dynamic Tracing zum Debuggen
und Analysieren des Systems und einzelner Prozesse
Predictive Self Healing zur
Überwachung von Hardware
und Prozessen
Linux Interoperabilität
Integration von Trusted Solaris mit neuer Crypto-API
Verbesserter Netzwerk Stack
NFSv4
Java Desktop 3
Gregor Longariva (longariva@soft baer.de) ist Solaris-Administrator am Rechenzentrum der Universität Erlangen-Nürnberg und Spezialist für die Unix-Betriebssysteme HP/UX, Irix, Linux, OpenBSD und Solaris.