/boot/* kopieren um Kernel auszutauschen?

F

Fat32Tony

Gast
Kann ich von Linux System A einfach /boot/* nach Linux System B /boot/ kopieren bzw. einsetzen und damit die Kernel ersetzen? Oder gibt es da Komplikationen?

lg
 
Kernel: Der Kernel besteht im wesentlichen aus der binären Kerneldatei die beim Start des BS geladen wird. ( Diese Kerneldatei kann verschiedene Formate haben, sie kann zB komprimiert sein, oder auch nicht. Inhalt und Funktion ist das Selbe, Größe und Name aber unterschiedlich.) Zusätzlich gehören zu jedem Kernel zwingend eine größere Menge an genau für diesen Kernel erzeugte Kernelmodule, die nur mit genau diesem Kernel funktionieren. Man sollte noch einige Dateien dazugezählen die indirekt dazugehören, wie zb eine Konfigurationsdatei (siehe unten) und Dateien die genaue Positionen der einzelnen Funktionen des Kernels in der binären Kerneldatei und in den Modulen beschreiben. Diese Dateien werden für die Funktion des Kernels nicht zwingend benötigt sind auch nicht in jedem Falle vorhanden und könnten auch aus dem Kernel neu erstellt werden. Bei der Installation des Kernels im System werden dann noch weitere Dateien erzeugt, die im erweiterten Sinne dann auch zum Kernel jetzt aber schon Systembezogen dazugehören. Das ist zB die initrd und die globale Modulkonfiguration ohne die die Module nicht automatisch geladen werden können. Die Kerneldatei eventuelle config, map-Dateien und sym-Dateien sowie die initrd liegt typisch unter /boot/ die Module und alles was dazu gehört, findet man unterhalb von /lib/modules/$KERNELNAMEN
Unterschieden und verglichen wird der Kernel und seine dazugehörigen Module am internen Kernelnamen der sich aus der eigentlichen Kernelversion des Quelltextes und einer Versionserweiterung die beim Konfigurieren festgelegt werden kann, zusammensetzt. auslesen kannst du das am laufenden kernel mit "uname -r" . Ob dann eine binare Kerneldatei auch dieses Komplett im Dateinnamen mit sich führt, ist zwar typisch aber für die Funktion nicht zwingend erforderlich. Das Modulverzeichnis muss jedoch zwingend so benannt sein.

private Kernelmodule Weiterhin gibt es auf vielen Systemen noch weitere Kernelmodule die nicht aus dem Kernelquelltext übersetzt werden. Das können bestimmte Treiber sein, aber auch Module von Applikationen. Diese Module sind ebenso eindeutig an die Kernelversion und Kernel-Konfiguration gebunden und gehören somit auch zum Kernel und müssen zB nach jedem Kernelwechsel wieder neu kompiliert werden. Wie das erfolgt ist unterschiedlich, machmal funktioniert das automatisch in den Startscripten, machmal auch auch nur per Handarbeit. Wo die Module liegen ist nicht definiert, oft werden sie auch bei den anderen Modulen in einem separatem Unterverzeichnis abgelegt. Sie können aber durchaus auch in einem Unterverzeichnis der Applikation, für die sie benötigt werden, liegen. Das ist dann vor allem dann zu erwarten, wenn die Module nicht automatisch sondern nur von der Applikation selbst geladen werden.

Kernelkonfiguration: Das ist im Grunde nur eine einzige Datei die jeder Kernel bei Suse auch im "Bauch" mit sich führt. Du kannst sie bei Susekernel auch "aus dem Bauch" auslesen mit

Code: Alles auswählen
zcat /proc/config.gz


Es ist eine automatisch generierte make config Datei. Diese enthält die genauen Optionen mit denen der Kernel übersetzt wurde. Das ist wie eine Art Bauplan für genau diesem Kernel. Mit dieser Datei läßt sich mit dem selben Compiler und dem selben (ungeänderten) Kernelquellcode immer wieder genau der selbe Kernel und die selben dazugehörigen Module herstellen. Bei neuem oder geänderten Kernelquellcode läßt sich daraus auch die Konfiguration für einen analog konfiurierten und damit analog funktionierenden Kernel einer anderen Version herstellen. Für verschieden Spezialfälle und bei Suse auch die typischen SuSE Konfigurationen liegen auch noch mal irgendowo im Archiv des Quellcodes, solche configs haben dort aber unterschiedliche Namen jedoch immer ein "config" enthalten. Benötigt wird die Konfiguration beim Kompilieren im Hauptverzeichnis des Quellcodes als ".config" also als versteckte Datei.

Modulparameter weiterhin gibt es eine aus mehreren Dateien bestehenden Modul- Paramameterkonfiguration im Betriebsystem. Darin werden uA für bestimmte Module bestimmte Aliasnamen und Parameter für die Module festgelegt die beim automatischen Laden verwendet werden sollen. Da gibt es dann auch zB eine schwarze Liste mit Modulen, die nicht verwendet werden dürfen. usw. Zu dieser Konfiguration dazu zu zählen, ist uA auch die Modul-Konfiguration für die initrd.

dynamische Kernelparameter einige Kernel- und Modulparameter lassen sich während der Laufzeit des Kernel ändern. Beim Kompilieren des Kernels werde zwar Defaultwerte gesetzt, die aber im laufenden Kernel geändert werden können. Dafür gibt es wiederum System Konfigurationen und Scripte die diese beim Booten in den Kernel laden. Auslesen kannst du die aktuelle Konfiguration übrigens mit
sysctl -a

Bootparameter des Kernel Diese legen schon beim Laden des Kernels Kernelparameter und Eigenschaften des Kernels fest. Diese Konfiguration ist natürlich in der Bootkonfiguration zu finden.

igendwas ? wie zB die interne Firewall die theoretisch auch noch zu den dynamischen Kernelkonfigurationen zählt. Ähnlich könnten bestimmte kommerzielle Applikationen wie Datenbanken uÄ bestimmt auch noch in die dynamische Konfiguration eingreifen
Quelle: http://forum.linux-club.de/viewtopic.php?f=90&t=105539

Also kurz und knapp: Nein, es ist nicht so einfach.
Aber wieso solltest du so etwas tun?
 
Zuletzt bearbeitet:
Es hängt noch mehr am Kernel als nur die Dateien unter /boot/

wenn du einen neuen Kernel haben willst installier ihn über deine Paketverwaltung.
Soll es ein noch aktuellerer als aus den Backports sein musst du ihn dir selbst kompilieren.
 
Fat32Tony schrieb:
Kann ich von Linux System A einfach /boot/* nach Linux System B /boot/ kopieren bzw. einsetzen und damit die Kernel ersetzen?
Ja, wenn es ein ohne Module gebauter Kernel ist und ein Bootloader verwendet wird, der das Filesystem liest (grub) statt nur eine Liste Blöcke(lilo), geht das so einfach. Bei den bei üblichen Linux-Distros mitgelieferten Kernels sind diese Bedingungen (die erste) allerdings nicht gegeben. Dann ist bischen Nacharbeit nötig.

Achso:
Wirklich komplett /boot/* kopieren geht natürlich nicht, weil du dann auf dem Zielsystem wahrscheinlich keinen funktionierenden Bootlader mehr hast. Wenn du allerdings nur /boot/{kernel,initrd} meinst, geht es schon.
 
Zuletzt bearbeitet:
Klappt nicht, und es gibt auch keinen Grund, es so machen zu wollen. Selbst wenn der gewünschte Kernel nicht in den Paketquellen vorhanden ist, kann man ihn sich ja selbst kompilieren und mit Werkzeugen wie Checkinstall sogar für die Paketverwaltung verdaulich gestalten.
 
Zurück
Oben