Birdie baut sich einen Fileserver

Hier könnt Ihr um das Thema "Rechner" diskutieren.
User avatar
Birdie
Administrator
Posts: 1132
Joined: Sat 3. Nov 2007, 17:14
Location: Vatne, Norwegen
Contact:

Birdie baut sich einen Fileserver

Post by Birdie »

Es hat sich bei mir als praktisch erwiesen, alle Daten zentral abzulegen. Das derzeit in Betrieb befindliche NAS (QNAP TS-209 Pro) hat rund 4 Jahre problemfrei seinen Dienst geleistet, ist aber nicht auf den neuesten Stand zu bringen, was Speicherkapazität und Bandbreite angeht. Daher wird ein eigener Fileserver geplant, der diesen Umständen besser Rechnung tragen soll und weitere Möglichkeiten bietet.

Einsatzzweck:
- Datenlager im Heimnetz per CFIS / Samba
- Backupserver für die "normalen" Rechner im Netz
- Netzwerkfestplatte für Satellitenreceiver, per NFS eingebunden
- DLNA Server für MP3, DVDs und Video anderer Art

Prioritäten
1. Erweiterbarkeit (langfristiger Einsatz geplant)
2. Speicherplatz (kein Vergeuden von Anschlüssen)
3. Bandbreite (der Server soll keinen Flaschenhals darstellen)
4. CPU-Leistung (der Fileserver langweilt sich wohl eher die meiste Zeit)
5. Stromverbrauch (Hier ist der Strom billig und im Zweifel braucht die Heizung im Serverraum entsprechend weniger Strom)
6. Lautstärke (solange es im Nebenraum noch ruhig ist, sehe ich kein Problem)
7. Kosten (wird teuer, aber Mittel stehen zur Zeit zur Verfügung)

Grobplanung
Der Server soll unter Debian Linux betrieben werden. NFS, Samba, rsync und miniDLNA erfüllen das Anforderungsprofil.
Das Betriebssystem soll auf einem externen Speichermedium abgelegt werden, um keinen SATA Platz zu belegen.
Es soll keine eigene Grafikkarte verwendet werden, sondern Onboardgrafik.
Es soll ein Miditower verwendet werden.
Festplatten im Software RAID Betrieb (RAID5 oder RAID6), um eine gewisse Redundanz zu erreichen.

Detailplanung
Nach längerem Überlegen ist meine Wahl auf ein Intel Sandy Bridge System gefallen. Dieses bietet eine angemessene Erweiterbarkeit und onboard Grafik. Das Board ASUS P8Z68 LX wird als Ivy Bridge tauglich angepriesen, so daß die PCIe Steckplätze bei einem evtl. eintretendem CPU Wechsel auf PCIe 3.0 betrieben werden können, was die Bandbreite pro Steckplatz verdoppelt. Das Board bringt 2 USB 3.0 Anschlüsse, 4 USB 2.0 Anschlüsse hinten, sowie 4 interne USB Header für weitere externe USB 2.0 Anschlüsse mit. Ein 16x PCIe 2.0 Steckplatz, ein 4x PCIe 2.0 Steckplatz (bei Benutzung der weiteren PCIe Steckplätze nur im 1x Betrieb), zwei 1x PCIe 2.0 Steckplätze und 3 PCI Steckplätze runden das Bild ab. Das Board stellt 2 SATA 6Gbit und 4 SATA 3Gbit Anschlüsse zur Verfügung. 4 Speicherbänke erlauben eine Speicheraufrüstung auf max. 32 GB (non-ECC). Es ist ein PS2 Tastaturanschluß vorhanden. 1Gbit LAN ist vorhanden, sowie HDMI-,
DVI- und VGA-Ausgänge für die integrierte Grafik. Es können 3 Gehäuselüfter und ein CPU-Lüfter über das Board angesteuert werden.

Bootlaufwerk
Zunächst dachte ich an einen USB 3.0 Stick als Bootlaufwerk. Mit 5 Gbit/s bietet dieser Port genug Bandbreite, um keinen Flaschenhals darzustellen. Leider sind die USB 3.0 Anschlüsse über einen externen Chip (NEC) realisiert. Damit lassen sich am USB 3.0 Port betriebene Komponenten nicht als Bootmedien nutzen. Erst bei den neuen Ivy Bridge Chipsätzen wird USB 3.0 im Chipsatz integriert sein. Ich habe allerdings nicht vor, so lange mit dem Kauf zu warten, bis entsprechende Boards in ausreichender Verfügbarkeit in den Regalen stehen. Die verfügbare Bandbreite für das Bootlaufwerk sinkt also auf USB 2.0 Niveau (480 MBit/s). Mehr als 60 MByte/s sind also schon theoretisch nicht mehr drin. Aufgrund des Protokolloverheads bleiben davon nur noch etwa 35 MByte/s an Nutzdatentransferrate übrig. Schon langsame Festplatten erreichen problemlos das doppelte dieser Datenrate. Es zeigt sich also, daß es sich hier nicht lohnt, in High-end Speicher zu investieren. Die Wahl fiel auf eine Compact Flash Card Sandisk Ultra 8 GB. Die 4 GB Karte hätte im Prinzip auch gereicht, war aber nicht mehr erhältlich. Die Karte wird mit 30 MByte/s (schreiben und lesen) beworben, und erreicht diese Geschwindigkeit beim sequentiellen Schreiben und Lesen auch in diversen Tests. Der Vorteil gegenüber einem USB Stick liegt in der höheren Schreibgeschwindigkeit, die bei preislich vergleichbaren Sticks häufig nicht über 15 MByte/s herauskommt. Der Vorteil gegenüber einer externen Festplatte im USB Gehäuse liegt im geringeren Preis und geringerem Stromverbrauch bei gleicher Leistung. Für eine CF Karte mit Kartenleser sind etwa 40 EUR zu planen. Für eine externe Festplatte wäre in etwa das Doppelte nötig.
Die CF Karte soll über einen externen CF Kartenleser angesprochen werden. Dies wird ein Kingston Hi-Speed 19-in-1 Media Reader erreicht. Abgesehen von Problemen mit xD Karten hat dieser Kartenleser vernünftige Resultate erzielt und ist mit etwa 11 EUR auch noch ziemlich günstig.
Flashspeicher hat gewisse Vor- und Nachteile gegenüber Festplatten, die bei der Installation berücksichtigt werden müssen. Es gibt keine bewegten Teile, so daß mechanischer Verschleiß nicht vorkommt. Auch die Zugriffszeiten können deutlich niedriger ausfallen als bei Festplatten. Es wird keiner der knappen SATA Ports für den Betrieb benötigt. Allerdings überlebt Flashspeicher nur eine begrenzte Anzahl von Schreibzugriffen, was beim Aufsetzen des Betriebssystems berücksichtigt werden muß. Weiterhin ist die kontinuierliche Datenrate gegenüber Festplatten beschränkt, was sich am USB 2.0 Port allerdings nicht bemerkbar macht.

