Projekt: Homeserver von CompactFlash

Die Hardware lag schon einige Zeit bei mir herum:

  • Jumtec CoolMonster CMP/P166L
    Ein Industrie-Board mit PISA-Schnittstelle (ISA+PCI vereint), auf dem ein low-power Pentium 1 MMX mit 166 MHz arbeitet. Typische Leistungsaufnahme <10W dank embedded CPU.
  • 128MB SDRAM
  • PISA Backplane mit einigen PCI und ISA Steckplätzen
    Spannungsversorgung über die alten AT-Stecker oder über Schraubklemmen.
  • PCI-Netzwerkkarte mit Realtek 8139 Chipsatz
  • Dual-CompactFlash Adapter mit einer 8GB CF-Karte
  • Netzteil mit 12V und 5V
    Inzwischen in einem alten ATX-Netzteil verbaut, damit es ausreichend belüftet und geschützt in ein normales Gehäuse passt. Zudem liegt der Eingang auf einer Kaltgeräte-Buchse und lässt sich mit einem Schalter unterbrechen.
  • 19 Zoll Gehäuse mit 4 HE

Ausgabe von lspci:

00:00.0 Host bridge: ALi Corporation M1541 (rev 04)
00:01.0 PCI bridge: ALi Corporation M1541 PCI to AGP Controller (rev 04)
00:07.0 ISA bridge: ALi Corporation M1533/M1535/M1543 PCI to ISA Bridge [Aladdin IV/V/V+] (rev c3)
00:09.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
00:10.0 IDE interface: ALi Corporation M5229 IDE (rev c1)
00:14.0 USB Controller: ALi Corporation USB 1.1 Controller (rev 03)
01:02.0 VGA compatible controller: Chips and Technologies F69000 HiQVideo (rev 64)

Die Installation des Basis-Systems nahm ich in einem zweiten Rechner vor, da ich ohne neue Kabel zu verlegen, neben dem Board nur noch den CF-Adapter versorgen konnte. Leider unterstützt das „Monster“ weder das Booten von USB, noch von einer präparierten zweiten CF, die das Dateisystem einer Install-CD (syslinux) enthält. Also baute ich den Adapter zunächst in einen Rechner mit optischem Laufwerk ein.

1. Versuch: Ubuntu 9.04 Server

In Ubuntu kenne ich mich am besten aus. Leider wurde auf der der Hardware des Zweitrechners ein Kernel ohne Kompatibilität für Pentium 1 Prozessoren installiert. Der Server quittierte diesen Umstand mit folgender Meldung und blieb stehen.

This kernel requires the following features not present on the CPU: pae cmov

Das Paket mit dem offiziellen Kernel für die 386-Plattform übersah ich leider und so bemühte ich mich, die Plattform manuell in den Ubuntu-Kernel-Quellen zu ändern. Auch nach der dritten Übersetzung und expliziter Deaktivierung der PAE Unterstützung (Physical Address Extension Support), wollte das fehlende Feature aber nicht an Bedeutung verlieren.

Zwei Versuche mit dem Vanilla-Kernel 2.6.31 booteten leider in einen Bildschirm-Modus, den mein alter TFT (der etwas eigen ist) nicht darstellen konnte.

2. Versuch: Debian Lenny Alternative-Installer

Lang lang ist es her, dass ich zuletzt mit Debian gearbeitet habe (genauer gesagt, seit Debian Sarge 3.1 von 2005). Auch hier wurde ein 686-Kernel installiert – allerdings fand ich hier mit Christians Hilfe gleich den 386-Kernel und konnte neben dem Minimalsystem auch den OpenSSH-Server installieren.

Beim Umzug des Datenträgers auf den Server musste ich allerdings doch ein wenig in den Konfigurationsdateien wühlen, da sich die HDD-Devices und das Netzwerkinterface geändert hatten. Debian setzt z.B. (noch) keine UUIDs zur Identifizierung der Partitionen ein und durch den Umzug einen Netzwerkkartentausch war ich inzwischen bei eth2 angelangt. 😉

Der Bootvorgang

Trotz testweisem Deaktivieren von ACPI per Kernel-Parameter gibt es noch vor dem Init-Script zwei Fehlermeldung, die ein wenig Zeit kosten.

Im späteren Verlauf dann einige Fehler, die mit der CompactFlash Karte in Zusammenhang stehen:

[ 19.232841] hda: max request size: 128KiB
[ 19.232894] hda: 15662304 sectors (8019 MB) w/1KiB Cache, CHS=15538/16/63
[ 19.233311] hda: hda1 hda2
[ 19.350490] hda: dma_intr: status=0x51 { DriveReady SeekComplete Error }
[ 19.350556] hda: dma_intr: error=0x84 { DriveStatusError BadCRC }
[ 19.350603] ide: failed opcode was: unknown

[ 19.408610] hda: UDMA/16 mode selected

Dies kenne ich schon von anderen Versuchen. Ob es an der CF-Technologie an sich, dem Board, BIOS-Einstellungen oder meinen billigen Karten liegt – ich weiß es leider noch immer nicht.

Datenträgerzugriffe minimieren

Flashspeicher wie CF (besonders die Preiswerten) halten nur begrenzt viele Schreibzugriffe pro Zelle aus, also sollte man sein Bestes tuen, diese zu minimieren.

  1. Alle Partitionen (bei mir / und /boot) mit einem NichtJournaling-Dateisystem (EXT2) formatieren. Das ist zwar ein Einschnitt bei der Datensicherheit (Konsistenz des FS bei Abstützen), dafür muss aber kein Journal geführt und auf der Platte aktualisiert werden.
  2. keine SWAP-Partition
  3. Alle Partitionen mit der Option „noatime“ mounten (siehe /etc/fstab), wenn die Datei-Zeitstempel nicht unbedingt benötigt werden.
  4. Logging deaktivieren oder in den Arbeitsspeicher auslagern (Stichwort: Ramdisk/tmpfs). Die zweite Variante gefällt mir richtig gut, da so trotzdem der laufende Server überwacht werden kann, ohne kontinuierliche Schreibzugriffe auszulösen. Leider lassen dies 128MB Ram meiner Meinung nach nicht wirklich zu, selbst wenn der Speicher wie bei tmpfs dynamisch verwaltet wird. Selbst mit der maximalen Ausbaustufe von 256MB RAM wird das schnell eng ohne Swap-Partition. Wie sich in so einem Fall das System verhält? Keine Ahnung, mag es wer ausprobieren? 🙂

    Also deaktiviere ich die Log-Files wo ich nur kann:

    Apache2: in /etc/apache2/apache2.conf sowie den Dateien unter sites-available ErrorLog nach /dev/null und CustomLog auskommentieren (bzw. das Level erhöhen)

    Samba Server: in /etc/samba/smb.conf das Logging-Level (log level = X) auf 0 setzen.

    rsyslogd in /etc/rsyslogd.conf nach belieben ändern, auskommentieren und umleiten.

    Ein nützliches Utility, um alle geöffneten (Log-)dateien durchzugehen: Das gute alte lsof [ +D /var/log]. 🙂

Fazit

Ohne derzeit über ein Leistungsmessgerät zu verfügen, bin ich mir doch recht sicher beim Verbrauch unter 20W zu bleiben. Die Geschwindigkeit des Servers ist mir dabei eher zweitrangig – hauptsache, ich habe einen lautlosen „Wächter am Netz“, der bereitwillig alles mit macht, was ich ihm auftrage. 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert