NAS4Free

NAS4Free

Anfang des Jahres habe ich meinen Server hier zu Hause komplett umgebaut, um etwas mehr Flexibilität und Komfort in die Virtualisierung zu kriegen. Nach etwas Suche bin ich auf Proxmox VE gestoßen, das ich dann auch eingesetzt habe. Nach wie vor ist der einzige Punkt mit dem ich da unglücklich bin die Paravirtualisierung mittels OpenVZ — das ist wohl nicht mehr ganz zeitgemäß. Aber wichtig ist: es funktioniert.

Vollvirtualisiert wird mit KVM, das hat es mir ermöglicht ein NAS4Free als Fileserver einzusetzen. Das basiert auf FreeBSD, es hat eine nette Oberfläche und ist alles in allem echt unkompliziert. Ein Killer-Feature ist die native Unterstützung von ZFS. Ausprobieren musste ich das, obwohl mir klar war dass das auf meiner bescheidenen Hardware wenig Spaß machen würde. Und richtig genug: spätestens mit ZFS waren Zugriffe auf Netzlaufwerke unerträglich langsam.

Ich will nichts gegen ZFS sagen. Das ist eine coole Technik, aber definitiv nicht für meine Umgebung gedacht. In einer virtuellen Maschine mit virtuellen Festplatten und nur sehr wenig Hauptspeicher kann es seine Leistung beim besten Willen nicht ausspielen. Schade. Wenn ich mal einen Fileserver auf echter Hardware bauen will komme ich gerne wieder drauf zurück. Und auf NAS4Free.

So musste ich mich erstmal nach einer Alternative umsehen. Dabei bin ich ziemlich schnell wieder auf zwei Projekte gestoßen von denen ich schon öfter gelesen hatte: OpenMediaVault und Openfiler. Bevor ich mich aber dazu entschließe alles umzuwerfen muss erstmal getestet werden ob die in meiner Situation besser performen würden. Also habe ich beide mal testweise installiert und ein paar Versuche unternommen.

Openfiler

Openfiler

Installiert hatte ich von diesen ISOs:

  • NAS4Free-x64-LiveCD-9.1.0.1.573.iso
  • openmediavault_0.5.0.24_amd64.iso
  • openfileresa-2.99.1-x86_64-disc1.iso

Aber erstmal die Rahmenbedingungen: in dem Server steckt ein Intel Core2Duo E6750, 8GB RAM, zwei SATA-Platten im Software-RAID1 und ein 100MBit-Netzwerk. Den virtuellen Maschinen habe ich jeweils 512MB RAM gegeben, das muss für so einen kleinen Einsatz genug sein finde ich. Systemplatten hatte ich jeweils in 1GB vorgesehen, aber an der Stelle hat Openfiler schon nicht mitgespielt: unter 10GB lässt der sich nicht installieren. Ganz schön viel für ein One-Trick-Pony. Belegt waren nach der Installation 1,7GB. OpenMediaVault hat sich 658MB genommen, NAS4Free war sogar mit 274MB zufrieden.

Mein Anspruch ist, dass ich der virtuellen Maschine bei Bedarf Festplatten nachschieben kann, die dann in einen logischen Verbund — LVM oder ZFS — stecke und darauf flexibel Volumes anlegen kann, deren Größe ich dann den Anforderungen anpassen kann. Redundanz brauche ich hier nicht, da die Platten im Hostsystem schon als RAID1 laufen.

OpenMediaVault

OpenMediaVault

Voll und ganz erfüllt den Anspruch ein ZFS auf NAS4Free. Nur ist das halt auf meiner Hardware zu langsam. Nur mal testweise habe ich ein JBOD auf NAS4Free angelegt. Da könnte ich zwar Platten nachschieben, dafür habe ich aber nicht herausgefunden wie ich einzelne Volumes anlegen kann (das was unter Linux LVM macht). Ob das überhaupt geht würde mich schon noch interessieren, aber schneller wuerde es dadurch wohl auch nicht mehr.

Auf den beiden Linux-Systemen habe ich jeweils ein LVM aus zwei 10GB-Platten angelegt — bei OpenMediaVault mit einem nachinstallierten Plugin — und darin ein ext4-Volume mit 12GB erzeugt auf dem ich getestet habe. Openfiler unterstützt auch schon btrfs, also habe ich das auch mal ausprobiert.

