Samstag, 26. September 2009

Mein neuer Home Server auf Basis des Intel SS4200-EHW und OpenSolaris

Nachdem mein alter Linux-Fileserver zu Hause schon etwas in die Jahre gekommen ist und aus allen Nähten platzt habe ich mich dieses Wochenende dazu entschlossen, einen neuen Server auf Basis des "Intel Entry Storage System SS4200-EHW" aufzubauen.

Das SS4200-EHW hat eine 1,6GHz Celeron 420 CPU, 512 MB DDR2 RAM, Platz für 4 Stück 3,5" SATA2-Platten (Nicht Hot-Swap!), 1 Gb LAN, 4 x USB2 und 2 x eSATA. Das Teil wird zB. auch von Fujitsu Siemens für deren Scaleo Home Server verwendet. Optional gibt's den Server auch mit einem vorinstallierten Linux und Software von EMC (SS4200-E).

Da ich mir aber selber das Betriebssystem installieren und konfigurieren will, habe ich die Variante ohne Software gekauft. Beim Auspacken kam dann auch schon mal die erste Überraschung, denn das Stromkabel (ganz normales Kaltgeräte-Kabel) hat sich Intel gespart - egal, habe eh genug davon herumliegen. Dafür war ein Netzwerkkabel dabei.

Da das Teil keine Grafikkarte eingebaut hat, habe ich mich dazu entschlossen, über die serielle Console zu installieren. Man könnte zwar über ein PCIe x1 -> PCIe x16 Riser-Kabel den PCIe x1 Anschluss am Mainboard für eine Grafikkarte nützen, aber das war mir zu aufwendig und ein Server braucht eh keine Grafikkarte. Die erzeugt nur zusätzliche Hitze im System.

Um die serielle Console zu nutzen, muss man einfach den RS232-Anschluss vom Mainboard nach aussen führen. Dazu gibt's im Gehäuse hinten schon die entsprechende Öffnung vorgestanzt, man muss also nur das Kabel am Mainboard anschliessen, das Loch im Gehäuse durchbrechen und den seriellen Stecker am Gehäuse montieren.

Achtung!
Die Belegung der IDC10-Buchse am Mainboard ist nach dem Intel/DTK Layout und nicht wie das gängigere AT/Everex Layout. Ich habe mir das Kabel einfach schnell selber gebaut (Bauteile gibt's zB. beim Conrad um die Ecke). Dazu nimmt man am besten gleich Stecker und Buchsen, die man auf ein Flachbandkabel pressen kann. Vom 10-poligen Flachbandkabel entfernt man dann eine Litze und presst das Kabel auf die IDC10-Buchse und den DB9-Stecker. Die Belegung beim Intel/DTK Layout ist so, dass man das Flachbandkabel einfach raufpressen kann, da ja PIN6 vom DB9 mit PIN2 vom IDC10 verbunden wird, usw.

Anschliessend kann man sich mit einem Nullmodem-Kabel und einer Baudrate von 115200 (8,N,1) zum Server verbinden und nach dem Starten mittels F4 ins BIOS wechseln. Ein paar Screenshots vom BIOS findet man auf http://ss4200.pbworks.com/BIOS-screenshots.

Als Betriebssystem für den Server habe ich mich nach langem Hin-und Her dann für OpenSolaris (x86) entschieden, da ich unbedingt ZFS einsetzen will und mich da nicht auf FUSE-ZFS unter Linux einlassen will.

ZFS hat für mich unter anderem folgende Vorteile:
  • Einfach Handhabung
  • Datensicherheit durch Erkennung von Silent Data Corruption
  • Demnächst Unterstützung von Data Deduplication
  • Snapshots und Clones
  • Data Compression
Da für eine OpenSolaris ZFS Installation eine RAM-Größe >= 768 MB empfohlen wird habe ich dem Server auch noch einen Standard 2GB DDR2 Riegel spendiert.

Die Installation von OpenSolaris geht dann wie folgt:

1) OpenSolaris 2009.06 Live-CD in ein externes USB CD-Laufwerk einlegen und im BIOS die Bootreihenfolge entsprechend ändern.