Gehäuse
Hier geht der Sparfuchs mit mir durch. Der Server wird im Keller stehen und darf daher so häßlich wie die Nacht sein. Der Coolermaster Elite 310 fiel mir aufgrund seiner großen Anzahl von Laufwerksschächten auf und rangiert bei etwa 35 EUR. Das Frontpanel ist unten angebracht, was mir eher nicht gefällt und bringt 2 USB 2.0 Buchsen, sowie Soundanschlüsse mit. Das Netzteil ist oben im Gehäuse zu montieren. Hinten ist ein 120mm Lüfter vormontiert, vor dem Laufwerkskäfig ist Platz für einen 120 mm Lüfter, im Seitenteil Platz für einen 80-120mm Lüfter. Es sind 4 externe 5,25" Schächte frei, 1 externer 3,5" Schacht und 6 interne 3,5" Schächte. Rein rechnerisch lassen sich also 11 Laufwerke unterbringen. Um das Austauschen einer ausgefallenen Platte zu vereinfachen, wird das Gehäuse um SATA Backplanes mit Wechselrahmen erweitert. In je 2 5,25" Schächte paßt eine Backplane mit Platz für 3 3,5" Laufwerke. Als Backplane wird der Icy Dock MB973SP-B verwendet. Diese Lösung bietet die folgenden Vorteile:
Die Festplatten lassen sich einzeln an- und ausschalten, was zum physischen Trennen eines nur zum Backup verwendente Datenträger verwendet werden kann. Ebenso ist es damit möglich, ein ausgefallenes RAID zu simulieren. Es werden keine extra Laufwerksschlitten benötigt, wie das bei einigen anderen Produkten der Fall ist. Es werden je Backplane ein eSATA- und ein USB 2.0 Anschluß zur Verfügung gestellt. Der eingebaute Lüfter hat Standardmaße (80x80x25 mm) und wird temperaturgeregelt. Mit den USB 2.0 Anschlüssen an den Backplanes werden die ungüngstig plazierten Frontpanelanschlüsse des Gehäuses entschärft. Die Laufwerksschächte sind Hot-plug und Hot-swap fähig, so daß der Rechner für das Tauschen von Festplatten nicht heruntergefahren werden muß.
Durch die Backplanes erhöht sich die Anzahl der im Gehäuse vorhandenen Laufwerksschächte nun auf 13. Zusätzlich werden zwei SATA Anschlüsse nach außen geführt. Ein Nachteil der Backplanes besteht darin, daß die Anschlußkabel für die eSATA Anschlüsse fest mit der Backplane verbunden sind. Außerdem wird "nur" SATA 3Gbit unterstützt. 3Gbit/s reicht zur Übertragung von etwa 300 MByte/s Nutzdaten aus. Moderne Festplatten erreichen um die 200 MByte/s in Spitzenbereichen und werden daher noch nicht durch SATA 3 Gbit/s ausgebremst. Mit modernen SSDs sähe es dagegen schon anders aus.
Die Backplanes werden über je 2 4polige Molex Stecker mit Strom versorgt.

