Simon Szustkowski

Ein Blog über alles, was mir gerade so durch den Kopf geht

Jul 23, 2013

NAS im Selbstbau

Ich habe seit 2 oder 3 Jahren einen Homeserver am laufen. Das war zuallererst ein Mac Mini G4, den ich noch übrig hatte, und auf dem ich nur mal ein bisschen basteln wollte. Vor einem Jahr wurde er mir allerdings zu schwach, und ich “rüstete auf” auf einen Fujitsu Futro C100. Eigentlich als Thinclient gedacht, bot er aber die Möglichkeit, anstatt des CF Card Readers eine Festplatte einzubauen, und ihn als vollwertigen Desktop/Server zu benutzen. Nun, sehr viel mehr als ein headless Debian lief da bei mir nicht drauf, aber es reichte aus, als Server.
Nun kam mittlerweile der Raspberry Pi auf den Markt, der genügend Power hat, um Netzwerkdienste wie tftp und dnsmasq zu übernehmen. Die Dienste auf dem Futro reduzierten sich also auf einen Mix aus Downloadprogrammen und einem Fileserver.

Es gab allerdings ein Problem. Die eingebaute Festplatte war nur 120GB groß. Ich hatte da in weiser Voraussicht schon eine SATA-Controllerkarte eingebaut, samt eSATA Schnittstelle, und mir auch schon ein eSATA Gehäuse besorgt. Allerdings fehlte da noch eine ordentlich große Storageplatte. So war lange Zeit mein Plan, irgendwann™ mal eine Storageplatte zu kaufen, und da dran dann zu verdengeln. Allerdings machte mir ab Anfang April die eingebaute Platte einen Strich durch die Rechnung. Der SMARTd meldete ab dann täglich einige ausgefallene Sektoren auf der internen Platte. Dies war irgendwann auch abzusehen, schließlich gelangte diese Platte 2006 in meinen Besitz, und war auch damals schon gebraucht.

In mir entstand der Wunsch: Wenn ich jetzt nochmal einen neuen Server baue, dann richtig. Möglichst stromsparend, leistungsfähig, und vor allem STORAGE!

Ich hörte damals erstmalig von den HP Microservern, u.a. weil mein lokaler Hackerspace sich damals auch einen angeschafft hat. Eine Recherche ergab fast nur positive Erfahrungen mit dem Teil, und so habe ich Mitte Mai mir einen HP N40L auf eBay besorgt. Die Alternative, ein N54L schied damals aus. Dieses Modell hat zwar etwas mehr Power, verbraucht daher allerdings auf etwas mehr Power. Da ich möglichst stromsparend sein wollte, blieb nur der N40L in der Auswahl. Mit dabei waren 2GB ECC-RAM und eine 250GB Festplatte, die im ersten der vier Laufwerkskäfige steckte.

Mein Plan war allerdings, die 4 Cages komplett für Storage zu nutzen, und die 250GB Platte als Systemplatte nach “oben” zu verfrachten, sprich: Im Schacht für das optische Laufwerk zu verstauen. Hierfür benötigt man ein weiteres SATA-Kabelset, sowie Adapterstücke, um ein 3,5″ Laufwerk in einen 5,25″ Schacht zu verbauen. Der N40L ist dafür bereits vorbereitet, das Netzteil hat noch einen freien Laufwerksanschluss, und das Mainboard einen freien SATA-Steckplatz.

Damals war mein Plan noch, da wieder ein reguläres Linux draufzumachen, und die 4 Storageplatten in einem Software-RAID5 zusammenzuschalten. Doch ich hatte schon länger mal vor, mir auch mal das ZFS-Dateisystem mal näher anzusehen, was ja seine Stärken erst bei mehreren Storagedevices richtig ausspielen kann. Aus lizenzrechtlichen Gründen ist ZFS allerdings nicht im Linuxkernel enthalten, und auf irgendein Rumgefrickel mit FUSE hatte ich keine Lust. Es gibt aber mehrere fertige Distributionen, die direkt auf NAS-Betrieb eines Servers getrimmt sind, ZFS nativ drin haben, und mehr oder weniger einfach aber flexibel zu konfigurieren sind. Meine Wahl fiel dabei auf Freenas, was seinerseits auf FreeBSD basiert.

