Autor Thema: Linux Tuning  (Gelesen 3820 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline Baldrian

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 2426
  • Bewertung der Beiträge: 28
  • Geschlecht: Männlich
    • Profil anzeigen
    • ecarux.de
Linux Tuning
« am: November 01, 2005, 17:22:59 »
Linux Tuning

Ein Fortsetzungsroman.... :wink:

Selbst die Computer Bild kennt die letzten "geheimen" Tricks zum Thema Windows Tuning
und liefert am besten auch gleich ein Heer an Tools mit, welche ihr bestes tun um das
System zu ver(schlimm)bessern.

Tuning Tools unter Linux?  :kratz
Gibt es eigentlich nicht. Mit der Freiheit sein System selbst zu verwalten bekommt man auch die Pflichten. Ich möchte deshlab an dieser Stelle mal ein paar Kniffe zeigen, wie man auch sein Linux System tunen kann. Das ganze läuft zwar ohne hübsche GUI und einen sympatischen Wizard, aber dafür weiß man am ende auch was und wo zu tun ist, ohne das man das Schicksal seines Rechners in fremde Hände (tunning Tool) geben muss.

Ich werde das ganze nach und nach ergänzen, damit auch Zeit zum auprobieren bleibt und eventuell Fargen gestellt werden können.

Die Folgenden Beiträge von mir Stehen unter der neuen BSD-Lizenz (3-clause-BSD).
Ich bin der Autor ( Hannes Mayer ).
Wen das gearde wundern mag, dem sei es kurz erklärt.
Die Folgenden Beiträge befinden sich auch auf meiner Homepage.
Da ich die von mir geschriebenen Artikel auf meiner Seite unter die neue BSD-Lizenz gestellt habe, muss bzw. will ich diese auch hier einhalten.
Ich hoffe das ist für alle OK so.
Wenn es stört, dann sagt bitte bescheid. Dann werde ich keine Artikel von meiner Homepage ins Forum übertragen. ( Vor allem Frage an den Cheff ).


Linux Tuning:
        1. <a href="http://pc-techniker.portalsource.de/forum/index.php?topic=2551.msg9337#msg9337">Festplatten</a>
        2. <a href="http://www.pc-techniker.org/forum/index.php?topic=2551.msg9784#msg9784">Dateisystem & Partitionen</a>
        3. <a href="http://www.pc-techniker.org/forum/index.php?topic=2551.msg11014#msg11014 ">Kernel Tuning</a>
 
« Letzte Änderung: Februar 10, 2006, 23:05:27 von Baldrian »
"Was auch immer geschieht, nie dürft ihr so tief sinken,
von dem Kakao, durch den man euch zieht, auch noch zu trinken."

Offline Baldrian

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 2426
  • Bewertung der Beiträge: 28
  • Geschlecht: Männlich
    • Profil anzeigen
    • ecarux.de
Re: Linux Tuning
« Antwort #1 am: November 01, 2005, 18:22:33 »
Festplatten:

Na, wie schnell ist deine Festplatte?
Keine Ahnung? - Dann schau glei mal nach.

Das passende Programm dafür ist hdparm und sollte eigentlich in so ziemlich jeder größeren Distribution enthalten sein. Wenn es noch nicht installiert ist, dann sollte man das jetzt nach holen. Zum Beispiel mitapt-get install hdparm oder aber auch yum oder yast, je nachdem was man so verwendet bei seiner Distri.

Um ein kleines Festplattenbenchmark zu starten, kann man folgenden Befehl nutzen:hdparm -tT /dev/hda Dabei wird einmal die Übertragungsrate vom Cache und einmal von der Platte direkt gemessen.

Als Beispiel bekommt man dann vieleicht folgendes Ergebnis:
Zitat
/dev/hda:
 Timing cached reads:   1268 MB in  2.00 seconds = 633.96 MB/sec
 Timing buffered disk reads:   12 MB in  3.07 seconds =   3.91 MB/sec

Ups. Die im diesem Beispiel verwendete Festplatte ist eine Seagate ST310211A Festplatte.
Zwar schon ein paar Jahre auf dem Bukel, aber 3,91 MB/sec sind für eine UDMA Mode5 / UDMA 100 doch mehr als bescheiden.

Klar, die 100MB/sec die die Platte können könnte, sind natürlich utopisch, aber man darf in der Regel eigentlich schon von einem Wert ausgehen, der ca. ein drittel (also 33MB/sec) betragen dürfte.

Also sollte man mal nach schaun, wie die Parameter der Festplatte eingestellt sind.
hdparm -iv /dev/hda liefert dann folgendes:
Zitat
/dev/hda:
 multcount    =  0 (off)
 IO_support   =  0 (default 16-bit)
 unmaskirq    =  1 (on)
 using_dma    =  0 (off)
 keepsettings =  0 (off)
 readonly     =  0 (off)
 readahead    = 256 (on)
 geometry     = 19386/16/63, sectors = 19541088, start = 0

 Model=ST310211A, FwRev=6.55, SerialNo=5DB25H20
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
 BuffType=unknown, BuffSize=512kB, MaxMultSect=16, MultSect=off
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=19541088
 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4
 DMA modes:  mdma0 mdma1 mdma2
 UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5
 AdvancedPM=no WriteCache=enabled
 Drive conforms to: device does not report version:  1 2 3 4

 * signifies the current active mode

ah ja.
Im oberen Teil kann man sehr schnell erkennen, das dort so ziemlich alles auf off steht.
Die Festplatte ist zwar auf udma5 eingestellt, aber dma ist noch nicht einmal aktiviert.

DMA ? Durch DMA kann direckt auf die Festplatte zugegriffen werden.
      Ist DMA deaktiviert, laufen alle Zugriffe über die CPU, was zu einem ziemlichen
      Leistungseinbruch bei Festplatten zugriffen führen kann.

DMA kann man mit folgendem Schalter aktivieren: hdparm -d1 /dev/hda wenn das Problemlos funktoniert sollte man folgende Meldung erhalten:
Zitat
/dev/hda:
 setting using_dma to 1 (on)
 using_dma    =  1 (on)
wenn es Probleme gibt, kommt folgendes dabei raus:
Zitat
setting using_dma to 1 (on)
 HDIO_SET_DMA failed: Operation not permitted
 using_dma    =  0 (off)

Das zweite Ergebnis weißt leider darauf hin, das sich DMA nicht aktiviern lies.
Das Problem kann auftreten, wenn der Chipsatz für die Southbridge nicht unterstützt wird bzw. nicht ausgewält wurde.
Oft funktioniert es auch nur, wenn der Treiber fest in den Kernel mit eincompiliert wurde und nicht nur als Modul realisiert. Beim standat Debian Kernel ist das zB. mit dem v82cxxx Treiber für VIA Mainboards der Fall.
Um dann DMA aktivieren zu können, führt leider kein weg drann vorbei. den Kernel neu zu bauen und den v82cxxx Treiber fest ein zu compilieren.
Das ist zwar Arbeit aber lohnt sich auch zu hundert Prozent, denn mit DMA liefert das hdparm benchmark Ergebnis schon mal folgendes:
Zitat
/dev/hda:
 Timing cached reads:   1336 MB in  2.00 seconds = 617,96 MB/sec
 Timing buffered disk reads:   84 MB in  3.01 seconds =  24,87 MB/sec
Na, das ist doch schon mal ein kleiner Unterschied.

Gucken wir jetzt noch mal genau hin:
Zitat
multcount    =  0 (off)
aber die Festplatte sagt Sie kann
Zitat
MaxMultSect=16
also benutzen wir den Schalterhdparm -m16 /dev/hda um multcount auf 16bit hoch zu setzen.
Das sorgt dann noch für
Zitat
/dev/hda:
 Timing cached reads:   1284 MB in  2.00 seconds = 641.96 MB/sec
 Timing buffered disk reads:   82 MB in  3.07 seconds =  26.73 MB/sec

Dann kann man sich noch mal folgendes angucken
Zitat
IO_support   =  0 (default 16-bit)
eigentlich sollte jeder halbwegs neuere Controller 32bit beherschen.
Das ändert man mit dem Schalterhdparm -c3 /dev/hda und am ende erhält man dann
Zitat
/dev/hda:
 Timing cached reads:   1336 MB in  2.00 seconds = 666.62 MB/sec
 Timing buffered disk reads:   82 MB in  3.07 seconds =  30.63 MB/sec

Na. wenn das mal nichts ist.
von 3.91 MB/sec auf 30.63 MB/sec das bedeutet immerhin ein acht mal höhere übertragungsrate.

Man kann die Schalter natürlich auch zusammen fassen:hdparm -d1 -m16 -c3 -k1 7dev/hda
Der Schalter -k1 sorgt dafür, das der Controller die einstellungen eventuell nicht zurücksetzt.

Leider wären diese ganzen schönen Einstellungen wieder weg, wenn man den Computer neu starten würde. Deshalb sollte man ein kleines script mit den Einstellungen in /etc/rc* ablegen.
Anbieten würde sich /etc/rc.s , da sich so die Einstellungen möglichst schnell bemerkbar machen würden beim starten des Systems.


Ein Wehrmutstropfen.
Hdparm unterstützt zur zeit noch keine SATA Fetsplatten.
Bzw. der libata Treiber für SATA Festplatten noch kein passthru.
Es gibt einen libata_passthru patch, allerdings ist dieser etwas wählerisch beim Kernel.
Mir selbst ist es zB. nicht gelungen den kernel 2.6.13.4 zu patchen.

Es ist aber auch nicht so schlimm.
Bei SATA Platten ist DMA zB. automatisch aktiviert, so das optimierungen mittels hdparm auch nur noch für Feineinstellungen nötig wäre.

« Letzte Änderung: November 01, 2005, 18:25:04 von Baldrian »
"Was auch immer geschieht, nie dürft ihr so tief sinken,
von dem Kakao, durch den man euch zieht, auch noch zu trinken."

Offline Baldrian

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 2426
  • Bewertung der Beiträge: 28
  • Geschlecht: Männlich
    • Profil anzeigen
    • ecarux.de
Re: Linux Tuning
« Antwort #2 am: November 30, 2005, 12:55:12 »
Dateisysteme & Partitionen


Richtig partitionieren und die wahl des passenden Dateisystems können nicht nur Performenz relevant sein, sondern auch eindeutig die stabilität und den Komfort des Systems beeinflussen.

Allerdings sollte man sich in der Regel schon vor der Installation eines GNU/Linux Systems Gedanken über die richtige Partitionierung und das Dateisystem machen.
Ein nachträgliches umpartionieren und/oder wechsel des Dateisystems ist oft leider nur sehr schwer möglich und erfordet vermutlich mehr Zeit-Aufwand, als es einem an Ersparnis einbringen kann.
Aber für die Zukunft, oder wer eh gerade mit dem Gedanken spielt, sein System neu auf zustezen, den mag es vieleicht interessieren.

Dateisysteme:
Es gibt mehrere Dateisysteme die für GNU/Linux Systeme genutzt werden können,
dabei ist keines wirklich falsch, nur gibt es passendere und unpassendere.

Hier eine kurze Übersicht über die am meisten verwendeten Dateisysteme.
Für detailierte, technische Informationen, sollte man am besten mal bei wikipedia.org rein schaun. Hier nur ein paar Hinweise und Empfehlungen.

ext2
Ist der alte Standart von Linux Systemen.
Es bietet auf Grund seines alters eine sehr hohe Stabilität und ist recht Resourcen schonend, weshlab es sich auch immer noch für ältere Rechner empfielt.

ext3
Ist das ext2 Dateisystem, welches um Journaling* erweitert wurde.
Es ist zwar langsammer als ext2, bietet aber dank der Kombination des lang erprobten ext2 und dem sicheren Journaling* ein maximum an Stabilität.
Ext3 wird meisetens als standart Dateisystem bei Linux Distributionen voreingestellt.

reiserfs
War das erste Linux Dateisystem das Journaling beherschte.
Es ist sehr schnell bei kleinen Datein und großen Verzeichnissen.
Reiserfs kann im laufenden Betrieb dynamisch vergrößert und verkleiner werden und eignet sich somit für LVM* Systeme.
Ältere Versionen standen immer in dem Ruf nicht stabil zu sein und womöglich zu Datenverlust zu führen. Die (zurzeit) noch aktuelle Version 3.6 kann aber als Stabil angesehen werden.
(Reiserfs 4.0 ist bis jetzt noch nicht offizieller Bestandteil von Linux)

XFS
Ist ein ehemaliges komerzielles Dateisystem, welches aber der Opensource Gemeinschaft geschenkt wurde. Es beherscht auch Journaling und zeichnet sich auch durch eine sehr gute Performenz aus. Leider beherschen noch nicht aller Kernel XFS, weshalb es nicht ohne Kontrolle eingestzt werden sollte.
XFS eignet sich auch für LVM* Systeme.


*Journaling:  Beim Journaling werden alle Änderungen zuerst in das so genannte Journal eingetragen, bevor sie wirklich ausgeführt werden. Dadurch gehen auch bei einem Absturz, Änderungen die am Datein vorgenommen werden sollten nicht verloren und es kann kaum zum Datenverlust kommen. Ausserdem erspart das Journaling die langwierige Konsistenzprüfung des Dateisystems.

*LVM: Wird näher im teil "Partitionen" beschrieben.



Partitionieren:
Leider partitionieren die meisten Distribution automatisch nicht richtig.
Eine gute Partitionierung kann man meistens nur von Hand anlegen.
In der Regel wird nämlich einfach alles auf eine Partition geschaufelt, was nicht nur recht unsicher ist, sondern auch nicht besonders komfortabel.

Die zwei wichtigsten Gründe sind folgende:

Das /home Verzeichniss solte auf jeden Fall eine eigene Partition bekommen.
Sollte es zum Beispiel einmal nötig sein, das System neu auf zus setzen, so können alle Benutzerdaten, Einstellungen und eigene Datein auf der /home Partion belassen werden.

Das /var Verzeichniss sollte auch eine eigene Partition bekommen.
Der Grund ist, das alle log Daten und Cache Daten in diesem Verzeichnis landen.
Mit der Zeit und vieleicht nicht ganz so regelmässiger Pflege kann sich hier so einiges ansammeln und das Verzeichnis wird schnell recht groß.
Die Gefahr lieg darin, das sich das Komplette System selbst ersticken kann, wenn sich alles auf einer Partition befindet und diese voll läuft. In dem Fall wäre noch nicht einmal ein login mehr möglich und ohne externe Hilfe wäre schicht im Schacht.


In der Regel kann es auch Sinn machen, noch eigene Partitionen für folgende Verzeichnisse an zulegen: /boot  /tmp  /usr  /usr/local  und /opt
Die verzeichnisse /dev  /bin  /sbin  /etc  müssen aber alle auf einer Partition liegen.
Wie weit das ganze Sinn macht, liegt natürlich immer im Auge des Betrachters.
Das Verzeichniss /boot braucht zum Beispiel eigentlich nur auf älteren Systemen eine eigene Partition, welche noch nicht über die 1024 Zylinder-Grenze blicken können.
Die Verzeichnisse /opt und /usr/local können eventuell sogar komplett weggelassen werden. In /opt kommt wie der Name schon sagt optionale Software, das kann je nach distribution (zB. SuSE) der KDE sein unter Debian wäre das Verzeichnis am meistens leer.
/usr/local ist für selbstcompilierte und installierte Software, wer soetwas nicht selber macht, der könnte auch diese Verzeichnis komplett weg lassen.

Natürlich kommt man schnell ins schwimmen bei sovielen Partitionen, vor allem wie groß die einzelnen Partitionen werden sollen usw. .
Damit das ganze etwas einfacher wird und man im Notfall nicht allers noch einaml machen muß weil man sich mit der Größe verschätzt hat, gibt es LVM.


LVM:
Das richtige Profi System braucht LVM.
LVM = Logical Volume Manager

Ein LVM System erlaubt es einem wärend des Betriebs Partitionen dynamisch in ihrer Größe zu verändern und auch Volumen über mehrere Physikalische Volumen (sprich festplatten) zu erstrecken.

Man legt also eine Volumen Gruppe auf einer Festplatte an, in der man wiederum Volumen Partitionen für die oben genannten Verzeichnisse anlegt.
Die Möglichkeit so ein LVM System anzulegen besteht eigentlich bei fast jeder Distribution, deren Kernel dieses unterstützt.
Die Volumen Partionen formatiert man ganz normal, allerdings macht es nur Sinn hierbei reiserfs oder XFS zu verwenden, da zB. ext3 nicht wärend des Betriebs dynamisch vergrößert werden kann.

Da allerdings nicht jeder standart Kernel von Haus aus mit LVM zurecht kommt, macht es durchaus Sinn das root Verzeichnis / mit /dev  /bin  /sbin  /etc  und jenachdem /boot auf einer ext3 Partition anzulegen und "nur" den Rest ins LVM. Das häng wie gesagt vom Kernel ab.
Für das root Verzeichnis sollte man ca. 300MB veranschlagen, für /boot so ca. 50MB.

Die Partitionen in dem LVM sollte man nur so groß anlegen wie der aktuelle Bedarf ist + 30% Reserve, den Rest sollte man frei lassen, denn ein dynamisches Erweitern der einzelnen Partitionen, kann natürlich nur richtig funktionieren wenn auch Platz übrig ist.
Zum Beispiel:
/usr = 2GB
/usr/local = 100MB
/home = je nach dem was man so braucht (Filme, Musik ...)
/tmp = 200MB
/var = 1GB (für Web Server am besten /var/www gesondert anlegen)
/opt = Distributions abhängig (siehe oben)
swap = Übern Daumen die doppelte Größe des RAM, mehr als 1Gb macht aber selten Sinn)


