Eduard Prezer Logo
DJ Fotografie Über mich Links Blog Gästebuch Impressum

Budget HeimServer / NAS auf Basis eines Gigabyte MJ11-EC1 Boards

Da mein alter Heimserver auf HP Microserver N40L Basis schon seit mehr als 10 Jahren zuverlässig seinen Dienst verrichtet, habe ich mir in letzter Zeit oft Gedanken über eine Ablösung gemacht. 

Kriterien wie ausreichend ECC-Ram und eine zeitgemäße Rechenleistung standen dabei von vorneherein fest, da ich weiterhin bei FreeNAS bzw. mittlerweile "TrueNAS" bleiben möchte. 
Ursprünglich habe ich eigentlich mit einem System auf Basis eines Intel i3 oder Xeon E3 geliebäugelt und hier die Preise beobachtet. Leider fangen brauchbare Mainboards mit genügend Festplattenanschlüssen preislich erst bei ca. 250-350€ an und einen passenden Prozessor benötigt man dann auch noch. Eine separate PCIe HBA (PCIe SATA Controller) wollte ich vermeiden da dies direkt ab Werkszustand schon einen erhöhten Strombedarf bedeutet und das Gerät eigentlich 24/7 laufen soll. 

Passende Hardware

Durch Zufall bin ich darauf aufmerksam geworden dass ein deutscher Händler wiederaufbereitete Mainboards (Gigabyte MJ11-EC1) für knapp 70€ anbietet, welche wie perfekt auf meine Anforderungen passen. Ursprünglich kommen diese Mainboards wohl von Gigabyte G431-MM0 Server Systemen, welche eigentlich für GPU-Rechencluster eingesetzt werden. Durch die nativ vorhanden 8 SATA/SAS Ports eignet es sich allerdings auch super als Basis für eine NAS bzw. einen Heimserver.

Das besondere an diesem Gigabyte MJ11-EC1 Mainboard ist dass es von Haus aus folgendes bietet:

Hardwarezusammenstellung (Einkaufsliste)

Alles in allem mit ~ 406€ (zzg. SSDs/HDDs) ein hervorragender Preis für einen Heimserver der folgende Erwartungen erfüllen soll:

Erwartungen

Aufbau und Inbetriebnahme

Das Board kommt zunächst mit dem ATX24 Adapterstecker und dem Original Server Lüfter (nicht unbedingt Leise). Nach Sichtprüfung und provisorischen Anschluss an ein Netzteil, folgt erstmal der obligatorische Memtest über ein USB Stick.
Zu beachten ist dass die blauen Bänke immer zuerst bestückt werden müssen. Steht so auch in der Mainboard Anleitung. 

Erfreulicherweise sind bei diesem Board die SATA Anschlüsse so durchnummeriert wie sie auch verbaut sind. Aus Richtung der RAM Bänke aus gesehen nummerisch aufsteigend.

Eine M.2 in voller 80mm Länge passt direkt aufs Board. 

Leider passt die Belegung der Front Panel Anschlüsse des Jonsbo N3 Gehäuse nicht direkt zum Mainboard, so dass man hier eigene PIN Header basteln muss.

Momentan ist noch provisorisch ein übrig gebliebener 120mm Lüfter mit nur einer Schraube befestigt.
Ich werde mir hier noch überlegen ob ich einen passenderen Lüfter und vielleicht einen 3D-gedruckten Lüfteradapter (60mm auf 120mm) umbaue.
Eigentlich ist der 120er auch mit nur einer Schraube ziemlich fest drauf da er hinten auf den Ports zufälligerweise absolut Plan aufliegt und kühlt so auch noch gut die SSD mit.

Updates und Grundeinstellungen

IPMI / BMC

Für das IPMI / BMC hingegen gibt es eine aktualisierte Version (12.61.17). Den download direkt von Gigabyte findet man hier

Im entpackten Archiv einfach die Datei "rom.ima_enc" aus dem Ordner "fw" über IPMI unter Maintenance > Firmware Update hochladen.

BIOS

Für das BIOS gibt es leider kein Update auf der Herstellerseite. Auf meinen beiden gekauften Mainboards war die Version F09 aufgespielt.
Ich habe diese vorsichtshalber mal gesichert und hier bereitgestellt: Original BIOS MJ11-EC1 Version F09

BIOS Einstellungen

In den Werkseinstellungen ist SMT (Multithreading) deaktiviert (nur 4 physische CPU-Kerne aktiv).
Unter AMD CBS die Option SMTEN auf Enabled aktiviert SMT. Damit lassen sich alle 8 logischen CPU-Kerne/Threads nutzen.

Gegebenenfalls nicht benötigte Netzwerkkarten lassen sich deaktivieren

C-States (automatisches runter-takten von CPU Kernen) aktivieren (nur C1 bis C3 vorhanden)

Optionale BIOS Einstellungen

Nicht benötigte Optionen und Optionen für die das Board gar keine Anschlüsse verbaut hat deaktivieren
SDKarte MMC

Installation

Ich habe mich dazu entschlossen die M.2 SSD sowohl für das FreeNAS System als auch Datenpool für spätere Applikationen/VMs zu nutzen. Dazu habe ich folgende Anleitung benutzt.

Zusammengefasst ruft man vor Installation die Shell auf und modifiziert das Installationsskript so dass es nur 16GB statt 100% des vorhandenen Platzes nutzt. und führt dieses Skript anschließend aus.

sed -i 's/sgdisk -n3:0:0/sgdisk -n3:0:+16384M/g' /usr/sbin/truenas-install
/usr/sbin/truenas-install

Im Anschluss an die Installation kann man dann mit parted, oder einem grafischem Tool wie gparted eine zusätzliche ZFS Partition Partition erstellen, und in TrueNAS als Datenpool nutzen.

Beheben von Problemen nach der Installation

TrueNAS läuft auf dem Board erstmal nicht ganz fehlerfrei. Dazu müssen zunächst zwei mit der Epyc Plattform zusammenhängende Probleme behoben werden:

AER: Multiple Corrected error received: 0000:00:1c.4
AER: PCIe Bus Error: severity=Corrected, type=Physical Layer, (Receiver ID)
....

midclt call system.advanced.update '{ "kernel_extra_options": "pci=noaer" }'

midclt call system.advanced.update '{"kernel_extra_options": "ahci.mobile_lpm_policy=0"}'

Zum setzen beider Optionen gleichzeitig:

midclt call system.advanced.update '{"kernel_extra_options": "pci=noaer ahci.mobile_lpm_policy=0"}'

Anschließend Neustart. Die so gesetzen Kernel Optionen sind in TrueNAS persistent und überstehen Neustarts!

Stromsparoptionen und Optimierungen

Damit das System so wenig Energie wie möglich unnötig verbraucht habe ich verschiedene Stromsparoptionen ausprobiert.
Mit den folgenden Optionen auf einen Idle Verbrauch von 22 bis 22,9W gekommen.
Dabei waren insgesamt drei 12V Lüfter am System angeschlossen, eine 1TB PM981a M.2 nvme SSD sowie die 32GB ECC RAM aus der Einkaufsliste verbaut.

Kernel Optionen

Um alle Optionen mit dem Fix von weiter Oben unter Truenas Scale zu setzen:

midclt call system.advanced.update '{"kernel_extra_options": "pci=noaer ahci.mobile_lpm_policy=2"}'

Powertop, CPU gouverner und Zenstates

Zusätzlich habe ich mehrere Kommandos in TrueNAS unter Init Scripts hinterlegt die nach Systemstart ausgeführt werden:

Links und weiterführende Informationen