Während meiner Recherche bezüglich des eingebauten Raid-Controllers des N40L (der leider nur RAID0 und 1 kann), stieß ich allerdings vorher noch auf einen interessanten Fakt. Es ist nämlich so, dass es für den N40L ein modifiziertes BIOS gibt, was noch ein paar mehr Features und Einstellungen bezüglich SATA freischaltet (z.B. AHCI auf allen Ports und nicht nur auf den 4 Cage-Ports, etc). Wie das flashen des neuen BIOS funktioniert, und wo man es herbekommt, steht hier. Das Flashen ging relativ unkompliziert, man muss lediglich beachten, dass das Tool zum erstellen des USB-Stick selten dämlich programmiert wurde, und beim Erstellen des Sticks das “offizielle” BIOS herunterlädt, und danach den gesamten Inhalt des Downloadordners auf den Stick kopiert. Man sollte also vorher seinen Downloadordner leeren. Auch kann es sein, dass der Autostart des Sticks im Server nicht funktioniert, man muss also das Batchfile manuell vom DOS-Prompt aus aufrufen.

Zur Installation von FreeNAS gibt es folgendes anzumerken: FreeNAS selbst empfiehlt die Installation auf einem USB-Stick oder einer CF-Card. Es benötigt nämlich nur ca 8GB Speicherplatz, und installiert sich selbst so auf dem Ziellaufwerk, dass jeglicher freier Speicherplatz darüber hinaus unbenutzbar ist. Das war mir zunächst egal, schließlich hatte ich die 250GB Platte extra dafür vorgesehen. Der Microserver hat kein eigenes optisches Laufwerk, daher wollte ich die Installation von USB versuchen. Hierzu lädt man NICHT die USB-Installation herunter (die ist dafür vorgesehen, dass das Image direkt auf den Stick geschrieben wird, wovon FreeNAS mal booten soll), sondern das CD-ISO-File, und klont es mit dd auf den Stick. Leider ist Mac OS da ziemlich scheiße, und legt bei allen Datenträgern >2GB immer eine EFI-Partition mit an, die dann die erste Partition des Datenträgers ist. Sämtliche Boot-Images, die dann von der ersten Partition booten wollen (weil ihnen das hardcoded mitgegeben wurde), versagen dann im Bootprozess. Ich habe (immer noch) keine Ahnung, wie man das Verhalten MacOS abgewöhnen kann.
Ich habe das Problem dann gelöst, indem ich mir ein USB-Superdrive besorgt habe. Der Server kann problemlos von USB booten, und so habe ich dann das Image ganz herkömmlich gebrannt, und dann installiert.

Der nächste Schritt war, abzuwägen, wieviel RAM benötigt wird. Es sind ja schon 2GB vorinstalliert, allerdings empfiehlt Oracle für jedes TB im ZFS 1GB RAM. Mein Plan, 4x3TB zu nutzen, hätten also 12GB RAM erfordert. Da der N40L Dualchannel-tauglich ist, habe ich kurzerhand 2x8GB RAM bestellt. HP sagt zwar, dass die Kiste nur 8GB verträgt, das Internet ist aber der Meinung, dass 16GB auch locker funktionieren. Ja, denkste. Als der RAM dann da war, bemerkte ich, dass die Kiste beim booten in den POST Messages manchmal nur 8GB erkannte, und manchmal die vollen 16GB. Im BIOS selbst waren allerdings immer beide Speicherbänke mit jeweils 8GB belegt markiert. Hätte ich vorher noch etwas weiter recherchiert, hätte ich gemerkt, dass der N40L die 16GB nur bei bestimmten Modellen zuverlässig erkennt. Die Community schob dieses Verhalten auf einen Bug, den HP nicht geschafft hat zu lösen. Nämlich so, dass das Board sehr wohl 16GB schluckt, aber HP dieses unzuverlässige Erkennen nicht debugged bekommen hat, und deswegen nur 8GB als Richtwert angibt. Als Workaround für mich, der ich glücklicherweise schon das inoffizielle BIOS geflasht hatte, blieb die Option, den Parity-Check für den RAM im BIOS zu aktivieren. Da ich mir keinen ECC-RAM ausgesucht hatte, hieß es, die Option sei eigentlich nicht sinnvoll, aber in dem Fall sorgte sie dafür, dass der Server in 34 aller Bootprozesse die 16GB korrekt erkannte. Und so ein NAS wird ja nicht häufig neu gestartet.