SATA Ports
Wer mitgezählt hat, wird festgestellt haben, daß deutlich mehr Laufwerksschächte (13+2x eSATA) vorhanden sind, als SATA Anschlüsse (6). Es gibt zwar die Möglichkeit per "port replication" mehrere Festplatten über den gleichen SATA Port anzuschließen, allerdings teilen sich dann die Festplatten die Bandbreite des Ports. Die Bandbreite von zwei Festplatten überschreitet im Spitzenbetrieb bereits die Bandbreite eines 3Gbit/s SATA ports, so daß der Einsatz von port replication zu Lasten der Bandbreite geht. Als Alternative lassen sich zusätzliche SATA Controller einsetzen. Der Adaptec Raid 6805E stellt 8 zusätzliche 6GBit/s SATA Ports zur Verfügung und benötigt dazu einen PCIe 2.0 Steckplatz mit 4x Geschwindigkeit. Damit erhöht sich die Anzahl der vorhandenen SATA Ports auf 14.
Wir üben uns ein wenig im Kopfrechnen und schauen uns die verfügbare Bandbreite an. Ein PCIe 1.0 Steckplatz mit 1x Geschwindigkeit liefert rund 250 MByte/s, der PCIe 2.0 Steckplatz mit 4x Geschwindigkeit erhöht dies um den Faktor 8 auf 2000 MByte/s. 8 Festplatten mit je rund 200 MByte/s Spitzenleistung können also betrieben werden, ohne daß der Controller den Flaschenhals darstellt. Es werden allerdings nicht die volle Geschwindigkeit von 8 SATA 6Gbit/s Verbindungen erreicht. Diese beträgt mit ca. 8 x 500 MByte/s = 4000 MByte/s genau das doppelte der tatsächlich verfügbaren Bandbreite.
Der Controller kann, wie der Name schon sagt, selber ein RAID betreiben. Dieses überlasse ich jedoch lieber dem Betriebssystem, um ggf. auch ein RAID aus Kombinationen der SATA Ports des Mainboards und der Ports des Controllers aufbauen zu können. Der Controller kann die angeschlossenen Festplatten auch transparent an das Betriebssystem weitergeben (JBOD = Just a Bunch of Disks). Eigentlich ist der Controller für den Betrieb (teurer) SAS Laufwerke vorgesehen, allerdings versteht er sich auch auf SATA Platten und bringt in der Retail Version auch Kabelpeitschen mit, mit denen sich die Platten anschließen lassen. Moment - Kabelpeitschen? Wir denken einen Augenblick zurück und erinnern uns an die eSATA Anschlüsse der SATA Backplanes. Die zugehörigen Kabel sind fest an der Backplane angeschlossen und erwarten als Gegenstück eine Buchse. Das gleiche gilt für die Kabelpeitschen. Es werden also auch noch zwei SATA Adapter Stecker auf Stecker benötigt, um die eSATA Anschlüsse nutzen zu können.
Mit dieser Konfiguration sind also 12 interne Laufwerke und 2 eSATA Laufwerke nutzbar. Ein 3,5" Schacht liegt brach und kann ggf. zur besseren Lüftung / Kühlung verwendet werden. Zwei externe USB 3.0 Schnittstellen lassen den Anschluß von (mindestens) zwei weiteren externen Festplatten zu. USB 3.0 liefert mit 5 GBit/s in etwa die gleiche Bandbreite wie SATA 6Gbit. Damit lassen sich etwa 400 MByte/s übertragen, was für zwei Festplatten je USB 3.0 Port ausreichen würde. Wir begnügen uns damit, dieses als eine Option für die Zukunft im Gedächtnis zu behalten.
Alternativ zum Adaptec RAID 6805E ließen sich auch 3 Highpoint Rocket Raid 620 Steckkarten verwenden. Diese bringen jedoch nur 2 SATA Ports per Steckkarte mit. Weiterhin würde statt 1x PCIe 4x Geschwindigkeit nur 3x PCIe 1x Geschwindigkeit verwendet werden. Es sollte allerdings erwähnt werden, daß 3 dieser Karten billiger als die eine Adaptec Karte sind. In der angestrebten Konfiguration sind noch 3 PCI, 2 PCIe 1x und 1 PCIe 16x Erweiterungsslot frei. PCI ist im Gegensatz zu PCIe ein Bus und keine Punkt zu Punkt Verbindung. Daher teilen sich alle PCI Geräte die verfügbare Bandbreite des Busses. Zusätzlich ist die Gesamtbandbreite schon recht beschränkt (ca. 266 MByte/s für 32 Bit PCI 2.1), was gerade mal für den Betrieb einer einzelnen Festplatte ausreichen würde. Der PCI Bus wird daher links liegen gelassen.
Die Verwendung der beiden PCIe 1x Steckplätze verbietet sich von selbst, da sonst der Adaptec SATA Controller in den PCIe 1x Betrieb zurückgestuft wird, was zu zu starken Bandbreiteneinbußen führen würde. Bliebe noch der PCIe 16x Steckplatz - aber mit dem haben wir noch etwas anderes vor. Dazu später mehr.

Stromversorgung
Wir versuchen uns mal wieder im Kopfrechnen:
12 interne Festplatten mit je 20 W Anlaufleistung = 240 W.
Eine CPU mit max 95 W TDP.
Ein Board mit max. 30 W Leistung.
Eine Netzwerkkarte mit ca. 15 W Leistung.
Eine SATA Controllerkarte mit ca. 15 W Leistung.
4 Speicherriegel mit zusammen 4 W Leistung.
Compact Flash Card mit ca. 1 W Leistung
Das macht zusammen 400 W Spitzenleistung.
Im Normalbetrieb werden die Festplatten deutlich weniger Leistung benötigen, d.h. eher 90 W, so daß das Netzteil nur beim Einschalten und Anlaufen der Festplatten hoch belastet werden würde. Das Seasonic S12II-380 Bronze liefert 380 W, ist 80+Bronze zertifiziert, hat 6 4polige Molex Stecker und 4 SATA Stromversorgungen, sowie 2 FDD Stromanschlüsse, so daß genug Anschlüsse für die Backplanes und weitere 6 interne Festplatten zu Verfügung stehen (4x SATA Strom + 2x Adapter von 4polig auf SATA). Externe Geräte müssen eine eigene Stromversorgung mitbringen. Der hohe Strombedarf der Festplatten dürfte den ein oder anderen überraschen. Dieser wird nur beim Einschalten der Festplatten benötigt, um die Magnetscheiben auf Betriebsdrehzahl zu beschleunigen. Im Betrieb liegt die benötigte Leistung bei etwa einem drittel der Anlaufleistung. Um zu verhindern, daß riesige Netzteile benötigt werden, nur um die Anlaufleistung der Festplatten abzudecken, gibt es auch die Möglichkeit, die Festplatten sukzessiv zu starten, so daß sich die Anlaufleistungen der Festplatten nicht aufsummieren. Dieses wird im Englischen als "staggered spin-up"
bezeichnet und wird u.a. vom Adapatce Raid 6805E unterstützt. Die Firmware der Festplatten muß diese Funktion natürlich ebenfalls unterstützen.

