GermanSATAHowto

Ziele

Das Ziel ist es, Ubuntu von einer SATA-Festplatte starten zu lassen.

Das Problem

Im Moment wird auf per SATA angebundene Laufwerke per SCSI-Layer zugegriffen. Das gibt dann ein Problem, wenn man von der Platte Booten möchte. Da man mit dem Auto nicht zur Fahrschule fahren kann - sprich, der Kernel kein Modul von einer Quelle laden kann, an die er nicht ran kommt, muss man sich geschickt behelfen.

Die Lösung

Der Boot-Loader (z. B. LILO oder Grub) lädt einen Kernel oder einen Kernel und eine initrd (initial RAM disk). Anschließend übergibt der Boot-Loader dann die Kontrolle an den Kernel um mit dem Bootvorgang fortzufahren. Liegt nun das benötigte Modul für den Zugriff auf die SATA-Devices auf dem SATA-Device selber, so hat der Kernel ohne passendes Modul keine Möglichkeit dies nachladen zu können. Es bestehen nun zwei Möglichkeiten dies zu lösen:

  1. Das für den Chipsatz spezifische SATA-Modul statisch in den zu bootenden Kernel einkompilieren.
  2. Das für den Chipsatz spezifische SATA-Modul (oder mehrere solcher Module) in der initrd bereitstellen, so daß dieses aus der RAM-Disk zu Bootzeit nachgeladen werden kann.

Die unten beschriebene(n) Lösung(en) beziehen sich auf den ersten Fall.

In einem bestehenden System

Zunächst muß ein Debian-Kernel-Paket gebaut werden. Siehe dazu unten unter "Kernelpaket bauen" nach.

Das fertig gebaute Kernelpaket wird nun installiert:

dpkg -i /usr/src/kernel-image-2.6.12_sata1.deb

Wenn alles gut läuft, sollte bei einem Neustart nun im Bootloader der neue Kernel auftauchen. Nun sollte das System booten und ggf. können dann Platten auch durch das RAID gespiegelt werden.

In einem frischen System

Die Lösung für diesen Fall ist es (für mich) gewesen den Kernel auf einem anderen System zu bauen, und als Paket zu installieren. Zum Bauen siehe dazu unten unter "Kernelpaket bauen" nach.

  • Voraussetzung: Wähle die OpenSSH-Option im Debian-Installer um per SCP das Kernelpaket während der Grundinstallation von außen auf die Maschine holen zu können.
  • Der frische Kernel sollte am geschicktesten nach der Installation der Basis-Pakete, und vor der Installation des Boot-Loaders geschehen.

  • Meine Maschine war neben dem SATA-Controller noch mit einem SCSI-Controller ausgestattet. Während der Installation wurden die Platte am SATA-Controller zuerst gefunden und auf /dev/sda gemapped. Beim anschließenden System-Boot wurde der SCSI-Controller zuerst gefunden, so daß die Devices am SATA-Controller auf /dev/sdb gemapped wurden. Möglicherweise ist daher folgendes notwendig:

    • Nach Installation der Basis-Pakete im Debian-Installer auf einer anderen Konsole (ALT+F2):

chroot /target
  • Editiere /etc/fstab, und ersetze /dev/sda durch /dev/sdb

  • Das Kernelpaket auf die lokale/frisch zu installierende Maschine per SCP übertragen (auf der Konsole, ALT+F2) und installieren:

scp foo@bar.example.org:/usr/src/kernel-image-2.6.12_sata1.deb
dpkg -i kernel-image-2.6.12_sata1.deb
  • Installiere den bootmanager (GRUB) wieder aus dem Debian-Installer heraus
  • Noch einmal sicherstellen, daß das korrekte Device (z. B. /dev/sdb) in /boot/grub/menu.lst verwendet wird, gegebenenfalls editieren

Kernelpaket bauen

  • Zunächst die Kernel-Sourcen des aktuellen Kernels installieren. In diesem Fall ist der 2.6.12er Kernel der aktuelle.

sudo apt-get install build-essential kernel-package libncurses5-dev
sudo apt-get install linux-source-2.6.12
  • Die Quellen wurden nun in das Verzeichnis /usr/src heruntergeladen.

cd /usr/src
sudo tar -xjvf linux-source-2.6.12
ln -s /usr/src/linux-source-2.6.12 /usr/src/linux
cd linux
  • Nun sind die Quellen entpackt. Die Kernelkonfiguration ist auch schon dabei, und zwar genau die, die auch zum kompilieren des Standardkernels in dieser Version verwendet wurde.
    • Jetzt muss das SCSI- und das SATA-System fest eingebunden werden.

make menuconfig
  • Jetzt hangelt Ihr euch durch folgende Menüpunkte:

Device Drivers -->
  SCSI device support -->
    SCSI low-level drivers -->
      Serial ATA (SATA) support
  • Ist dieser Punkt markiert (das Kernelmodul sollte durch ein Sternchen "*", nicht durch ein "M" markiert sein), drückt "Y". In der darunterliegenden Liste wählt ihr am besten nur den Treiber aus, der auch zu euerer Hardware passt. Um festzustellen, welcher dies ist, müsst ihr den Hersteller eures SATA-Controllers oder euren Chipsatz kennen. Ein lspci gibt meistens Aufschluss darüber.

  • Nun geht mit Exit eine Ebene zurück und ganz oben den SCSI Device Support aus. Drückt auch hier "Y", sowie bei SCSI Disk Support.

  • Nun beendet die Konfiguration durch zweimaliges drücken des ESC-Taste. Beantwortet die Frage nach dem Speichern mit Ja.

  • Wieder in der Konsole angekommen setzt folgende Befehle ab:

make-kpkg clean
make-kpkg --initrd --revision=sata1 kernel_image
  • Der neue Kernel wird nun gebaut. Das kann (je nach System) recht lange dauern. Holt Euch am besten einen Kaffee oder ein weiteres Bierchen. Nach Beendigung findet ihr ihn als Debian-Paket unter /usr/src.


CategoryHardware

GermanSATAHowto (last edited 2008-08-06 16:23:00 by localhost)