Howto: Freebian - Debian auf ZFS installieren

03 May 2011

Einleitung

Nachdem ich bereits eine kurze Anleitung zur Installation von kFreeBSD auf ZFS verfasst hatte folgt nach langer Wartezeit diese vollständig überarbeitete und erweiterte Anleitung um Debian kFreeBSD auf einem optimierten ZFS-Dateisystem zu installieren. Hierbei werden bereits während der Installation mehrere ZFS-Dateisysteme so angelegt, dass die Vorteile von ZFS später im laufenden Betrieb voll ausgenutzt werden können. So lassen sich anschließend Snapshots von bestimmten Teilen des Betriebssystems, wie z.B. den Home-Verzeichnissen der Nutzer getrennt vom root-Verzeichnis erzeugen. Auch Sicherheitsfeatures wie die noexec-Option von ZFS und Speicherplatzoptimierungen, durch Einsatz der in ZFS integrierten Komprimierungsverfahren, werden für bestimmte ZFS-Dateisysteme ausgenutzt. Dies erfordert jedoch den händischen Eingriff in den Installationsprozess des Debian-Installers. Wie das ganze funktioniert und welche Kniffe angewendet werden müssen soll dieser Artikel zeigen.

Voraussetzungen

Wir benötigen einen Rechner, der zum Testen auch erst einmal virtuell sein kann. Ich empfehle hierfür (eingeschränkt) VirtualBox oder VMware. Der (virtuelle) Test-Rechner sollte folgende Eckdaten erfüllen:

  • 64-Bit Prozessor
  • 2 GB RAM
  • 1 GB Festplattenplatz (ohne X11) aber besser >10 GB
  • eine schnelle Internetleitung zum Nachladen der Installationspakete

Außerdem benötigt ihr natürlich eine CD oder ISO-Datei mit Debian 6.0.1 kFreeBSD AMD64.

Installation

Die weitere Anleitung erfolgt in zwei Varianten.

Wenn ihr fit im Umgang mit einer detaillierten Debian-Installation seid und euch die vielen Screenshots nerven, dann seid ihr in der unten aufgeführten Kurzfassung sicherlich am besten aufgehoben.

Die ausführliche Variante zeigt jeden einzelnen Schritt in Form eines Screenshots. Diese sollen als Unterstützung bei Unklarheiten über das weitere Vorgehen dienen. Folgt ihr der ausführlichen Variante, seid ihr auf der sicheren Seite ein funktionierendes System zu erhalten, auch wenn ihr kein Debian-Experte seid.

Kurze Installationsanleitung

Und schon kann es los gehen. Die ISO-Datei wird in das virtuelle Laufwerk eingelegt oder entsprechend gebrannt und in das CD-Laufwerk geschoben und der Rechner gestartet.

An dieser Stelle noch einmal der obligatorische Hinweis: Ihr tut das alles auf eigene Gefahr! Ich übernehme keine Haftung für irgendwelche Schäden oder Datenverluste! Alles bedacht? Dann kann es ja losgehen…

Beim Bootscreen der CD wählen wir die Option "Expert install", da so nach jedem Einzelschritt der Installation die Möglichkeit eines manuellen Eingriffs besteht.

Ihr folgt dem Debian-Installer bis ihr zum Anlegen neuer Nutzer kommt. Hier sollte man erst einmal nur root anlegen und diesem auch einen Login ermöglichen. Weitere Nutzer können nach erfolgreicher Installation noch angelegt werden. Dann allerdings mit den Features von ZFS und einem eigenen ZFS-Dateisystem für jeden Nutzer. Anschließend geht es ohne besondere Vorgaben weiter bis zur Partitionierung der Festplatte.

Wir erzeugen nun zwei Partitionen. Eine erste Partition für den Swap-Bereich, welchem ich in meinem Fall 2 GB spendiert habe. Ihr könnt natürlich auch mehr Plattenplatz für den Swap opfern. Der Swap könnte theoretisch auch innerhalb eines ZFS-Dateisystems lagern aber das ist momentan noch problematisch und es wird dringend davon abgeraten.

Der Rest der Festplatte wird ZFS zugesprochen. Das prinzipielle Vorgehen besteht im Anlegen einer Partition bestimmter Größe und anschließender Definition des Verwendungszwecks und gegebenenfalls des Dateisystems. Das Layout sollte nun etwa wie folgt aussehen.

Das schreiben wir nun nach erneuter Prüfung auf die Festplatte.

An diesem, wie unten dargestellten, Schritt angelangt werden wir den gerade erzeugten ZPool wieder entfernen und durch eine eigene, optimierte Struktur ersetzen. Dies muss natürlich vor der Installation des Basissystems geschehen. Also wechseln wir mittels Alt+F2 auf eine zweite Konsole und führen die folgenden Schritte in dieser Konsole durch.