Um so eine Volumen Partition zu erweitern geht man dann wie folgt vor:
# lvextend -L (neue Größe zB 3000M) /dev/vg00/"Volumen-Name"
# xfs_growfs "Mountpunkt"


Wie bereist erwähnt, ist es bei einem LVM auch egal, ob sich das Volumen über mehrere Physikalische Datenträger erstreckt.

"Was auch immer geschieht, nie dürft ihr so tief sinken,
von dem Kakao, durch den man euch zieht, auch noch zu trinken."

Offline Baldrian

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 2426
  • Bewertung der Beiträge: 28
  • Geschlecht: Männlich
    • Profil anzeigen
    • ecarux.de
Re: Linux Tuning
« Antwort #3 am: Februar 10, 2006, 23:02:52 »
Kernel Tuning[/b]

Na, wenn ich schon von Linux Tuning anfange, dann sollte ich vieleicht auch mal so genau sein und verraten was man am "wirklichen Linux" sprich dem Kernel so machen kann.

Am Kernel lassen sich auch so die ein oder anderen Dinger drehen, wobei ich hier jetzt nur auf die gröbsten eingehen kann. Nicht nur weil alle Details den Rahmen und auch mein Wissen sprängen würden, sondern auch weil die meisten letzten feintuning Ma?nahmen wirklich von dem jeweiligen System und Verwendungszweck abhängen und da kann ich schlecht orakeln.
Aber soweit so gut, einiges nützlich hab ich schon anzubieten  :wink:


Als erstes braucht man erst einmal die Kernel Sourcen.
Es gibt hierbei entweder die Möglichkeit die Sourcen des Distributions eigenen Kernels zu verwenden oder die von Kernel.org .
Der Unterschied liegt darin, das die Kernel von kernel.org so genannte "vanilla" Kernel sind, wärend die Distributions spezifischen Sourcen von dem jeweiligen Distributor verändert bzw. gepatcht werden.
So ein Distributions eigener Kernel kann schon mal um die 300 Änderungen gegenüber dem ursprünglichen vanilla Kernel von Kernel.org aufweisen.

Das heißt jetzt was?
Also, zB. hat der SuSE Kernel einen Support für ReiserFS4.
Im vanilla Kernel von Kernel.org ist dieser Support nicht mit drinn, weil ReiserFS4 nach Auffasung der Kernel Entwickler noch nicht stabil genung ist.
Ob der Support jetzt stabil ist oder nicht, darum geht es jetzt nicht. Es geht darum, das die Funktionen und das verhalten des Kernels unterschiedlich sein können.

Wenn es jetzt um den Bau eines eigenen Kernels geht, würde ich empfehlen die Sourcen von Kerenel.org zu verwenden. Erstens weil es zu Problemen kommen kann, einen bereits vom Distributor stark veränderten Kernel nach eigenen Vorstellungen weiter zu verändern und ausserdem geht es ja darum einen "eigenen" Kernel zu bauen, keinen vorgekauten.