Netzwerkanbindung
Die Netzwerkanbindung kann zwar im Prinzip über den auf dem Board verbauten Realtek Chip erfolgen, allerdings kostet dies CPU-Leistung. Für kleines Geld kann eine Intel Gigabit CT Desktop Netzwerkkarte angeschafft werden, die dank eigenem Chip weniger CPU Last erzeugt.
Wir schauen uns noch einmal die verbauten Komponenten an und kommen etwas ins Grübeln. Eine Festplatte hat eine Spitzenleistung von 200 MByte/s. Das sind ca. 1,6 GBit/s. Eine 1GBit Netzwerkanbindung reicht also nicht einmal aus, um eine einzelne Festplatte mit voller Geschwindigkeit anzubinden??? Eine 1TB Fesplatte übers Netzwerk zu füllen, würde da über 2h dauern. Wir denken an die im Netzwerksegment übliche Verzehnfachung der Bandbreite und schauen uns 10GBit/s an: Bei 10Gbit/s ist genug Bandbreite für 1,2 GByte/s, also die Spitzenlast von etwa 6 parallel betriebenen Festplatten, vorhanden. Im Realbetrieb erreichen die Festplatten eher 80-100 MByte/s, so daß genug Bandbreite für 12 Festplatten vorhanden ist. Mehr Festplatten konnten wir ohnehin nicht im Rechner unterbringen. Die Technik klingt geeignet, und wir schauen uns die Sache einmal näher an:
Die passende Technik gibt es schon seit mehreren Jahren. Es kann entweder Glasfaser oder Kupfer als Übertragungsmedium verwendet werden. Kupferleitungen sind abwärtskompatibel zu 1GBit, 100MBit, 10MBit Technik. Für ein Glasfasernetzwerk müssen Medienumsetzer verwendet werden, was wir aufgrund der größeren Anzahl vorhandener Komponenten vermeiden wollen. Also weiter zu 10GBit über Kupfer. Die Ansprüche an die Verkabelung sind deutlich höher als bei "normalem" Netzwerkkabeln. Es wird Qualität Cat6A gefordert und auch die Netzwerkbuchsen und Patchpanels müssen diesem Standard folgen. Solange keine Punkt zu Punkt Verbindung aufgebaut werden soll, benötigt man auch noch einen passenden Switch. Nach einer kurzen Studie der Preise und Datenblätter von 10Gbit/s Switchs nehmen wir Abstand davon, alle Netzwerkkomponenten auf 10Gbit/s umzustellen. Die Preise liegen bei einigen tausend EUR und die Leistungsaufnahme bei über 100 W. Es ist zu erwarten, daß die Preise und die Leistungsaufnahme noch fallen werden, sofern sich diese Produkte stärker am Markt verbreiten. Außerdem besteht die Möglichkeit eine Punkt zu Punkt Verbindung zwischen Fileserver und Hauptklienten aufzubauen, wenn die Übertragungsstrecke schon 10 GBit/s unterstützt. Dies setzt lediglich eine passende Netzwerkkarte im Server und Klienten voraus. Beim Thema Netzwerkkarte fangen wir wieder an zu rechnen: 10 GBit/s also 1,2 GByte/s benötigen mindestens 4 PCIe 2.0 Lanes und einen entsprechenden Steckplatz auf dem Motherboard. Da wir im Fileserver keine Grafikkarte benötigen, steht der eigentlich dafür vorgesehene Steckplatz mit satten 16 Lanes zur Verfügung. Intel hat mit der X540-T2 Netzwerkkarte eine 10Gbit/s Dual port Karte angekündigt, die noch im ersten Quartal 2012 erscheinen soll. Diese benötigt 8 PCIe 2.0 Lanes, um 2 10Gbit/s Anschlüsse gleichzeitig versorgen zu können. Diese Karte bietet sich daher für Server und Klient an, kann doch über den ersten Port eine 1:1 Verbindung zwischen den beiden hergestellt werden und mit dem anderen eine Verbindung in das restliche 1 Gbit Netzwerk.
Es lassen sich auch mehrere physische 1 GBit/s Karten zu einer logischen mit erhöhter Geschwindigkeit zusammenschalten (port trunking), so daß auch mit bestehender 1 GBit Technik eine höhere Bandbreite erzielt werden kann. Dieses Verfahren hat allerdings mehrere Nachteile. Als erstes ist zu erwähnen, daß man natürlich auch für jede Netzwerkbuchse ein eigenes Kabel zum Switch legen muß. Wenn man 10 GBit/s auf diese Weise erreichen will, werden also 10 Kabel bis zum Switch benötigt. Weiterhin benötigt man einen konfigurierbaren Switch, der das Zusammenschalten unterstützt. Für das Verbinden vom Hauptarbeitsplatz mit dem Fileserver mit 10x 1GBit/s bräuchte man also jeweils 10 Leitungen, so daß dies alleine 20 Ports am Switch belegte. Vom Aufwand, 10 statt einem Kabel quer durchs Haus zu verlegen, möchte ich erst gar nicht anfangen.

Festplatten
Als Festplatten werden in der ersten Ausbaustufe 6 Hitachi 5K3000 3TB Festplatten verwendet. Diese sind für eingeschränkten 24/7 Betrieb spezifiziert und verstehen "staggered spin-up". Nachteile gegenüber vergleichbaren Festplatten sind höherer Preis und höherer Stromverbrauch. Festplatten mit 4TB sind zwar gerade auf dem Weg in den Einzelhandel, allerdings sind diese noch überproportional teurer als die 3TB Versionen.

RAID
Die Festplatten werden in einem RAID6 Verbund betrieben. Bei diesem Verfahren verhalten sich die Festplatten Anwendungen gegenüber wie eine einzige große (und schnelle) Festplatte. Um Datenverlust durch Festplattenausfall vorzubeugen, wird bei 6 Festplatten im RAID6 Verbund die Kapazität von 2 Festplatten verwendet, um Informationen redundant zu speichern. Bis zu zwei Festplatten können gleichzeitig ausfallen, ohne daß ein Datenverlust eintritt. Es ergibt sich eine nutzbare Gesamtkapazität von 4x 3TB = 12TB. Die Festplatten werden in einem Software RAID per mdadm betrieben. Dies führt zu einer vergleichsweise hohen Belastung der CPU, da Paritätsinformationen bei jedem Schreibzugriff berechnet werden müssen.