2) Leider unterstützt die Live-CD nicht die serielle Console, sondern gibt alles auf der Grafikkarte aus. Dazu kann man im BIOS nun einfach die On-Board Grafikkarte aktivieren (wahlweise mit 1MB oder 8MB Speicher - 1MB reicht vollkommen) - jedoch hat man ja keinen VGA-Anschluss am Server. Die Lösung dazu ist, dass man in den Text-Modus der Live-CD bootet und dann den SSH-Daemon startet und sich anschliessend remote einloggt. Da man das im Blindflug über eine USB-Tastatur machen muss, schaut man sich das am besten einmal vorher auf einem anderen Rechner (mit Grafikkarte) an und notiert sich die Tasten, die man drücken muss (und wie man den Zeitpunkt erkennt, dass man etwas eingeben muss - sieht man aber ganz einfach an der nicht mehr blinkenden LED des CD-Laufwerkes).

Die Tasten sind (danach muss klarerweise immer Enter gedrückt werden):
2x Cursor down
beim Grub-Screen (um die Boot-Option Text Console zu aktivieren). Ein paar Sekunden später dann 15 und 8 um die Sprache und das Gebietsschema auszuwählen. Wenn das System fertig gebootet hat, kann man sich mit dem User jack und dem Passwort jack einloggen. Anschliessend "su root" und das Passwort opensolaris. Nach der Eingabe von "svcadm enable ssh" startet der SSH-Daemon. Damit das ganze funktioniert, muss der Server per DHCP eine IP-Adresse im Netzwerk bezogen haben.

3) Nun kann man sich von einem anderen Rechner aus per "ssh -Y jack@1.2.3.4" zum Server verbinden (1.2.3.4 ist durch die IP des Servers zu ersetzen). In der Shell muss man dann wieder root werden und mit "/bin/gui-install" kann man dann den grafischen Installer starten.

"ssh -Y" deshalb, da zumindest bei mir mit "ssh -X" folgender Fehler auftrat:
The program 'gui-install' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadAtom (invalid Atom parameter)'.
(Details: serial 630 error_code 5 request_code 20 minor_code 0)
(Note to programmers: normally, X errors are reported asynchronously;
that is, you will receive the error a while after causing it.
To debug your program, run it with the --sync command line
option to change this behavior. You can then get a meaningful
backtrace from your debugger if you break on the gdk_x_error() function.)
Die weitere Installation verläuft dann ganz einfach:









4) Nach dem Reboot wird man feststellen, dass man noch immer nichts auf der seriellen Konsole sehen bzw. man sich auch nicht einloggen kann. Das hat unter anderem damit zu tun, dass wir nur einen seriellen Port haben und OpenSolaris standardmässig den zweiten seriellen Port für Console-Logins konfiguriert. Es sind daher nun folgende Änderungen notwendig (wieder per ssh über das Netzwerk einloggen und als root durchführen):

In der Datei "/etc/remote" folgendes einfügen:
console:\
:dv=/dev/term/a:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:
In der Datei "/rpool/boot/grub/menu.lst" folgende Zeilen löschen oder auskommentieren (mit einem # am Anfang):
splashimage /boot/grub/splash.xpm.gz
background 215ECA

splashimage /boot/solaris.xpm
foreground d25f00
background 115d93
Weiter unten ist dann auch noch die Kernel-Zeile:
kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS,console=graphics
durch
kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS,console=ttya
zu ersetzen. Bei der Gelegenheit kann man das Grub-Timeout (timeout 30) auch gleich von 30 Sekunden auf eine kürzere Zeit runtersetzen.

Danach ein "reboot" durchführen und schon sieht man die Boot-Meldungen auf der Console und man kann sich auch von der Console aus einloggen.

Das einzige Problem ist noch, dass man fürs BIOS eine Baudrate von 115200 hat und für Solaris eine Baudrate von 9600. Ich habe dazu einfach im BIOS die Baudrate auf 9600 heruntergesetzt, da ich diese standardmässig auch auf anderen Systemen verwende. Man kann aber natürlich auch im Solaris die höhere Baudrate mitangeben.

Abschliessend habe ich dann im BIOS auch die OnBoard-Grafikkarte deaktiviert, da ich jeden MB RAM im Server selber brauche ;-)

