kexec 是一个快速重启动 Linux 系统的工具,其快速主要体现在是从内核开始启动而不是从硬件初始化开始,在当今硬件越来越复杂,开机自检越来越慢的条件下,kexec 可算是提高生产力的一大发明。
kexec 的操作分为两步:
- 加载内核到内存
- 运行刚才加载的内核
第一步的语法为 kexec -l 内核文件名 –initrd=initrd文件名 –append=内核参数。注意等号必不可少,否则,虽然 kexec 不报错,但是内核启动时会失败;第二部用 kexec -e 即可。通过查看 /sys/kernel/kexec_loaded 的内容可以判断是否已经加载内核。
目前遇到的问题有这几个:
- cciss HP SmartArray驱动在重启内核时会失败,导致无法正常进行下去
- 没搞明白如何用 kexec 加载 xen hypervisor
相信很快就会搞明白的。
同时提一下,发行版提供的 kexec 软件包带有 /etc/init.d/ 脚本,可以把正常的 reboot 操作转变成 kexec 重启,从而加快速度。但是对于个人计算机、双操作系统的使用者来说,因为这样越过了 grub 阶段,所以无法正常进入另外一个操作系统。解决方法是修改 /etc/default/kexec 文件中的参数,禁止 /etc/init.d/kexec-load 脚本在关机前加载内核。
你果然玩了不少的虚拟化
无责任猜测,kexec无法加载xen hypervisor
kexec这东西不成熟,针对特定体系的代码太多。我指的是内核里负责搬运的那块代码。 还有就是,设计到嵌入式的kexec支持,由于标准kexec工具只支持elf格式的镜像,所以对于uImage等格式,还需要额外添加gzip解压代码。我这几天正在做。