Dateisystem
Compact Flash Karten überleben nur eine begrenzte Anzahl (einige tausend) Schreiboperationen. Um zu verhindern, daß die als Bootlaufwerk eingesetzte CF Karte zu früh das Ende ihrer Lebensdauer erreicht, wird das Dateisystem und das Betriebsystem etwas angepaßt. Als Dateisystem wird ext2 eingesetzt, daß ohne Journaling auskommt. Beim Journaling wird nämlich, vereinfacht gesagt, eine Datenbank über alle Änderungen (Kopieren/Löschen/Verschieben) geführt, um auch bei einem Absturz des Betriebssystems während Dateizugriffs, auf einfachem Wege ein konsistentes Dateisystem wiederherstellen zu können. Leider führt der rege (Schreib-)Zugriff auf das Journal zu einer verstärkten Belastung der CF Karte.
Weiterhin wird standardmäßig vom Dateisystem nachgehalten, wann der letzte Lesezugriff (access time) auf eine Datei erfolgte. Diese Information wird in den Dateiattributen gespeichtert. Um diese unnötigen Schreibzugriffe auf der CF Karte zu vermeiden, wird das Dateisystem mit dem Parameter -noatime eingebunden. Auch Logdateien und temporäre Dateien führen zu regelmäßigen Schreibzugriffen auf die CF Karte. Diese werden unterbunden, indem ein temporäres Laufwerk im Hauptspeicher angelegt wird, auf dem die Logdateien und temporären Dateien "gespeichert" werden. Nach jedem Boot verschwinden zwar alle Einträge, dies stellt bei temporären Daten allerdings kein Problem dar und ist auch bei den meisten Logdateien verschmerzbar. Für den Fall, daß diese Daten doch einmal dauerhaft benötigt werden sollten, lassen sie sich auch im Datenlager auf der Festplatte ablegen.
Auf eine sogenannte Swap-Partition (etwa vergleichbar der Windows Auslagerungsdatei), wird verzichtet. Wenn der Hauptspeicher ausgeht, kann sich zwar das System aufhängen, allerdings wird dieser reichlich bemessen werden, damit genau dies nicht passiert.
Die im RAID Verbund betriebenen Festplatten werden mit dem Dateisystem ext4 betrieben werden. Dieses erlaubt Dateisystemgrößen jenseits von 16 TB und weist einen gewissen Geschwindigkeitsvorteil gegenüber ext3 auf.

Netzwerkanbindung
Das ausgewählte Motherboard verfügt zwar bereits über einen eigenen Netzwerkchip, dieser belastet allerdings die CPU und ist mit größeren Mengen gleichzeitiger Anfragen schnell überlastet. Es wird daher eine 1GBit/s Intel Pro 1000 CT Netzwerkkarte verbaut, die per 1x PCIe angebunden ist.

CPU
Nach dem Motto "viel hilft viel" wird ein Core i5 2500 verwendet, der neben dem berechnen von Paritätsinformationen des RAID Systems auch noch genug Power für das Transkodieren von Videos in Echtzeit haben sollte und ggf. den Einsatz von Virtualisierungslösungen erlaubt.

Speicher
Das Board wird mit 16 GB Kingston Value RAM ausgestattet. Linux freut sich über allen Speicher, der zum Cachen von Dateizugriffen verwendet werden kann. Zusätzlich wollen RAM-Disk für temporäre Dateien und das Vermeiden einer Swap-Partition erreicht werden. Auch im Falle einer Virtualisierungslösung ist mehr Speicher notwendig.

BIOS/UEFI
Wir stellen nach erfolgreichem Zusammenbau noch eben im BIOS ein, daß der Rechner nach einem Stromausfall direkt wieder hochfahren soll. Weiterhin werden die SATA Ports in den AHCI-Modus geschaltet, um die Vorteile von NCQ zu gewähren, und es wird Hot Swapping für alle Ports aktiviert. Als Standardgrafik wird die integrierte Grafikfunktion des Prozessors aktiviert.

Der Rechner
Fileserver 003.JPG
Fileserver 004.JPG
Fileserver 006.JPG
Fileserver 009.JPG
Fileserver 010.JPG
User avatar
Birdie
Administrator
Posts: 1132
Joined: Sat 3. Nov 2007, 17:14
Location: Vatne, Norwegen
Contact:

Re: Birdie baut sich einen Fileserver

Post by Birdie »

