neuerdings gibt es ein neues Tool im Kernel das für große Server wohl am sinnvollsten ist aber ich finds auch für den kleinen Benutzer recht nützlich.
Den kexec Patch gibt es schon seit ein paar Jahren evtl. kennen den schon einige von euch. Das Prinzip ist einfach. Ihr Baut wie gewohnt euren Kernel dann ruft ihr kexec auf, dieser parkt den neuen Kernel im Hauptspeicher. Wenn dann der Reboot kommt überschreibt kexec den Code des zuletzt aktiven Kernels mit dem des neuen Kernel und übergibt dann die Kontrolle dem neuen Kernel der darauf hin startet. Die Schritte dorthin sind nicht allzuschwer und sollten schnell gemacht sein.
1. Kernel Anpassen
Kexec ist ab dem 2.6.13 Kernel verfügbar also stellt sicher das ihr einen aktuellen Kernel habt und kontrolliert ob folgende Optionen im Kernel Aktive sind:
CONFIG_KEXEC=y
zu finden unter >>Prozessor type and features<<.
CONFIG_PHYSIKAL_START=0x100000
ebenfalls unter >>Prozessor type and features<< zu finden evtl. muss es per Hand in der .config auf "y" gesetzt werden.
CONFIG_SYSFS=y
Unter >>Pseudo filesystems<<
Den Kernel wie üblich bauen und einmal rebooten da der aktuelle Kernel Kexec noch nicht kennt.
2. Kexec installieren
Ganz einfach mit:
Code: Select all
emerge sys-apps/kexec-toolsDann ist alles vorbereitet und wir können den neuen Kernel Parken.
Wenn ihr grub benutzt dann sieht eure config in etwa so aus:
Code: Select all
kernel (hd0,0)/kernel-2.6.14 root=/dev/hda3 gentoo=nodevfs devfs=nomountCode: Select all
kexec -l /boot/kernel-2.6.14 --append="root=/dev/hda3 gentoo=nodevfs devfs=nomount"Habt ihr eine RAM-Disk könnt ihr diese mit --initrd=/boot/initrd.img-2.6.14 hinten dranhängen.
4. Kernel starten
Der Kernel wurde geparkt und ist nun bereit zum neustarten. Das geht auch ganz einfach mit:
Code: Select all
kexec -e5. Tipps & Tricks
Ich hab mir die sache etwas einfacher gemacht. Wenn ich den Kernel gebaut habe kopiere ich ihn nicht erst sondern Boote ihn erstmal über kexec.
Sollte was mit dem Kernel nicht OK und das System startet nicht mehr muss ich eh neustarten so hab ich dann meinen alten Kernel ja noch, sollte es klappen kann ich den neuen Kernel immer noch in meinen Bootloader packen. Dazu habe ich mir in /etc/init.d/ die Datei kexec.sh erstellt und mit folgendem Inhalt gefüllt:
Code: Select all
boot=$(</proc/cmdline)
kexec -l /usr/src/linux/arch/i386/boot/bzImage --append="$boot"
kexec -eDas Script parkt den Kernel aus /usr/src/linux/arch/i386/boot/bzImage und holt sich die boot Informationen womit der aktuelle Kernel gebootet wurde.
Danach startet es den geparkten Kernel.
6. Anders Gentoo booten
Es ist auch möglich mit kexec einen Kernel von einem anderen Gentoo-System zu "parken" und dann zu starten.
Quellen
Linux Magazin 12/05 S. 106