Warum ezähl ich das jetzt alles? Hätte ich doch gleich sagen können, zieht euch den Kernel von Kernel.org . Der Grund ist, das wenn man jetzt zum Beispiel SuSE mit ReiserFS4 benutzt und dann einen Kernel aus den Sourcen von Kernel.org baut, dieser neue Kernel kein ReiserFS4 mehr versteht. Das würde dann ziemlich blöd laufen. Deshalb muss man sich im zweifels Fall am besten vorher Informieren was das aktuelle System kann bzw. welche Funktionen eventuell benötigt werden, den der vanilla Kernel von Kernel.org vieleicht nicht hat. Diese fehlenden Funktionen muss man dem Kernel dann noch selbst hin zu fügen, sprich den Kernel patchen.


So, jetzt geht es erst einmal los.

Lader euch also am besten die aktuellen Kernel Sourcen von Kernel.org runter, wobei man eventuell darauf achten sollte, das benötigte Patches oder auch Treiber für diese Kernel Version verfügbar sind.

Die Kernel Sourcen werden im Verzeichnis /usr/src entpackt. Also

# tar xvzf  linux-image-2.6.xx.tar.gz

oder mit tar xvjf  wenn man die .bz2  version genommen hat.

     ( für Faule ist unp übrigens immer ein guter Tip  :wink: )

