是否可以在不重新启动硬件的情况下重新启动Linux OS?


89

有没有一种方法可以在不重新启动硬件的情况下重新启动Linux系统(尤其是Debian)?

我有一个RAID控制器,它需要一些时间才能在操作系统启动之前自动运行,如果有一种方法可以快速重新启动Linux操作系统,而不必完成重新启动RAID控制器的整个重新启动过程,等等


6
所有基于UEFI的系统都可以在重启操作系统时切换操作系统。您也有kexec()like exec(),但是对于Unix内核。
user2284570 2015年

Answers:


98

我几乎在所有生产系统上都使用kexec-reboot

它运行得非常好,使我可以绕过HP ProLiant服务器上的较长POST时间,并将启动周期从5分钟减少到约45秒。

参见:https : //github.com/error10/kexec-reboot

唯一需要注意的是,它在启动UEFI的RHEL / CentOS 6.x系统上似乎不起作用。但是大多数理智的OS /硬件组合都能正常工作。


62
我写的!但是它仍然运行得很好...
Michael Hampton

1
迷人。那么实际过程看起来如何?根据Hariprasad Nellitheertha的一篇文章(从kexec Wikipedia页面链接到),“与正常的重新引导过程不同,kexec不会在重新引导之前对系统进行完全关机。这将由您杀死所有应用程序并卸载文件系统。尝试重新启动kexec之前。” 我注意到一些可疑的事情,例如Wim Coekaerts说“ sync; umount -a; kexec -e”将执行非常快速的重新引导。但是您不能卸载繁忙的文件系统。仔细浏览网络,似乎许多人忽略了“杀死所有应用程序”部分。
Mike S

2
@MikeS不是kexec。它是kexec-reboot实用程序。Github描述概述了差异以及实用程序为流程添加的内容。
ewwhite

4
@MikeS登台kexec后,只需执行一个即可shutdown -r。您的系统脚本会注意到kexec已经上演并且可以正确执行。看起来如何?缩短三,四或十五分钟。我从iDRAC控制台上获得了一个质量非常糟糕的视频,但是您真的不想受此困扰...该kexec-reboot脚本旨在自动将正确的命令行参数传递给kexec的过程,这可能很棘手。 。
迈克尔·汉普顿

1
@MichaelHampton-太好了。我看到在/etc/rc3d/rc6.d/S01reboot结束附近的CentOS 6.5上有:[ -n "$kexec_command" ] && $kexec_command -e -x >& /dev/null。因此,如果内核由kexec -l加载,则系统将在没有完整的/ sbin / reboot的情况下重新引导进入内核... kexec已安装!我不知道,谢谢。我想也涵盖了更多现代发行版。顺便说一句,如果kexec先前未与-l一起运行,则重新引导脚本将显示“尚未加载任何内容!”。这就是为什么将输出发送到/ dev / null的原因,也是为什么我从未意识到此功能的原因。
Mike S


15

是。您必须使用kexec-tools。为了使生活更轻松,我使用kexec-reboot

$sudo apt-get install kexec-tools
$wget https://raw.githubusercontent.com/vadmium/kexec-reboot/master/kexec-reboot
$chmod +x kexec-reboot
$sudo mv kexec-reboot /usr/local/sbin/kexec-reboot
$sudo /usr/local/sbin/kexec-reboot

13
这样就不会造成混乱,我没有写这个。
迈克尔·汉普顿

这可能仅适用于Ubuntu / Debian,对吗?
ewwhite

1
@ewwhite它可能可以在RHEL / CentOS上运行,但是在阅读代码时,我发现了几个问题点,这些情况下边缘情况可能会导致它失败。消息人士似乎在评论中承认了这一点:# The error checking is very basic.
迈克尔·汉普顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.