Drei Tests habe ich auf allen diesen Plattformen durchgeführt: erst habe ich ein ISO-File per SCP auf die Laufwerke übertragen (ubuntu-12.10-desktop-amd64.iso, etwa 800MB), dann jeweils an der Shell lokal auf den NAS-Systemen ein tar-File dieses ISOs angelegt (time tar cf test.tar ubuntu*.iso). Zusätzlich habe ich die beiden Tests lokal auf dem Proxmox durchgeführt, nur um ein Gefühl dafür zu bekommen was die Physik hergeben würde. Hier die Zahlen:

  ISO per SCP kopieren ISO in tar packen (lokal)
Lokal, ohne NAS 40.2MB/s 17s
NAS4Free / ZFS 3.7MB/s 247s
NAS4Free / JBOD 6.4MB/s 94s
OpenMediaVault / LVM / ext4 13.5MB/s 26s
Openfiler / LVM / ext4 17.7MB/s 77s
Openfiler / LVM / btrfs 15.9MB/s 50s

Nochmal der Hinweis: das sind nur Stichproben. Ich habe alle Tests nur einmal durchgeführt, und man wird garantiert andere Werte bekommen wenn man die NAS-Systeme nicht in einer virtuellen Maschine installiert sondern auf richtigem Blech. Mir persönlich reichen die Zahlen als Anhaltspunkte. YMMV.

So gerne ich auch bei NAS4Free bleiben würde: ich denke mein neuer Fileserver wird ein OpenMediaVault werden. Auf meiner schmalen und noch dazu virtualisierten Hardware kann NAS4Free sich leider nicht wirklich entfalten. Die Zahlen sprechen hier einfach für Linux. Und OpenMediaVault macht nicht nur beim IO einen guten Eindruck, auch der schmale Fußabdruck bei der Installation ist sympathisch. Oh, und unten drunter liegt ein Debian, das befindet sich hier in guter Gesellschaft. Nur auf btrfs muss ich leider noch verzichten. Das gibt es erst wenn OMV ein Update auf Squeeze vornimmt. Aber bis dahin habe ich schonmal was… :-)

Vor einer Weile schrieb ich ja schon dass mich Proxmox VE ziemlich überzeugt hat. In der Zwischenzeit habe ich nicht mehr allzu viel damit gespielt, jetzt denke ich dass ich das vielleicht einfach mal über die Feiertage zur Grundlage meines Netzes mache… ein weiser Kollege aus München (der hier vielleicht sogar bisweilen rein sieht) hat mir mal die goldenen Worte „wenn Scheiße, dann Scheiße mit Schwung“ mitgegeben… :-)

Ich habe einen zweiten Server hier der in etwa so mächtig ist wie der bestehende. Darauf habe ich ein Proxmox installiert. Die KVM-virtualisierten Systeme waren einfach. Einfach eine passende VM auf Proxmox anlegen und die Laufwerksimages austauschen. Schwieriger sind die paravirtualisierten Maschinen, da hier eine völlig andere Technik eingesetzt wird. Beim Umstieg von Linux-Vserver auf OpenVZ müssen ein paar Extra-Schritte gemacht werden. Ansatzweise ist das auch hier beschrieben, aber ich gebe mal meine eigene Erfahrung wieder.

An dieser Stelle sei kurz angemerkt: OpenVZ ist mir leicht suspekt. Proxmox wäre wesentlich sympathischer wenn es mit Vservern arbeiten würde, aber man kann nicht alles haben.

Also hier kurz ein Log, falls noch jemand vor einem ähnlichen Problem stehen sollte — oder falls ich mich in einem halben Jahr (oder Morgen… :-) ) frage wie ich das gemacht habe.

Erstmal habe ich auf dem alten Server das Root-Verzeichnis des Vservers zusammengetart. Dann auf dem Proxmox-System eine virtuelle Maschine angelegt die in etwa dem alten System entspricht (ID 103). Weiterhin gibt es einen Container mit einem einfachen Debian (ID 104, erstellt nach dem Proxmox-Template für Debian Squeeze) und eine virtuelle Maschine bei der ich bereits in der /etc/network/interfaces konfiguriert habe dass eth0 per DHCP konfiguriert werden soll.

Folgendes ist dann zu tun:

root@proxmox:/var/lib/vz/private# scp server:/mnt/system/vservers/vserver.tar .
root@proxmox:/var/lib/vz/private# tar xf vserver.tar
root@proxmox:/var/lib/vz/private# rm -rf 103
root@proxmox:/var/lib/vz/private# mv vserver 103
root@proxmox:/var/lib/vz/private# rm -rf 103/dev
root@proxmox:/var/lib/vz/private# cp -a 104/dev/ 103/
root@proxmox:/var/lib/vz/private# cp 104/etc/inittab 103/etc/
root@proxmox:/var/lib/vz/private# cp 102/etc/network/interfaces 103/etc/network/
root@proxmox:/var/lib/vz/private# chroot 103
root@proxmox:/# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@proxmox:/# exit

