题 是否可以在不重新启动硬件的情况下重启Linux操作系统?


有没有办法重新启动Linux系统(特别是Debian)而无需重启硬件?

我有一个RAID控制器,在操作系统启动之前需要花一点时间让自己运行,如果有办法快速重启Linux操作系统而不必经历重启RAID控制器的整个重启过程,我希望如此等等


81
2018-03-24 23:35




所有基于UEFI的系统都可以在不重启的情况下切换操作系统。你也有kexec()这就像exec(),但对于Unix内核。 - user2284570


答案:


我用 的kexec-重启 几乎所有的生产系统。

它工作得非常好,让我绕过了 POST时间长 在HP ProLiant服务器上,将启动周期从5分钟缩短到45秒。

看到: https://github.com/error10/kexec-reboot

唯一需要注意的是,它似乎不适用于启动UEFI的RHEL / CentOS 6.x系统。但大多数理智的操作系统/硬件组合都有效。


94
2018-03-25 00:05



我写的那个!但它仍然运作良好...... - Michael Hampton♦
迷人。那么实际过程看起来如何?根据Hariprasad Nellitheertha的一篇文章(链接到kexec维基百科页面),“与正常的重启过程不同,kexec在重新启动之前不会执行系统的干净关闭。由你来杀死所有应用程序并卸载文件系统在尝试重启kexec之前。“我注意到一些有问题的事情,例如,Wim Coekaerts说“同步; umount -a; kexec -e”将进行非常快速的重启。但是你无法卸载繁忙的文件系统。仔细阅读网络,许多人似乎忽略了“杀死所有应用程序”部分。 - Mike S
@MikeS这不是 kexec。就是这样 kexec-reboot 效用。 Github描述概述了差异以及实用程序为流程添加的内容。 - ewwhite
@MikeS在演出kexec之后,你只需要做一个 shutdown -r。您的系统脚本会注意到kexec已经上演并做了正确的事情。它看起来怎么样?短三或四或十五分钟。我有一个非常可怕的质量视频,我从iDRAC控制台上取下,但你真的不想忍受这个...... kexec-reboot 脚本旨在自动化为kexec获取正确的命令行参数的过程,这可能很棘手。 - Michael Hampton♦
@MichaelHampton - 很酷。我在/etc/rc3d/rc6.d/S01reboot末尾的CentOS 6.5上看到: [ -n "$kexec_command" ] && $kexec_command -e -x >& /dev/null 。所以,如果内核是由kexec -l加载的,那么系统将重新启动它,而不需要完整的/ sbin / reboot ... kexec已经完成了!我不知道,谢谢。我想更多的现代发行版也包括它。顺便说一句,如果以前没有用-l运行kexec,重启脚本会说“没有加载任何内容!”这就是为什么输出被发送到/ dev / null,以及为什么我从来没有意识到这个设施。 - Mike S


对的,这是可能的。 的kexec 将允许Linux内核直接从Linux启动,而无需通过BIOS启动过程。


17
2018-03-24 23:51



此外,UEFI允许在不重启的情况下切换OS。 - user2284570


是。你必须使用kexec工具。为了让生活更轻松,我使用 的kexec-重启

$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
2018-03-26 04:04



所以没有混淆,我没有写这个。 - Michael Hampton♦
这可能只是Ubuntu / Debian,对吧? - ewwhite
@ewwhite会的 大概 在RHEL / CentOS上工作,但在读取代码后,我发现了一些边缘情况可能导致其失败的问题点。消息来源似乎对此表示赞同: # The error checking is very basic. - Michael Hampton♦