Installation Linux
Da der Rechner kein optisches Laufwerk besitzt, muß die Installation per USB Stick erfolgen. Dazu laden wir uns zunächst UNetbootin herunter (http://unetbootin.sourceforge.net/). Hiermit präparieren wir einen USB Stick mit Debian 64 Bit und booten den Rechner. Wir folgen der Installation und wählen ein minimales System, das wir nur um die Komponenten erweitern, die wir wirklich benötigen.
UNetbootin.png
Re_Install_01.png
Re_Install_02.png
Re_Install_03.png
Re_Install_04.png
Re_Install_04.png (10.55 KiB) Viewed 23183 times
Re_Install_05.png
Re_Install_05.png (9.91 KiB) Viewed 23202 times
Re_Install_06.png
Re_Install_06.png (9.23 KiB) Viewed 23193 times
Re_Install_07.png
Re_Install_08.png
Re_Install_08.png (8.54 KiB) Viewed 23166 times
Re_Install_09.png
Re_Install_09.png (11 KiB) Viewed 23162 times
Re_Install_10.png
Re_Install_10.png (9.32 KiB) Viewed 23170 times
Re_Install_11.png
Re_Install_11.png (8.52 KiB) Viewed 23166 times
Re_Install_12.png
Re_Install_12.png (8.63 KiB) Viewed 23161 times
Re_Install_13.png
Re_Install_14.png
Re_Install_15.png
Re_Install_15.png (9.79 KiB) Viewed 23172 times
Re_Install_16.png
Re_Install_17.png
Re_Install_17.png (8.21 KiB) Viewed 23186 times
Re_Install_18.png
Re_Install_18.png (9.86 KiB) Viewed 23151 times
Re_Install_19.png
Re_Install_19.png (6.73 KiB) Viewed 23157 times
Re_Install_20.png
Re_Install_21.png
Re_Install_22.png
Re_Install_23.png
Re_Install_24.png
Re_Install_24.png (10.54 KiB) Viewed 23191 times
Re_Install_25.png
Re_Install_26.png
Re_Install_27.png
Re_Install_27.png (9.92 KiB) Viewed 23183 times
Re_Install_28.png
Re_Install_29.png
Re_Install_30.png
Re_Install_31.png
Re_Install_31.png (9.39 KiB) Viewed 23184 times
Re_Install_32.png
Re_Install_32.png (5.04 KiB) Viewed 23164 times
Re_Install_33.png
Re_Install_33.png (10.77 KiB) Viewed 23162 times
User avatar
Birdie
Administrator
Posts: 1132
Joined: Sat 3. Nov 2007, 17:14
Location: Vatne, Norwegen
Contact:

Re: Birdie baut sich einen Fileserver

Post by Birdie »

Nachdem der Rechner das erste Mal hochgefahren ist, loggen wir uns als root ein und beginnen mit der Softwareinstallation.

Software
Die folgenden Kommandos werden als root auf der Kommandozeile eingegeben:

Code: Select all

apt-get update
apt-get install mc zip unzip screen ssh 
apt-get install rsync
apt-get install nfs-common nfs-kernel-server
apt-get install postfix => keine Konfiguration
apt-get install mailutils
apt-get install samba samba-common => Workgroup
apt-get install libexif12 libjpeg62 libid3tag0 libflac8 libvorbisfile3 sqlite3 libavformat52 libuuid1
apt-get install smartmontools
apt-get install parted
apt-get install mdadm => none / Ja
apt-get install ntp
Hier hat mich zeitweilig ein Speicherzugriffsfehler (SegFault) in apt in den Wahnsinn getrieben. Dieser ließ sich jedoch sehr einfach lösen:

Code: Select all

rm /var/cache/apt/*.bin
apt-get update

Netzwerk
Wir vergeben eine statische IP, damit der Rechner im Netzwerk wiedergefunden werden kann. Wir verwenden die Intel Netzwerkkarte, die vom System als eth1 bezeichnet wird. Der Onboard Anschluß wird als eth0 geführt und zunächst nicht weiter verwendet.

Code: Select all

mcedit /etc/network/interfaces
allow-hotplug eth1
iface eth1 inet static
	address 192.168.2.140
	netmask 255.255.255.0
	broadcast 192.168.2.255
	gateway 192.168.2.1
	
reboot

Putty
Ab jetzt verlassen wir den kalten Keller und arbeiten über Netzwerk. Dazu verwenden wir PuTTy (und bei Bedarf WinSCP)
http://www.chiark.greenend.org.uk/~sgta ... nload.html
http://winscp.net/eng/download.php

Window => Columns 110 => Rows 50
Translation => UTF-8 statt ISO-8859-1
Session => Hostname or IP address => 192.168.2.140
Connection Type => SSH
Saved Sessions => Fileserver
Save
Open

MC
Der Midnight Commander (mc) wird als Kommandozentrale verwendet. Wer noch den Norton Commander aus DOS Zeiten kennt, wird sicherlich schnell klarkommen.
sowohl als root als auch als birdie

Code: Select all

echo "alias mc='source /usr/share/mc/bin/mc-wrapper.sh' " >> ~/.bashrc
F9 => Optionen => Konfiguration => Internen Editor benutzen

Samba
Wir richten uns Netzwerkfreigaben ein, die auch unter Windows zu erreichen sind. Im eigenen Heimnetz hinter zwei Routern verzichten wir auf Rechtevergabe und erlauben Vollzugriff für alle ohne vorherige Anmeldung.

Code: Select all

	mkdir /share
	chown nobody:nogroup /share
	chmod 0777 /share
	
	mcedit /etc/samba/smb.conf
		interfaces = lo eth1
		bind interfaces only = true

		securtiy = share
		guest account = nobody

		[Guest Share]
		comment = Hier werden Dateien abgelegt
		path = /share
		browseable = yes
		writable = yes
		force user = nobody
		force group = nogroup
		create mask = 0777
		directory mask = 0777
		guest ok = yes
	
	testparm
	/etc/init.d/samba restart
NFS
Um Dateien unter Linux einfacher austauschen zu können, verwenden wir NFS. Auch hier vertrauen wir allen Benutzern im lokalen Netzwerk und verzichten auf eine Benutzerverwaltung mit Paßwörtern.

Code: Select all

	mcedit /etc/exports
		/share 192.168.2.0/24(rw,sync,no_root_squash,no_subtree_check)
Postfix
Linux setzt einige Fehlermeldungen als Mail ab, die nur lokal auf dem Linuxrechner zugestellt werden. Das kann ziemlich unpraktisch sein. Schöner ist es, wenn man eine Fehlermeldung an seine normale Mailadresse zugestellt bekommt. Dies erledigen wir mit einigen Handgriffen mit dem Programm Postfix.

Code: Select all

	mcedit /etc/postfix/main.cf

		mydestination =
		inet_interfaces = loopback-only
		relayhost = mail.gmx.net:587
		smtp_generic_maps = hash:/etc/postfix/generic

		smtpd_use_tls = yes
		smtp_sasl_auth_enable = yes
		smtp_sasl_security_options = noanonymous
		smtp_tls_CApath = /usr/share/ca-certificates/
		smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

	mcedit /etc/postfix/generic
		root birdies_mailadresse@gmx.de
		birdie birdies_mailadresse@gmx.de
		@localhost.localdomain birdies_mailadresse@gmx.de

	postmap /etc/postfix/generic

	mcedit /etc/postfix/sasl_passwd
		mail.gmx.net:587 birdies_mailadresse@gmx.de:birdies_passwort

	chmod 0600 /etc/postfix/sasl_passwd
	chown root:root /etc/postfix/sasl_passwd
	postmap /etc/postfix/sasl_passwd

	/ect/init.d/postfix restart
Wir testen, ob das System funktioniert, indem wir einige Mails per Kommandozeile absenden:
als root: echo "Dies ist nur eine Testmail" | mail -s "Testmail" birdies_mailadresse@gmx.de
als root: echo "Dies ist nur eine Testmail" | mail -s "Testmail" root
als birdie: echo "Dies ist nur eine Testmail" | mail -s "Testmail" birdie
Was mit den Mails passiert, sehen wir z.B. in /var/log/mail.log

Temporäre Dateien
Um unnötige Schreibzugriffe von Logfiles auf der CF Karte zu vermeiden, verschieben wir ein paar Verzeichnisse in ein temporäres Dateisystem in der RAM Disk

Code: Select all

	mcedit /etc/fstab
		tmpfs           /tmp            tmpfs   defaults,noatime        0       0
		tmpfs           /var/run        tmpfs   defaults,noatime        0       0
		tmpfs           /var/log        tmpfs   defaults,noatime        0       0
		tmpfs           /var/tmp        tmpfs   defaults,noatime        0       0

	reboot
GRUB anpassen
Leider verschiebt sich die Bezeichnung der bestehenden Festplatten / USB Laufwerke, wenn eine neue Festplatte eingebaut wird. Da meine Festplatten verspätet eingetroffen sind und ich das Grundsystem schon einmal installiert hatte, veränderte sich die Bezeichnung des Bootlaufwerks, so daß das Booten fehlschlug. Nach einem Abschalten der Festplatten konnte zwar wieder gebootet werden, aber die Festplatten waren natürlich nicht verfügbar. Das Problem ließ sich lösen, indem statt eines Laufwerksbuchstabens (/dev/sda) eine UUID verwendet wurde. Dazu die /boot/grub.cfg öffnen und nach dem Bereich

Code: Select all

	search --no-floppy --fs-uuid -set 00a987d94-8452-42bf-a1b9-36a540a69702
	...
	linux /boot/vmlinuz-2.6.32-5-amd64 root=/dev/sda1 ro quiet 
suchen. Wir verändern diese in

Code: Select all

	search --no-floppy --fs-uuid -set 00a987d94-8452-42bf-a1b9-36a540a69702
	...
	linux /boot/vmlinuz-2.6.32-5-amd64 root=UUID=00a987d94-8452-42bf-a1b9-36a540a69702 ro quiet 
und booten einmal neu.

Code: Select all

	reboot
Manuelle Änderungen an dieser Datei werden eigentlich überschrieben, aber es sollte auch so gehen. Im GRUB Bootmenu schauen wir uns per 'e' an, ob die aktuelle Konfiguration auch übernommen wurde. Mit <Ctrl>+<X> booten wir weiter. Nach einem erneuten Einloggen wird die aktuelle Einstellung per

Code: Select all

update-grub
permanent übernommen.


Partitionieren
Wir haben nun eine Reihe Festplatten eingebaut, die weder partitioniert, noch formatiert sind. Wir beginnen mit dem Partitionieren.

Code: Select all

parted
	select /dev/sda
	unit TB
	mklabel
	gpt
	mkpart primary 0TB 3TB
	select /dev/sdb
	....
	select /dev/sdc ... sdf
	...
	quit
Mit den oben angeführten Kommandos werden die Festplatten /dev/sda bis /dev/sdf ins gpt Format gebracht und jeweils eine primäre Partition angelegt, die die vollen 3TB umfaßt.

RAID6 erstellen
Wir erstellen uns einen RAID6 Verbund. Dies erledigen wir von der Kommandozeile aus mit

Code: Select all

mdadm --create /dev/md0 --level=6 --raid-devices=6 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1

Nun heißt es erst einmal einige Zeit (ca. 8h) Warten, bis die Festplatten entsprechend synchronisiert sind. Den Fortschritt und die verbleibende Zeit zeigt uns das Kommando:

Code: Select all

cat /proc/mdstat
ausgegeben werden.

Dateisystem erstellen
Das Dateisystem ext3 ist eigentlich das Standarddateisystem unter Linux. Leider ist die maximale Dateisystemgröße auf "nur" 16 TB beschränkt. Auch wenn wir diese Grenze noch nicht erreicht haben, wird ext4 verwendet, das 1 EB (Exabyte) große Dateisysteme zuläßt und zusätzlich auch noch ein wenig schneller sein soll als ext3. Wir führen das folgende Kommando aus und warten wieder einige Minuten, bis das Dateisystem erstellt wurde

Code: Select all

mkfs.ext4 /dev/md0

Dateisystem einhängen
Um nun unter Linux auf das Dateisystem zugreifen zu können, müssen wir es an einer beliebigen Stelle im Verzeichnisbaum einhängen. Wir erstellen uns einen eigenen Ordner

Code: Select all

mkdir /share
und editieren die Dateisystemtabelle

Code: Select all

	mcedit /etc/fstab
		/dev/md0	/share	ext4	defaults	0	2
Mit dem Kommando

Code: Select all

mount /share
werden die Festplatten nun diesem Verzeichnis zugeordnet. Die fstab wird beim Systemstart ausgeführt und die vorhandenen Laufwerke entsprechend der Anweisungen eingehängt.

S.M.A.R.T.
Zur Statusüberwachung der Festplatten aktivieren wir zunächst SMART für alle Festplatten

Code: Select all

	smartctl -s on -a /dev/sda
	...
	smartctl -s on -a /dev/sdf
Dann passen wir den zugehörigen Dienst an und editieren zwei Dateien:

Code: Select all

	mcedit /etc/default/smartmontools
		start_smartd=yes
		smartd_opts="--interval=3600"
	
	mcedit /etc/smartd.copnf
		DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner

Wir starten die Überwachung mit

Code: Select all

/etc/init.d/smartmontools start
Mit dem folgenden Kommando sorgen wir dafür, daß die Überwachung auch beim nächsten Booten noch aktiviert bleibt.

Code: Select all

update-rc.d smartmontools defaults
Diese Kommandos bewirken, daß der Zustand der Festplatten einmal pro Stunde (alle 3600s) abgerufen werden. Wenn eine Festplatte gar nicht reagiert, läuft das Tool weiter, statt sich zu beenden (removable). Festplatten, die im Bereitschaftsmodus ohne drehende Platter sind (standby) werden nicht extra für das Auslesen der SMART Attribute geweckt. Mails mit Statusinfos werden an root gesendet, und damit per Mailweiterleitung direkt an das vorgesehene Postfach.

miniDLNA
Nun ist der DLNA Server dran. Wir laden erst einmal die neueste Version herunter (kompiliert in der statisch gelinkten Version und als Quelltext).
http://sourceforge.net/projects/minidln ... /minidlna/
neueste minidlna_xxxx_static.tar.gz und minidlna_xxxx_src.tar.gz herunterladen

Code: Select all

	mkdir minidlna
	cd minidlna
	tar xfvz ../minidlna_1.0.24_static.tar.gz
	cp usr/sbin/minidlna /usr/sbin
	cp etc/minidlna.conf /etc/

	mkdir minidlna_src
	cd minidlna_src
	tar xfvz ../minidlna_1.0.24_src.tar.gz
	cp linux/minidlna.init.d.script /etc/init.d/minidlna
	chmod 755 /etc/init.d/minidlna
	update-rc.d minidlna defaults

Code: Select all

mcedit /etc/minidlna.conf

		# set this to the directory you want scanned.
		# * if have multiple directories, you can have multiple media_dir= lines
		# * if you want to restrict a media_dir to a specific content type, you
		#   can prepend the type, followed by a comma, to the directory:
		#   + "A" for audio  (eg. media_dir=A,/home/jmaggard/Music)
		#   + "V" for video  (eg. media_dir=V,/home/jmaggard/Videos)
		#   + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures)
		##media_dir=/opt
		media_dir=A,/share/audio
		media_dir=V,/share/video
		media_dir=P,/share/bilder

		# set this if you want to customize the name that shows up on your clients
		##friendly_name=My DLNA Server
		friendly_name=Birdies DLNA Server

		# set this if you would like to specify the directory where you want MiniDLNA to store its database and album art cache
		db_dir=/share/cache/minidlna
User avatar
Birdie
Administrator
Posts: 1132
Joined: Sat 3. Nov 2007, 17:14
Location: Vatne, Norwegen
Contact:

Re: Birdie baut sich einen Fileserver

Post by Birdie »

Stromverbrauch
Natürlich ist der Stromverbrauch nicht ganz uninteressant. Mein Leistungsmeßgerät hat hierzu die folgenden Daten ermittelt:

Code: Select all

Ausgeschaltet, PSU im Standby:                 1,5 W
Spitzenleistung beim Booten:                   170 W
Idle:                                           66 W
Festplatten im Betrieb, 1 CPU Kern ausgelastet: 86 W
Zur Zeit bin ich noch mit Datenschubsen beschäftigt. Es dauert etliche Stunden um TB mit Daten zu füllen. Dadurch bin ich noch nicht dazu gekommen, den Rechner als Backupsystem für den/die Windowsrechner aufzusetzen. Entsprechende Infos folgen noch.

Bootdauer
Die CF Card verhält sich hier wie eine SSD. Außerdem werden nur wirklich benötigte Dienste hochgefahren. Der Login-Prompt ist ca. 15s nach dem Einschalten des Rechners verfügbar.
User avatar
i0n0s
Posts: 266
Joined: Mon 12. Nov 2007, 01:18
Contact:

Re: Birdie baut sich einen Fileserver

Post by i0n0s »

Eine kleine Frage zur CF-Card:
Wieso hast du keinen Adapter auf SATA genommen und sie so angeschlossen?
User avatar
The G
Posts: 1829
Joined: Sun 4. Nov 2007, 16:00
Location: Das schöne Allgäu
Contact:

Re: Birdie baut sich einen Fileserver

Post by The G »

Birdie wrote:Es wird keiner der knappen SATA Ports für den Betrieb benötigt.
Image
User avatar
oconner
Posts: 1563
Joined: Mon 12. Nov 2007, 05:53
Location: München

Re: Birdie baut sich einen Fileserver

Post by oconner »

Schönes Projekt, daumen hoch :)
User avatar
The G
Posts: 1829
Joined: Sun 4. Nov 2007, 16:00
Location: Das schöne Allgäu
Contact:

Re: Birdie baut sich einen Fileserver

Post by The G »

Als Festplatten werden in der ersten Ausbaustufe 6 Hitachi 5K3000 3TB Festplatten verwendet
Kannst du Aussagen über die Lautstärke der Festplatte machen? Hast du die Transferrate zu einer Platte getestet? Bei mir kommen demnächst wohl auch 3TB her, aber in den Desktoprechner. Da spielt Lautstärke doch ne Rolle ;)
Image
User avatar
Sachsen Paule
Posts: 573
Joined: Tue 13. Nov 2007, 19:24

Re: Birdie baut sich einen Fileserver

Post by Sachsen Paule »

Falls es hilft.
Ich hab ne 5K3000 mit 2GB drin, eigentlich unhörbar (neben der SSD). Im Zugriff ganz leicht, aber absolut minimal.
*leblos, bis ins letzte perfektioniert und kopiert, technisiert und nachgeahmt, erbärmlich und billig*Omelphy
User avatar
Birdie
Administrator
Posts: 1132
Joined: Sat 3. Nov 2007, 17:14
Location: Vatne, Norwegen
Contact:

Re: Birdie baut sich einen Fileserver

Post by Birdie »

Habe die gleiche Konfig wie Paule. Die 2TB Festplatte ist im Schwabbelrahmen untergebracht und praktisch unhörbar. Die Festplatten im Fileserver kann ich leider nicht bewerten, da sich bereits andere Lärmquellen im Raum befinden, der Raum ziemlich schallhart ist und die Festplatten nur gelegentliche Zugriffe erhalten.

Zur Geschwindigkeit des RAID-6

Code: Select all

root@fileserver:~# hdparm -tT /dev/md0

/dev/md0:
 Timing cached reads:   23716 MB in  2.00 seconds = 11873.07 MB/sec
 Timing buffered disk reads: 1184 MB in  3.00 seconds = 394.56 MB/sec

root@fileserver:/share# dd if=/dev/zero of=/share/testfile bs=1024 count=10000000
10000000+0 Datensätze ein
10000000+0 Datensätze aus
10240000000 Bytes (10 GB) kopiert, 69,2904 s, 148 MB/s
Beim Lesen von nur einer Festplatte sollte die Datenrate ein Viertel davon betragen, also rund 100 MB/sec. Die Schreibrate im RAID-6 ist erschreckend niedrig, obwohl dabei nur ein CPU Kern gerade mal zu 25% genutzt wird.
Post Reply