View previous topic :: View next topic |
Author |
Message |
LunX Guru
Joined: 18 May 2004 Posts: 391 Location: Rastede
|
Posted: Wed Nov 09, 2005 5:47 pm Post subject: [How-To] Neustart ohne BIOS mit Kexec |
|
|
Vorweg
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<<[i]
Den Kernel wie üblich bauen und einmal rebooten da der aktuelle Kernel Kexec noch nicht kennt.
[i]2. Kexec installieren
Ganz einfach mit:
Code: | emerge sys-apps/kexec-tools |
3. Kernel Parken
Dann ist alles vorbereitet und wir können den neuen Kernel Parken.
Wenn ihr grub benutzt dann sieht eure config in etwa so aus:
Code: | kernel (hd0,0)/kernel-2.6.14 root=/dev/hda3 gentoo=nodevfs devfs=nomount |
Mit kexec wird daraus:
Code: | kexec -l /boot/kernel-2.6.14 --append="root=/dev/hda3 gentoo=nodevfs devfs=nomount" |
Wenn ihr diesen Befehl ausgeführt habt wurde ein Kernel im Hauptspeicher gespeichert.
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:
Nun müsste euer neuer Kernel wie gewöhnlich booten nur ohne dem Umweg über das Bios
5. 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: | boot=$(</proc/cmdline)
kexec -l /usr/src/linux/arch/i386/boot/bzImage --append="$boot"
kexec -e |
Die Datei braucht noch eben die passenden Rechte und fertig.
Das 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
Last edited by LunX on Mon Nov 28, 2005 10:31 am; edited 2 times in total |
|
Back to top |
|
|
pom Apprentice
Joined: 09 Aug 2002 Posts: 212 Location: Magdeburg, Deutschland
|
Posted: Fri Nov 18, 2005 12:28 pm Post subject: |
|
|
Hallo,
Quote: | CONFIG_PHYSIKAL_START=0x100000
ebenfalls unter >>Prozessor type and features<< zu finden. |
ich habe die gentoo-sources-2.6.14-r2 installiert und da gibt es die Option nicht.
Leider kommt beim Aufruf folgenden ERROR:
Code: | kexec -l /boot/kernel-2.6.14-gentoo-r2 --append "root=/dev/hda5 video=matroxfb:vesa:0x11b,depth:32"
Undefined symbol: _GLOBAL_OFFSET_TABLE_ |
Fehlt was?
Gruß
POM |
|
Back to top |
|
|
blu3bird Retired Dev
Joined: 04 Oct 2003 Posts: 614 Location: Munich, Germany
|
Posted: Sat Nov 19, 2005 9:51 pm Post subject: |
|
|
Hi,
überprüf mal ob Quote: | CONFIG_PHYSIKAL_START=0x100000 |
in /usr/src/linux/.config drin steht.
Ich finde es nämlich bei menuconfig auch nicht, vermutlich hat es da einen anderen Namen.
(Mit 2.4.12-nitro2)
Ansonsten prima HowTo
[edit]
Woran kanns denn liegen, wenn der Rechner bei kexec -e einfriert?
Also Festplatte ist für ein paar Sekunden aktiv, dann blinkt der Bildschirm einmal und dann passiert nichts mehr.
[/edit]
Gruss |
|
Back to top |
|
|
LunX Guru
Joined: 18 May 2004 Posts: 391 Location: Rastede
|
Posted: Mon Nov 28, 2005 10:19 am Post subject: |
|
|
Wenn ich aus X "kexec -e" ausgeführe friert er auch ein in der Konsole kann es sein das ein Restbild dableibt einfach mal zwischen den Konsolen Switchen STRG+ALT+FX dann muesste es eigentlcih gehen.
Code: | CONFIG_PHYSIKAL_START=0x100000
ebenfalls unter >>Prozessor type and features<< zu finden. |
Hatte ich in der .config ein y nachgetragen danach war es in der menuconfig auch vorhanden.
gruß
lunx |
|
Back to top |
|
|
JoHo42 l33t
Joined: 14 Feb 2004 Posts: 956 Location: Germany
|
Posted: Wed Feb 10, 2010 7:56 pm Post subject: |
|
|
Hi Leute,
habe das mit dem kexec auch ausprobiert.
Das ganze mit dem Kernel 2.6.31-gentoo-r6 und der kexec Version 2.0.0-r1.
Das mit dem booten klapt auch ganz gut, allerdings ist meine Soundkarte nach dem booten mit kexec tot.
Hat jemand aehnliche Erfahrungen?
Gruss Joerg |
|
Back to top |
|
|
Josef.95 Advocate
Joined: 03 Sep 2007 Posts: 4682 Location: Germany
|
Posted: Fri Feb 19, 2010 1:02 pm Post subject: |
|
|
Nur zur Info:
Im aktuellen Kernel-2.6.32 (x86) unter "make menuconfig" zu finden Quote: | │ Symbol: PHYSICAL_START [=0x1000000] │
│ Prompt: Physical address where the kernel is loaded │
│ Defined at arch/x86/Kconfig:1496 │
│ Depends on: EMBEDDED [=n] || CRASH_DUMP [=n] │
│ Location: │
│ -> Processor type and features | (Beachtet das "C" statt des "K" in PHYSICAL_START) |
|
Back to top |
|
|
|