danach sollte man einen symbolischen Link erstellen.

# ln -s linux linux-image-2.6.xx

Der Grund ist, das die Sourcen in der Regel in dem Verzeichnis /usr/src/linux erwartet werden.
Danach wechselt man in das Verzeichnis mit

# cd /usr/src/linux


So, bevor es jetzt an die Konfiguration geht, ist es Zeit die Kernel sourcen anzupassen (wenn man das dann möchte). Im Kernel nicht vorgesehene Funktionen oder welche die man ändern möchte, müssen in den Kernel gepatcht werden.
Es heißt also die Patches zu besorgen, die man gerne haben möchte.
Damit es etwas einfacher ist, man nicht alles einzeln machen muss, gibt es so genannte "Patch-Sets" welche eine Samlung von Patches sind.
Zum Beispiel gibt es in der Regel auch vom jeweiligen Distributor ein Patch-Set.
Wo es ja hier aber um Tuning geht und um ein bisschen Performec, möchte ich an dieser Stelle das Patch-Set von Con Kolivas empfehlen.
Dieses Patch-Set ist meiner Meinung nach eines der besten und auch gerade für diesen Zweck vor gesehen. Ich werde es deshalb auch als Beispiel verwenden.
Man sollte sich also das zur Kernel Version passende Patch-Set (oder den patch) runter laden.
Von Con Kolivas gibt es zwei Versionen, einmal für Desktop PCs und einmal für Server.
Den Patch würde man dann mit

