Mit den Tipps und Workshops im ADMIN-Magazin 03/2013 sichern Administratoren ihre Webserver und Netze gegen Angriffe ab: gegen Abhören sensibler Informationen, ... (mehr)

ZFS als Root-Partition

FreeBSD lässt sich seit Version acht auch auf ZFS-Datenträgern installieren und booten. Ziel des folgenden Beispiels ist es, FreeBSD auf einem ZPool-Mirror bestehend aus zwei Festplatten »ada0« und »ada1« zu installieren. Der Weg dorthin ist sehr steinig und das Installationsprogramm vereinfacht die Prozedur nur teilweise. Allerdings wird man dann mit einer Funktionalität belohnt, die man von Windows kennt: Die Snapshots ermöglichen es, sogenannte Wiederherstellungspunkte anzulegen. Das ist vor allem für Entwickler und Softwaretester interessant.

Zunächst lädt man sich vom FreeBSD-Verteiler das Image für einen USB-Stick oder CD der sogenannten Fixit-Software herunter. Das ist eine Notfall-Shell, die die Möglichkeit bietet, ein System "von außen" zu administrieren und zu reparieren. Auch die reguläre Installations-DVD bietet diese Funktionalität, wenn man im Installationsprogramm den Menüpunkt »Shell« auswählt.

Nachdem man sich entweder einen bootfähigen USB-Stick oder eine DVD erstellt hat, startet man das System mit dem gewünschten Datenträger. Im Auswahlmenü des BSDInstaller wählt man die Option »Shell« aus und findet sich anschließend in einer Shell wieder.

Zunächst werden beide Festplatten für den Einsatz mit GPT vorbereitet. Unter Umständen ist es möglich, dass der Kernel einen Schreibzugriff auf die Festplatten verhindert. Um die Sperre aufzuheben, genügt das folgende Kommando:

 

Für den weiteren Installationsprozess lädt man die ZFS-Module:

 

Alle Festplatten eines ZPools müssen identisch partitioniert sein. Das erleichtert die Administration. Außerdem hat man gleichzeitig die Möglichkeit, bei einem Defekt von einer anderen Platte zu booten. Dies gelingt mit den Aufrufen:

 

Im folgenden Schritt werden die einzelnen Partitionen angelegt. Hierbei ist zu beachten, dass die Swap-Partition aus Performance-Gründen nicht auf einem ZFS-Datenträger liegt. Die beiden nachfolgenden Befehle reservieren Platz für den Bootloader. Die Größe von 222 Blocks resultiert aus der Tatsache, dass der Bootloader maximal diesen Speicherbereich belegt.

 

Anschließend werden die restlichen beiden Partitionen erzeugt, wobei die Partitionen, die als ZPool zusammengefasst sind, das Label »zdisk0« beziehungsweise »zdisk1« erhalten:

 

Damit FreeBSD überhaupt von einem ZPool bootet, braucht es den entsprechenden Bootcode:

 

Für die folgenden Schritte wird der ZPool »fbsd« angelegt, indem die Partitionen mit dem Label »zdisk0« und »zdisk1« eingebunden werden:

 

Die virtuellen Geräte »/dev/gpt/zdisk(0|1)« hat der FreeBSD-Device-Manager aus den zuvor angelegten Labels »zdisk(0|1)« erzeugt, um den Zugriff auf die Partitionen zu erleichtern. Der Parameter »altroot=/mnt« gibt einen alternativen Mountpoint für »/« an, und »canmount=off« bedeutet, dass »/« von ZFS nicht automatisch gemountet werden soll, sondern vom Mount-Befehl des Betriebssystems.

FreeBSD-Dateisystem

Eine Installation von FreeBSD verlangt nach einer bestimmten Hierarchie im Verzeichnisbaum. Da auch der Portstree mit seinen Dateien im ZPool liegen soll, sind einige Besonderheiten zu beachten, die später näher erläutert werden. Für mehr Datensicherheit sorgt die ZFS-Option »checksum« mit dem Algorithmus »fletcher4« . Es hat sich herausgestellt, dass dieser Algorithmus sehr stabil ist und selbst bei großen Datenmengen zuverlässig funktioniert.

 

Das Anlegen des Root-Dataset im ZPool geschieht folgendermaßen:

 

Das für temporäre Dateien benötigte Verzeichnis erhält einen eigenen mit aktivierter Datenkompression versehenen Datensatz innerhalb des ZPool:

 

Das Chmod-Kommando sorgt dafür, dass das Sticky-Bit gesetzt ist. Dadurch haben die User nur die Berechtigung, Dateien zu löschen oder zu verändern, die sie selber erzeugt haben. Die nächsten zwei Kommandos erzeugen die Datasets für das Betriebssystem:

 

Die Partition für die Home Directories sollte man in einem separaten ZPool vorhalten. Für das Beispiel reicht es aus, die Home-Partition im ZPool »fbsd« anzulegen:

 

Die Abschnitte für den Portstree bedürfen einer genaueren Betrachtung. Im Verzeichnis »/usr/ports« ohne »/usr/ports/distfiles/« und »/usr/ports/packages/« liegen später Textdateien wie Makefiles und Patches, die sehr viel Speicherplatz benötigen. Die eingeschaltete Kompression reduziert den Speicherbedarf erheblich, da sich Textdateien sehr gut komprimieren lassen.

 

Dagegen liegen in den Verzeichnissen »/usr/ports/distfiles« und »/usr/ports/packages« die heruntergeladenen Ports-Archive und die generierten Pakete. Das sind ausschließlich Binärdateien, die sich nur wenig komprimieren lassen. Daher wird für diese Verzeichnisse die Kompression abgeschaltet, was die Systemlast reduziert:

 

Auch für das Verzeichnis »/var« bietet es sich an, durch aktivierte Kompression Speicherplatz zu sparen. Allerdings sollte man sich vorher überlegen, welche Art von Dateien in den einzelnen Unterverzeichnissen liegen sollen. In der Erfahrung des Autors hat sich die Struktur in Listing 1 als effizient erwiesen.

Listing 1

/var auf ZFS

 

Im Verzeichnis »/var/crash« landen Coredumps, die sehr groß werden und aus binären Daten und ASCII-Daten bestehen. Sie lassen sich daher gut komprimieren.

 

Der Druckerspooler generiert ebenfalls Dateien von erheblicher Größe, weil die Postscript- oder PCL-Kommandos als reiner ASCII-Text zwischengespeichert werden. Weil die Kompression aber einiges an Rechenleistung erfordert, besteht bei schnell wachsenden Spool-Dateien die Gefahr der Überlastung. Aus diesem Grund sollte man hier keine Kompression aktivieren. Übrigens gilt diese Regel auch für Spool-Dateien des Maildienstes Postfix.

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Setup eines Kubernetes-Clusters mit Kops

Vor allem für Testinstallationen von Kubernetes gibt es einige Lösungen wie Kubeadm und Minikube. Für das Setup eines Kubernetes-Clusters in Cloud-Umgebungen hat sich Kops als Mittel der Wahl bewährt. Wir beschreiben seine Fähigkeiten und geben eine Anleitung für den praktischen Einsatz. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Container

Wie setzen Sie Container ein?

  • Gar nicht
  • Docker standalone
  • Docker mit Kubernetes
  • Docker mit Swarm
  • Docker mit anderem Management
  • LXC/LXD
  • Rocket
  • CRI-O auf Kubernetes
  • Container auf vSphere
  • Andere (siehe Kommentare auf der Ergebnisseite)

Google+

Ausgabe /2018

Microsite