# [How-To] Neustart ohne BIOS mit Kexec

## LunX

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:

```
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:

```
kernel (hd0,0)/kernel-2.6.14 root=/dev/hda3 gentoo=nodevfs devfs=nomount
```

Mit kexec wird daraus:

```
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:

```
kexec -e
```

Nun müsste euer neuer Kernel wie gewöhnlich booten nur ohne dem Umweg über das Bios    :Very Happy: 

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:

```
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. 106Last edited by LunX on Mon Nov 28, 2005 10:31 am; edited 2 times in total

----------

## pom

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:

```
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

----------

## blu3bird

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  :Very Happy: 

[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  :Very Happy: 

----------

## LunX

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.

```
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

----------

## JoHo42

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

----------

## Josef.95

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                                                                                                  │
> ...

  (Beachtet das "C" statt des "K" in PHYSICAL_START)

----------