Das war's dann fürs erste auch schon, innerhalb kürzester Zeit hat man so ein OpenSolaris auf einem SS4200-EHW ganz ohne Grafikkarte installiert.

Übrigens installiert sich das OpenSolaris automatisch in einen ZFS Root-Pool (belegt dort ca. 3GB) und legt dann nach der Installation auch gleich einen Snapshot an. Sehr praktisch.

root@homeserver:~# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
rpool/ROOT/opensolaris@install 146M - 2.82G -

Abschliessend ist noch zu sagen, dass der Server Super-Leise ist (abgesehen von ein paar Sekunden beim Start, wo die Lüfter mal kurz mit Volldampf durchs Gehäuse blasen). Ich habe ihn zur Zeit in einer Ecke im Wohnzimmer stehen und man hört gar nix.

10 Kommentare:

  1. hi,
    bin am überlegen ob ich auch son teil kaufe...
    meinst du, das ganze geht auch mit ubuntu 9.10 textinstaller so einfach ?
    AntwortenLöschen
  2. Probier es einfach mal auf einem normalen PC aus, ohne Grafikkarte und nur über die serielle Console bzw. mit USB-Tastatur zu installieren. Wenn es dort geht, schätze ich, dass es auch mit dem SS4200 geht. Die Grafikkarte brauchst dazu auch nicht ausbauen, weil der SS4200 ja eh auch eine interne OnBoard-Grafikkarte hat, allerdings halt keinen VGA-Anschluss dazu.

    Eine andere Möglichkeit wäre, das Ubuntu auf einem anderen Rechner schon mal auf die Festplatte zu installieren, im Linux alles für die Ausgabe auf der seriellen Console zu konfigurieren (acuh den Grub) und dann die Platte einfach in den SS4200 einbauen. Das wäre wahrscheinlich der einfachste Weg.
    AntwortenLöschen
  3. so, habs bestellt, mal schaun was mich erwartet :-)
    danke für die tolle info hier !
    AntwortenLöschen
  4. habs durchstanden :-)
    hier:
    https://greschenz.dyndns.org/forum/posting.php?mode=post&f=4
    ist mein eigener server online :-)
    habs dann doch mit ner pcie-riser/pcie-graka gelöst, dann wars trivial !
    AntwortenLöschen
  5. danke für die super Anleitung! Hat bestens geklappt.
    AntwortenLöschen
  6. Achso, man könnte noch erwähnen, dass man nano zum editieren der Textdateien benutzt kann.
    AntwortenLöschen
  7. Vielen Dank für die Anleitung, die Installation hat damit erstmal funktioniert. Leider bootet das System bei mir nach der Installation nicht korrekt.
    Ich habe vier WD Caviar Green 1TB Platten drin und eine 8GB CF-Karte mit einem CF-Adapter, von der ich booten möchte. Wenn ich alles installiert habe und die CF-Karte als Bootmedium wähle lädt er Grub und beginnt mit dem Opensolaris Bootvorgang, startet dann aber neu.
    Wie hier erwähnt:
    http://ss4200.pbworks.com/Drive+Issues+-+Boot+issues+with+WD+Drives
    hilft es, den Reset-Taster während des Einschaltens zu betätigen, dann fährt das Opensolaris auch korrekt hoch und ich kann wenigstens die serielle Console aktivieren.
    Nach einem weiteren Neustart sehe ich dann folgende Fehlermeldung:

    NOTICE: error reading device label

    Das System beschwert sich, dass das Device nicht bootbar wäre und
    dann folgen weitere Meldungen:

    NOTICE: spa_import_rootpool: error 19
    Cannot mount root on /pci@0,0/pci-ide@1f,1/ide@0/cmdk@0,0:a fstype zfs

    panic[cpu0]/thread=fffffffffbc2cca0: vfs_mountroot: cannot mount root

    Irgendwie kann er also nicht mehr auf IDE zugreifen oder was auch immer.
    Ich werde heute Nachmittag weiter das Internet durchforsten, vielleicht finde ich noch was, aber vielleicht hat bis dahin auch schon wer anders eine Lösung parat :)
    AntwortenLöschen
  8. Ich habe einen zweiten ss4200 mit mr.zwiebelkopf zusammen aufgebaut und ich habe das identische Problem. Ich habe 4 1,5TB WD Green. Dazu habe ich jetzt schon einiges durchprobiert.
    - FreeNAS startet im Enhanced Modus des IDE-Controllers problemlos und erkennt alle Platten.
    - OpenSolaris tut dies nicht, es startet wie erwähnt neu während des Bootvorgangs. Stellt man den Compatible Modus ein startet das System problemlos, es werden aber nur zwei Platten erkannt, zwei nicht. Welche beiden kommt drauf an, ob man Sata oder pata "vorne" einstellt (1+3 vs. 0+2).
    - Ich habe so ziemlich alles im BIOS deaktiviert, was man deaktivieren kann und es hat keinen Unterschied gebracht.
    - Ich denke es liegt nicht an den WD-Green-Platten, da ich es mit zwei anderen Platten (zwar ebenfalls WD, aber die eine 2,5" Scorpio und die andere ne 3,5" Caviar) probiert habe und mit beiden das gleiche Problem auftrat.
    - Ein vor ein paar Tagen installiertes OpenSolaris lief ohne Probleme (darum auch das Kommentar weiter oben) bis sich etwas verändert hat. Ich habe direkt davor nach diesem Artikel: www.sun.com/bigadmin/articles/nvm_boot.jsp einige Sachen geändert und zuerst gedacht, das wäre das Problem, nachdem er danach mit dem oben genannten Fehler nicht mehr bootete. Aber auch nach einer Neuinstallation trat das gleiche Problem auf, wie oben beschrieben. Ich kann mich nicht daran erinnern in diesem Zusammenhang etwas im BIOS geändert zu haben, aber das scheint der einzig sinnvolle Ort für die Fehlerursache zu sein, weil die Neuinstallation ja auch keinen Unterschied gebracht hat.
    - Vielleicht liegt es auch einfach nur am BIOS. Werden nur zwei Platten im Compatible Modus erkannt, leuchten die 4LEDs vorne gar nicht. Werden alle 4 Platten im Enhanced Modus erkannt, leuchten auch alle 4 LEDs. Allerdings wurden ja alle Platten schonmal korrekt erkannt - auch im compatbile Modus. Das macht alles keinen Sinn irgendwie :(
    AntwortenLöschen
  9. So ich habe jetzt nochmal vier Konfigurationen untersucht:

    A. IDE enhanced
    B. IDE enhanced + Reset beim Einschalten
    C. IDE compatible
    D. IDE compatible + Reset beim Einschalten

    Dabei habe ich jeweils per USB-CD gebootet und mir scanpci und prtconf angesehen. Dabei ist mir zwischen A und B was interessantes aufgefallen:

    scanpci listet bei beiden den SATA-Controller auf

    pci bus 0x0000 cardnum 0x1f function 0x02: vendor 0x8086 device 0x27c1
    Intel Corporation 82801GR/GH (ICH7 Family) SATA AHCI Controller

    Bei Variante B kommt aber noch ein IDE-Controller dazu

    pci bus 0x0000 cardnum 0x1f function 0x01: vendor 0x8086 device 0x27df
    Intel Corporation 82801G (ICH7 Family) IDE Controller

    Die Varianten C und D besitzen dagegen einen kombinierten Controller

    pci bus 0x0000 cardnum 0x1f function 0x02: vendor 0x8086 device 0x27c0
    Intel Corporation 82801GB/GR/GH (ICH7 Family) SATA IDE Controller

    und bei D taucht dann komischerweise der eSata Controller noch ein zweites Mal auf aber das ist jetzt nicht so interessant.

    Ich weiß nicht, ob bei IDE enhanced versucht wird, die IDE-Ports auf SATA abzubilden und schon garnicht kann ich die viel wichtigere Frage beantworten, wie ich den separaten IDE-Controller forcieren kann, ohne den Reset-Taster beim Einschalten drücken zu müssen, aber ohne diesen erkennt OpenSolaris die CF-Karte bei IDE enhanced nicht.

    prtconf:

    A.

    pci8086,27c1, instance #0
    disk, instance #1 (driver not attached)
    disk, instance #2 (driver not attached)
    disk, instance #3 (driver not attached)
    disk, instance #4 (driver not attached)

    B.

    pci-ide, instance #0
    ide, instance #0
    cmdk, instance #0 (driver not attached)
    ide (driver not attached)
    pci8086,27c1, instance #0
    disk, instance #1 (driver not attached)
    disk, instance #2 (driver not attached)
    disk, instance #3 (driver not attached)
    disk, instance #4 (driver not attached)

    C + D.

    pci-ide, instance #0
    ide, instance #0
    cmdk, instance #0
    ide, instance #1
    cmdk, instance #1
    cmdk, instance #2

    Booten kann ich nur, wenn das IDE-Gerät erkannt wird, also bei B, C und D. Die einzige Konfiguration, bei der dabei mein Raid aus den vier Platten noch läuft ist B. Also beim Einschalten immer brav Reset gedrückt lassen, na super :)
    AntwortenLöschen
  10. Da ich momentan auch wie irre nach dem Grund gesucht habe, warum mein nexentastor die SATA-Platten nicht sehen will, bin ich auf folgendes gestoßen:

    Einmal hier: http://defect.opensolaris.org/bz/show_bug.cgi?id=2978

    The Intel device id 0x27c0 is another hint that the controller is *not* set to
    AHCI mode. Apparently the device id changes depending on the AHCI or RAID
    support of the controller; 0x27c0 is used in "desktop non-ahci and non-raid
    mode", 0x27c1 is "desktop ahci mode", and 0x27c3 is "desktop raid" mode.


    Und noch mal von hier:
    www.mail-archive.com/linux-ide%40vger.kernel.org/msg02213.html



    According the Intel's Specification Update for the ICH7 family:
    (http://www.intel.com/design/chipsets/datashts/307013.htm - 30701417.pdf pg 11 is interesting for id purposes, but pg 22 contains the DIDs.)

    0x27c0 is Desktop Non-AHCI and Non-RAID Mode
    0x27c1 is Desktop AHCI Mode

    Also Intel states:
    ICH7MDH - RAID only
    ICH7M - AHCI only
    ICH7R - RAID and AHCI
    ICH7DH - RAID and AHCI
    ICH7 - NO RAID, NO AHCI

    ( from http://www.intel.com/support/chipsets/imst/sb/CS-012304.htm )
    (The main datasheet 30701302.pdf provides same info on pg 52)

    The docs indicate that the Device IDs can change. They represent the mode, not specifically the device. But when we compare these sources we can conclude:

    - 0x27c0 is an ICH7 or, an ICH7DH or ICH7R (in non-AHCI/RAID mode)
    - 0x27c1 is not an ICH7 (Base)
    - 0x27c1 is an ICH7DH or ICH7R in AHCI mode
    AntwortenLöschen