Zu den Storageplatten: Die Empfehlungen, die ich bezüglich der Festplatten kamen, waren gemischt. Fast alle rieten mir von Seagate ab, ich solle doch lieber Western Digital nehmen. Aber auch hier schieden sich die Geister. Einige sagten, die RED-Platten seien gut in einem NAS, weil sie ja extra dafür entwickelt wurden, einige andere sagten mir, bloß nicht die RED, die sind unzuverlässig wie Sau. Ich habe dann einfach mal bei Geizhals geguckt, was denn so die billigsten 3TB-Platten sind. Und Geizhals schlug mir die Toshiba DT01ABA Serie vor. Auch hierzu hatte das Internet schon einige Erfahrungen gesammelt. So hieß es, dass die Platten eigentlich ganz geil seien, um in einem NAS verbaut zu werden. Sie seien vibrationsarm, werden nicht zu warm, seien lediglich etwas zu laut. Und dass es eigentlich vom Controller her Hitachi-Platten seien, und da nur ein Toshiba-Aufkleber draufpappt. In der Tat haben sich die Platten am BIOS als Hitachi angemeldet.
Nun rät man zu größtmöglicher Diversität bei den Festplattenmodellen in einem RAID, denn falls eine Modellreihe scheiße sei, würden nicht gleich alle Platten auf einmal ausfallen. Meine Diversität bestand dadrin, primär aus Budgetgründen, nicht alle Platten gleichzeitig zu bestellen, sondern nacheinander. So habe ich jetzt Platten verbaut, die von November 2012 bis Februar 2013 hergestellt wurden. Sollte also mal eine Charge ausfallen, sind nicht gleich alle Platten weg.

Da ich mich mittlerweile auf das FreeNAS-OS eingeschossen hatte, und ich so langsam zu der Einsicht kam, dass eine eigene Festplatte dafür vielleicht doch ein bisschen zu Overkill sein dürfte, und nur unnötigen Stromverbrauch bedeutet, habe ich mal eine ältere CF-Card genommen, die eigentlich noch ganz gut schien, und sie zusammen mit einem CF-SATA-Adapter auf ein 2,5″-3,5″ Adapterblech anstatt der 250GB Platte im 5,25″ Schacht verbaut. Leider schien die Karte doch schon ziemlich kaputt zu sein, zumindest ließ sich FreeNAS darauf nicht installieren. Ich habe stattdessen einen Sandisk Cruzer USB-Stick genommen, und in den internen USB-Port gesteckt. Klappt auch. In den nun freigewordenen 5,25″ Schacht habe ich dann eine 5. Storageplatte eingebaut.

Nun muss ich nur noch warten, bis FreeNAS Version 9.1 rauskommt, was bald soweit sein dürfte.

Die komplette Preisliste sieht nun so aus:

[table id=1 /]

Macht einen Gesamtpreis von 794,74€. Hierfür erhält man ein NAS mit 5 Schächten im RAIDZ1, was sowohl von den Diensten als auch von der Hardware ultraflexibel ist. Die Festplatten haben eine Nettogröße von 2,7TB, alle 5 im RAIDZ1 zusammengeschaltet ergeben eine Nennspeichergröße von 10,7TB.

Zum Vergleich: Ein von der Hardware vergleichbares Embedded NAS kostet alleine schon ohne Platten 440€, und bietet weder die gleiche Flexibilität von der Software her, noch die Besonderheiten von ZFS. Außerdem hat es einen Hardware-RAID-Controller, d.h. wenn der abraucht, sind die Daten weg. Bei meiner Selbstbaulösung kann ich die 5 Platten einfach in ein anderes System einbauen, was ZFS beherrscht, und den Plattenpool einfach importieren.

Durch die Jail-Thematik von FreeNAS, wodurch man quasi virtualisierte Systeme bekommt, die innerhalb des NAS laufen, kann ich theoretisch jegliche Art von unixoider Software installieren, die mir in den Sinn kommt. Und mir schwebt da ein Konstrukt mit Crashplan vor, was mir Offsitebackups mit unlimitiertem Speicherplatz verspricht. Ich bin mal gespannt, ob die mal bei mir nachfragen, wenn ich erstmal so 10TB zu backuppende Daten in deren Speicher schaufele. :D