Der Befehl

zpool list

zeigt den vom Debian-Installer angelegten ZPool. In meinem Fall heißt er freebian-da0s2.

Das Dateisystem, auf welchem Freebian installiert werden soll wird vom Installer unter /target eingehangen. Wir sichern erstmal die bereits vorhandenen Daten mittels tar.

tar cf target.tar /target

Anschließend verwerfen wir diesen ZPool und legen einen neuen ZPool fb an.

zpool destroy freebian-da0s2
zpool create -m none fb /dev/da0s2

Nun legen wir innerhalb dieses ZPools diverse ZFS-Dateisysteme an. Die Optimierungen habe ich hierbei von einer der gängigen Anleitungen für FreeBSD auf ZFS entnommen und entsprechend an Debian angepasst.

Das root-Dateisystem wird unter fb/root erzeugt.

zfs create -o mountpoint=/target fb/root
zfs set checksum=fletcher4 fb/root

Anschließend erzeugen wir noch die Verzeichnisse bzw. ZFS-Dateisysteme für /tmp, /usr, /var, /var/cache, /var/log, /var/mail, /var/run und /var/tmp

zfs create -o compression=on -o exec=on -o setuid=off fb/root/tmp
chmod 1777 /target/tmp

zfs create fb/root/usr

zfs create fb/root/var

zfs create -o compression=off -o exec=off -o setuid=off fb/root/var/cache
zfs create -o compression=lzjb -o exec=off -o setuid=off fb/root/var/log
zfs create -o compression=gzip -o exec=off -o setuid=off fb/root/var/mail
zfs create -o exec=off -o setuid=off fb/root/var/run
zfs create -o compression=lzjb -o exec=on -o setuid=off fb/root/var/tmp

Ich habe das home-Dateisystem nicht unterhalb von fb/root erzeugt, damit von den Nutzerdaten und Systemdaten unabhängig voneinander rekursive Snapshots erzeugt werden können. So kann man später verschiedene Systemversionen und -konfigurationen testen ohne das die Nutzerdaten davon betroffen sind.

zfs create -o mountpoint=/home fb/home

Anschließend spielen wir die vorher gesicherten Daten wieder zurück.

tar xvf target.tar

Nun wechseln wir wieder mittels Alt+F1 auf die erste Konsole zurück und installieren das System in unser neu aufgesetztes Dateisystem. Die folgenden Schritte entsprechen hierbei wieder der normalen Debian-Installation.

Bei der Auswahl der zu installierenden Software sollte man zunächst nur die Standard-Installation und den SSH-Server installieren. Alle andere Software kann nachträglich installiert werden und führt eventuell an dieser Stelle zu Schwierigkeiten.

Nach der Installation der optionalen Software und vor der Installation des GRUB-Bootloaders ist ein erneuter Wechsel auf die zweite Konsole vonnöten, da sonst die Installation des Bootloaders fehl schlägt.

Dies liegt daran, dass das Skript zum Erzeugen der Bootloader-Einträge die Datei zpool.cache nicht finden kann und mit einer Fehlermeldung abbricht. Bei dieser Gelegenheit führen wir auch gleich die restlichen Schritte durch um die Installation normal beenden zu können.

Doch zuerst wird die Datei zpool.cache in die Freebian-Installation kopiert.

cp -r /boot/zfs /target/boot/

Nun passen wir das Skript des Debian-Installers etwas an, damit die ZFS-Dateisysteme nach dem Reboot auch korrekt unter / und nicht unter /target eingehangen werden.

sed -i -e '/^\$CMD/i\/sbin/zfs set mountpoint=/ fb/root' /lib/debian-installer/exit

Mittels chroot wechseln wir jetzt in die Freebian-Installation und kopieren zwei Bibliotheken, welche für ZFS notwendig sind nach /lib und erneuern den Loader-Cache, damit sie nach dem Booten gefunden werden .

chroot /target /bin/bash
cp -v /usr/lib/{libexpat.so.1,libsbuf.so.0} /lib
ldconfig

Immer noch in der chroot-Umgebung schalten wir die Parallelisierung der Boot-Prozesse ab. Dies kann zu einer kleinen Verlängerung der Boot-Zeit führen aber erhöht die Stabilität des Boot-Prozesses in dieser ZFS- und System-Konfiguration erheblich.

echo "CONCURRENCY=none" >> /etc/default/rcS

Jetzt installieren wir noch die zu ZFS gehörigen Programme und verlassen die chroot-Umgebung wieder.

aptitude update
aptitude install zfsutils
exit

Anschließend wechseln wir wieder auf die erste Konsole und installieren den Bootloader in den master boot record und schließen die Installation ab.