Also, was passiert hier?

  • Das Tar-File der Maschine wird vom alten Server bezogen und entpackt.
  • Die Dateien der Temporären virtuellen Maschine (ID 103) werden entsorgt und durch den Verzeichnisbaum der alten Maschine ersetzt.
  • Vserver mounten das /dev-Verzeichnis des Host-Systems, also wird das duch eine Kopie aus dem Template-System (ID 104) ersetzt.
  • Die /etc/inittab wird ebenfalls übernommen, anderenfalls fehlt ein Eintrag (1:2345:respawn:/sbin/getty 38400 tty1) der zu einer Fehlermeldung führt nach der der Init-Prozess nicht mehr weiß was er tun soll (no more processes left in this runlevel).
  • Aus ID 102 wird die /etc/network/interfaces kopiert, die enthält die Konfiguration nach der eth0 per DHCP konfiguriert werden soll.
  • Ich habe mir nie die Mühe gemacht den Vservern ein Root-Passwort zu verpassen, da ich bei Bedarf einfach per ‚vserver enter…‘ eingestiegen bin. Das muss nachgeholt werden.

Danach kann ich den Container booten, und bis jetzt sieht alles so aus als ob es funktionieren würde… falls noch was zu ergänzen ist werde ich das zu gegebener Zeit nachholen.

Proxmox' Weboberfläche

Proxmox‘ Weboberfläche

In der Regel habe ich keine Angst vor ‚großer‘ Software. Naja, Angst hatte ich auch nicht vor Opennebula. Aber trotzdem habe ich kapituliert. :-(
Ich habe da jetzt ein paar Abende drauf verwendet, aber das scheint doch nicht die richtige Waffe für mein Ziel zu sein. Und der Aufwand das Ding einfach nur zum Spaß zum laufen zu bringen schien mir dann irgendwann zu hoch zu sein. Eigentlich bin ich auf der Suche nach etwas in der Art eines VMware ESX-Servers — nur halt in Open Source. Etwas womit man sich schnell mal bei Bedarf eine virtuelle Maschine klicken kann um irgendwas auszuprobieren.
Nach meinem Eindruck ist Opennebula eher dazu geeignet, sich schnell mal eben 20 oder 50 Maschinen zu klicken. Allerdings scheint es da nötig zu sein die Maschinen vorher als Abbild vorzubereiten. Mal eben das ISO einer neuen Distribution ziehen und booten ist da nicht im Fokus.
Heute habe ich mir ein Proxmox VE installiert, und ich muss sagen: bis jetzt bin ich begeistert!
Die Installation war ein Kinderspiel: auf dem ISO ist ein Debian Squeeze mit fertig installiertem Proxmox. Während der Installation werden nur die Einstellungen für das Netzwerk, ein Hostname und ein Root-Passwort erfragt. Danach kann man die vergebene IP ansurfen und hat eine übersichtliche Weboberfläche in der man sich die Maschinen zusammenklicken kann.
Viel habe ich damit noch nicht gemacht, daher hier nur ein paar Stichworte die ich bis jetzt nennen kann:

  • Wahlweise Virtualisierung mit KVM (um nicht-Linux-Systeme zu betreiben) oder OpenVZ (um Ressourcen zu schonen). Beides geht parallel!
  • Bedienung vollständig über die Webschnittstelle
  • Für OpenVZ gibt es eine Menge Templates mit vorkonfigurierten Systemen, bspw. mit fertig installierten (Web-)Anwendungen. Es scheint nicht allzu schwer zu sein, eigene Templates zu bauen.
  • Eingebaute Backup-Funktionalität: man kann schnell einen Snapshot einer Maschine anlegen, oder auch regelmäßige Sicherungen planen.

Sicher gibt es da noch viel zu entdecken. Ich werde mich da auf jeden Fall noch eingehend mit beschäftigen. Als nächstes sollte ich versuchen rauszufinden wie ich meinen laufenden Debian-Server virtualisieren kann, und wie ich die bestehenden virtuellen Maschinen Proxmox-kompatibel machen kann. Bis jetzt sieht das nach einer echt vielversprechenden Basis für mein Heimnetz aus.