Linux 下使用 kexec 实现无重启切换内核
本文将演示如何在 Linux 下利用 kexec 工具无重启切换内核。 如直接按本文操作造成的一切损失 概与本文作者无关!
在 Windows 下安装和升级过显卡驱动都知道,机子需要重启。 而在 Linux 下完全可以通过卸载原有的驱动模块,然后加载新的模块达到与”重启”相同的效果。 可是还有一个问题没有解决: 如果更新了内核 怎么办? 其实内核已经提供了一个名为 kexec 的工具来完成这件事。
Let’s do it!
一、需要无重启切换内核(冷起动 System reboot), 在配置内核选项时必须把 CONFIG_KEXEC 选项置为 y。
# 查看你的内核是否已经开启 kexec
user@~$ grep “KEXEC” /boot/your-kernel-config-file
CONFIG_KEXEC=y #支持# 或者在编译内核时添加
user@~/linux-2.6.25$ make menuconfig
# 选择 “Processor type and features
“标签下的 “kexec system call”选项 (参考下图)
二、安装 kexec ; make、apt-get、yum、pacman… 只要装上 kexec 即可;
# 搜索 kexec 软件包的名字
user@~$ pacman -Ss kexec
extra/kexec-tools 1.101-7
Load another kernel from the currently executing Linux kernel# 安装 kexec
user@~$ sudo pacman -S kexec-tools
三、安装完 kexec 后,查看帮助(kexec –help),了解 kexec 的基本操作参数。 我这里初始内核为 2.6.27-ARCH , 而替换的内核是 2.6.25-kldoo9。 ……省略内核的安装。
# -l 载入内核镜像
# –command-line 系统基本设置
# –initrd 载入内核模块镜像
# -e 执行重载内核# 我要切换的内核镜像是 vmlinuz26-kldoo9, 内核模块镜像是 kernel26-kldoo9.img, 而系统分区是 sda3, 那么可以这么写:(下面使用 root 用户)
root@~# kexec -l /boot/vmlinuz26-kldoo9 –command-line=”root=/dev/sda3 ro vga=773″ –initrd=”/boot/kernel26-kldoo9.img”
# 执行 kexec 重载内核
root@~# kexec -e
# 经过一系列内核操作后,你就能看到加载完新内核的控制台了
最下面的是操作过程的截图(终端截图工具 snapscreenshot)。请不要在执行图形环境的状况下操作,保持整个过程在纯终端下完成。 如需重设终端的分辨率,需要加上 –reset-vga 参数; 要加载默认以外的模块,加上参数 –module=”MOD arg1 arg2…”。 更多的设置请 kexec –help OR man kexec。
参考: LinuxSir.Org -> 【毁灭小贴士】用 kexec 迅速切换内核





Linux好像很难。。。
回复
LD 回复:
十二月 1st, 2008 at 10:31 下午
不是难,而是和windows的操作习惯不同
回复
学习下`为将来玩Linux做准备
回复
Yacca 回复:
十一月 29th, 2008 at 11:13 下午
@fqch, 我暂时米准备 哈哈
回复
LD 回复:
十二月 1st, 2008 at 10:32 下午
欢迎 欢迎
回复
LINUX达人,你好….
我是菜鸟中的菜鸟,完全不懂,路过的
回复
我的8.10还躺在U盘里等待刻录
回复
LD 回复:
十二月 1st, 2008 at 10:33 下午
ZH CEXO玩过硬盘安装,你可以试试
回复
不错 学习了
回复
Linux米用过,受教了
回复
linux…高深的我晕了…
回复
路过 借鉴中
回复
看着很复杂的样子!
回复
之前倒腾一阵子BSD,感觉有点难,尤其是整输入法什么的~
回复
LD 回复:
十二月 1st, 2008 at 10:29 下午
很少人拿BSD来做桌面的,还是linux爽
回复
最近折腾啥呢?没见更新哇
回复
LD 回复:
十二月 1st, 2008 at 10:34 下午
调整中…… 忙着毕业,就是转大人了
回复