Ist alles fehlerfrei durchgelaufen und haben wir selbst keinen Fehler bei der Installation gemacht, sollten wir uns nun das erste mal als root an unseren Freebian-System anmelden können.

In den folgenden Beiträgen zu Freebian werde ich auf weitere Schritte wie die Installation der grafischen Oberfläche, dem Anlegen neuer Nutzer und natürlich diversen Tricks mit ZFS eingehen.

Für Feedback, Anregungen und weitere Optimierungsvorschläge wäre ich euch sehr dankbar.

Ausführliche Installationsanleitung

Und schon kann es los gehen. Die ISO-Datei wird in das virtuelle Laufwerk eingelegt oder entsprechend gebrannt und in das CD-Laufwerk geschoben und der Rechner gestartet.

An dieser Stelle noch einmal der obligatorische Hinweis: Ihr tut das alles auf eigene Gefahr! Ich übernehme keine Haftung für irgendwelche Schäden oder Datenverluste! Alles bedacht? Dann kann es ja losgehen…

Beim Bootscreen der CD wählen wir die Option "Expert install", da so nach jedem Einzelschritt der Installation die Möglichkeit eines manuellen Eingriffs besteht.

Anschließend stellt ihr die Sprache, Region und den Zeichensatz nach eigenem Belieben ein.

An dieser Stelle bemerkt man den Unterschied zur normalen Installation recht deutlich: man muss jeden Schritt einzeln bestätigen. Auch das Suchen und Mounten der Installations-CD vom Installer ist da nicht ausgenommen. Was hier eventuell als unsinniger Schritt erscheint wird später noch sehr nützlich sein.

Um das Nachladen von optionalen Paketen zu ermöglichen sollte eine Internetverbindung bestehen. Diese wird in den nächsten Schritten eingerichtet. Besitzt man einen entsprechend konfigurierten DHCP-Server im Netz, ist dies in wenigen Sekunden geschehen.

Bevor es richtig los geht wird dem Rechner noch ein schöner Name verpasst.

In den folgenden Schritten können Nutzer für das zu installierende System angelegt werden. Hier sollte man erst einmal nur root anlegen und diesem auch einen Login ermöglichen. Weitere Nutzer können nach erfolgreicher Installation noch angelegt werden. Dann allerdings mit den Features von ZFS und einem eigenen ZFS-Dateisystem für jeden Nutzer.

Es folgt eine Synchronisation der Uhr und die Anpassung der Zeitzone.

So langsam wird es wirklich interessant. Die Partitionierung der Festplatte steht an.

Wir partitionieren unsere Festplatte natürlich von Hand und erzeugen eine neue Partitionstabelle.

Wir erzeugen nun zwei Partitionen. Eine erste Partition für den Swap-Bereich, welchem ich in meinem Fall 2 GB spendiert habe. Ihr könnt natürlich auch mehr Plattenplatz für den Swap opfern. Der Swap könnte theoretisch auch innerhalb eines ZFS-Dateisystems lagern aber das ist momentan noch problematisch und es wird dringend davon abgeraten.

Der Rest der Festplatte wird ZFS zugesprochen. Das prinzipielle Vorgehen besteht im Anlegen einer Partition bestimmter Größe und anschließender Definition des Verwendungszwecks und gegebenenfalls des Dateisystems.

Standardmäßig wählt der Partitionsmanager UFS als Dateisystem. Dies muss man explizit in das gewünschte ZFS abändern und anschließend das erstellte Festplattenlayout nochmals bestätigen.

Sind alle Partitionen und Dateisysteme wie gewünscht eingerichtet, wird die neue Partitionstabelle geschrieben und das ZFS-Dateisystem bzw. der entsprechende ZPool angelegt.

An diesem, wie unten dargestellten, Schritt angelangt werden wir den gerade erzeugten ZPool wieder entfernen und durch eine eigene, optimierte Struktur ersetzen. Dies muss natürlich vor der Installation des Basissystems geschehen. Also wechseln wir mittels Alt+F2 auf eine zweite Konsole und führen die folgenden Schritte in dieser Konsole durch.

Der Befehl

zpool list

zeigt den vom Debian-Installer angelegten ZPool. In meinem Fall heißt er freebian-da0s2.

Das Dateisystem, auf welchem Freebian installiert werden soll wird vom Installer unter /target eingehangen. Wir sichern erstmal die bereits vorhandenen Daten mittels tar.

tar cf target.tar /target

Anschließend verwerfen wir diesen ZPool und legen einen neuen ZPool fb an.

zpool destroy freebian-da0s2
zpool create -m none fb /dev/da0s2

Nun legen wir innerhalb dieses ZPools diverse ZFS-Dateisysteme an. Die Optimierungen habe ich hierbei von einer der gängigen Anleitungen für FreeBSD auf ZFS entnommen und entsprechend an Debian angepasst.