# patch -p1 < Pfad_bzw._Name_des_Patch.patch

einspielen.
Wenn man seinen Kernel so gepatch hat, wie man es gerne möchte, geht es an die Konfiguration.
Wer möchte kann als Anhalt für die neue Konfiguration die aktuelle verwenden.
Die Aktuelle befindet sich in der Regel im Verzeichnis /boot und trägt einen Namen wie vmlinuz-2.6.xx.config. Damit diese Konfigurationsdatei verwendet werden kann, kopiert man sie ins aktuelle Verzeichnis unter den Namen .config

# cp /boot/vmlinuz-2.6.xx.config .config

Wer diese Konfiguration Nahtlos übernehmen will, kann dieses mit

# make oldconfig

machen. Ich rate aber dazu wenigstens die Prozessor Optimierung anzupassen.
Für eine individuelle Konfiguration sollte man menuconfig verwenden oder auch xconfig. (ich finde menuconfig am besten).

# make menuconfig

In dem Beispiel bekommt man ein ncurses basiertes Konfigurations Menü.
Der wichtigste Schritt ist hier auf jeden Fall das Anpassen an den Prozessor.
Natürlich läuft auch ein bis zum i386 abwärts compiliertes Kernel auf einem Athlon Prozessor, aber dadurch würde der gute Athlon nur wie ein sehr sehr schneller 386er laufen und alle Fähigkeiten die er diesem gegenüber hat würden nicht berücksichtigt werden.
Also Prozessor auswählen.

Processor type and features >
                               Processor family >
                                            Athlon/Duron/K7        (oder was auch immer)

So, alle anderen Einstellungen muss fast jeder selber vornehmen.
Ich kenne eure Hardware nicht.
Wer die Konfiguration des Aktuellen Kernels als Grundlage genommen hat, der wird so zumindest schon mal vermutlich einen lauffähigen Kernel bekommen.
Wer seine Kernel Sourcen mit speziellen Patches versehen hat, sollte diese natürlich auch aktivieren.

Mit "exit" geht es wieder raus, jetzt muss der Kernel nur noch gebaut werden.
( Debianer siehe unten )
Als erstes sollte man immer ein

# make clean

aufruffen. Damit werden Reste eines eventuell schon vorherigen Versuch bereinigt.
Damit der Kernel im Zweifelsfall nicht mit einer aktuellen Version mit gleicher Revisionsnummer kolidiert, sollte man dem Namen eine eigene Erweiterung verpassen. Dazu öffnet man mit einem Editor ( wo wir schon auf der Konsole sind empfehle ich nano denn der gute vi ist kein Zuckerschlecken ) das Makefile und fügt bei "EXTRAVERSION =" eine beliebige Bezeichnung ein.
Mit