Das root-Dateisystem wird unter fb/root erzeugt.

zfs create -o mountpoint=/target fb/root
zfs set checksum=fletcher4 fb/root

Anschließend erzeugen wir noch die Verzeichnisse bzw. ZFS-Dateisysteme für /tmp/usr/var/var/cache/var/log/var/mail/var/run und /var/tmp

zfs create -o compression=on -o exec=on -o setuid=off fb/root/tmp
chmod 1777 /target/tmp

zfs create fb/root/usr

zfs create fb/root/var

zfs create -o compression=off -o exec=off -o setuid=off fb/root/var/cache
zfs create -o compression=lzjb -o exec=off -o setuid=off fb/root/var/log
zfs create -o compression=gzip -o exec=off -o setuid=off fb/root/var/mail
zfs create -o exec=off -o setuid=off fb/root/var/run
zfs create -o compression=lzjb -o exec=on -o setuid=off fb/root/var/tmp

Ich habe das home-Dateisystem nicht unterhalb von fb/root erzeugt, damit von den Nutzerdaten und Systemdaten unabhängig voneinander rekursive Snapshots erzeugt werden können. So kann man später verschiedene Systemversionen und -konfigurationen testen ohne das die Nutzerdaten davon betroffen sind.

zfs create -o mountpoint=/home fb/home

Anschließend spielen wir die vorher gesicherten Daten wieder zurück.

tar xvf target.tar

Nun wechseln wir wieder mittels Alt+F1 auf die erste Konsole zurück und installieren das System in unser neu aufgesetztes Dateisystem. Die folgenden Schritte entsprechen hierbei wieder der normalen Debian-Installation.

Bei der Auswahl der zu installierenden Software sollte man zunächst nur die Standard-Installation und den SSH-Server installieren. Alle andere Software kann nachträglich installiert werden und führt eventuell an dieser Stelle zu Schwierigkeiten.

Nach der Installation der optionalen Software und vor der Installation des GRUB-Bootloaders ist ein erneuter Wechsel auf die zweite Konsole vonnöten, da sonst die Installation des Bootloaders fehl schlägt.

Dies liegt daran, dass das Skript zum Erzeugen der Bootloader-Einträge die Datei zpool.cache nicht finden kann und mit einer Fehlermeldung abbricht. Bei dieser Gelegenheit führen wir auch gleich die restlichen Schritte durch um die Installation normal beenden zu können.

Doch zuerst wird die Datei zpool.cache in die Freebian-Installation kopiert.

cp -r /boot/zfs /target/boot/

Nun passen wir das Skript des Debian-Installers etwas an, damit die ZFS-Dateisysteme nach dem Reboot auch korrekt unter / und nicht unter /target eingehangen werden.

sed -i -e '/^\$CMD/i\/sbin/zfs set mountpoint=/ fb/root' /lib/debian-installer/exit

Mittels chroot wechseln wir jetzt in die Freebian-Installation und kopieren zwei Bibliotheken, welche für ZFS notwendig sind nach /lib und erneuern den Loader-Cache, damit sie nach dem Booten gefunden werden .

chroot /target /bin/bash
cp -v /usr/lib/{libexpat.so.1,libsbuf.so.0} /lib
ldconfig

Immer noch in der chroot-Umgebung schalten wir die Parallelisierung der Boot-Prozesse ab. Dies kann zu einer kleinen Verlängerung der Boot-Zeit führen aber erhöht die Stabilität des Boot-Prozesses in dieser ZFS- und System-Konfiguration erheblich.

echo "CONCURRENCY=none" >> /etc/default/rcS

Jetzt installieren wir noch die zu ZFS gehörigen Programme und verlassen die chroot-Umgebung wieder.

aptitude update
aptitude install zfsutils
exit

Anschließend wechseln wir wieder auf die erste Konsole und installieren den Bootloader in den master boot record und schließen die Installation ab.

Nach dem Reboot sollte der gerade installierte GRUB mit einem entsprechenden Eintrag zu sehen sein, welchen wir booten.

Ist alles fehlerfrei durchgelaufen und haben wir selbst keinen Fehler bei der Installation gemacht, sollten wir uns nun das erste mal als root an unseren Freebian-System anmelden können.

In den folgenden Beiträgen zu Freebian werde ich auf weitere Schritte wie die Installation der grafischen Oberfläche, dem Anlegen neuer Nutzer und natürlich diversen Tricks mit ZFS eingehen.

Für Feedback, Anregungen und weitere Optimierungsvorschläge wäre ich euch sehr dankbar.

debian freebian freebsd howto installation kfreebsd unix zfs
comments powered by Disqus