# make dep

werden dann die Abhängigkeiten geklärt und

# make bzImage

erstellt dann ein Kernel Image.
Um dieses verwenden zu können, muss man das gerade erstellte Image noch nach /boot kopieren und am besten sinnvoll umbenennen.

# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.xx-"die persönliche vergebene Bezeichnung"

Wer das ganze nicht für einen PC baut, der muss natürlich arch/xxx anpassen.
Wer sich für einen Kernel mit Modulen entschieden hat, was in der Regel der Fall ist, der muss jetzt noch die Module erzeugen

# make modules

und installieren mit

# make modules_install


So, nach dem der Kernel jetzt gebaut und die Module installiert sind, muss man nur noch den Bootloader anpassen. Bei den meisten Distributionen ist das wohl mitlerweile GRUB.

# nano /boot/grub menu.list

Man fügt dort einen neuen Eintag hinzu und sollte den für den alten Kernel aber noch keinesfalls entfernen. Kann ja immer sein, das was daneben gegangen ist.
Gut abgucken kann man aber schon bei dem Eintrag des aktuellen Kernels, am besten übernimmt man das erst einmal alles so und ändert nur den Namen des kernels entsprechend ab.

Neu booten und hoffen :D



Für Debianer
wer Debian benutzt oder eine Distribution die auf Debian aufbaut (zB. Ubuntu ) der kann das alles etwas bequemer haben.
Letztendlich sind nur alle Schritte bis zur Konfiguration nötig, den Rest erledigt kpkg ( dafür muss aber kernel-package installiert sein )
Man braucht dann nur einen Befehl und der Clou bei der Sache ist, es wird ein .deb Paket erzeugt, welches normal wie jedes andere Paket verwaltet werden kann.

# make-kpkg kernel_image

baut dieses Paket. zu finden ist es dann im absteigenden Verzeichnis also /usr/src .
Auch kpkg können noch weitere Optionen übergeben werden. zB. --initrd für eine Ramdisk oder --revision= für eine Persönlich Bezeichnung (siehe oben).
Nebenbei wird bei der Installation des fertigen Kernel Paketes GRUB bzw. LiLo gleich automatisch angepasst.



für die kleinen
Wer einen etwas betagten Rechner hat, der sollte anstelle des 2.6er Kernel lieber eine aktuelle 2.4 Version verwenden.
Der 2.4 Kernel wird immer noch aktiv weiter entwickelt, bekommt also auch noch weiterhin Sicherheits und Buckfixes, ist aber erstens kleiner und verbraucht auch weniger Resourcen.
Wer es noch etwas sparsammer haben möchte, der kann den kernel auch statisch ohne Module bauen. Dadurch wird der Kernel wesentlich kleiner zB. nur 1MB anstelle von 30MB. Ausserdem merkt man auf alter Hardware schon noch den unterschied zwischen einkompilierten Treibern und denen als Modul.
Welche Module das System braucht, welche also in den Kernel müssten erfährt man durch den aufruf von lsmod.
Wenn es nur um die größe geht, zum Beispiel um einen Kernel auf eine Diskette zu bekommen oder weil die alte Notebook Festplatte wirklich nichts anderes mehr zu läst, der sollte seinen Kernel nicht auf einen Prozessor obtimieren bzw. nur auf 386 setzen. Der geschwindigkeitsvorteil von der Prozessor Optimierung entsteht auch daraus, das die Bits so verteielt werden, das sie von dem Prozessor Typ am schnellsten verarbeitet werden können. Das entspricht aber oft nicht der efizientesten Platz Nutzung.



So....
Meldet euch bei Unklarheiten oder wenn das alles gar nicht will bei mir.

Achja, falls irgendwas hängt.
Vieleicht fehlt eine dieser Sachen auf dem Rechner:
GCC, make, patch, ncurses
Wer den gcc4.0 nutzt und Probleme beim kompilieren einer älteren Kernel Version hat, der sollte lieber den gcc3.4 verwenden. Beide können parallel auf dem System laufen (eventuell den link von gcc anpassen).

 
 
"Was auch immer geschieht, nie dürft ihr so tief sinken,
von dem Kakao, durch den man euch zieht, auch noch zu trinken."