当没有systemd/init时如何关闭电源(例如使用init=/bin/bash)?

当没有systemd/init时如何关闭电源(例如使用init=/bin/bash)?

poweroff抱怨它无法通过 DBus 连接到 systemd(当然,它不存在)。我sync随后执行了kill $$,认为 pid 1 死亡会提示内核关闭电源,但这导致了内核恐慌。然后我按住电源按钮强制关闭电源。

在这种情况下,最正确的关机方法是什么?

答案1

我将简单地执行以下两个命令:

echo s > /proc/sysrq-trigger    <= For sync
echo o > /proc/sysrq-trigger    <= For shutdown the system

假设内核中启用了魔法键

答案2

卸载已安装的文件系统。根文件系统是一个特例;为此,您可以使用mount / -o remount,ro.在 Linux 上,umount /也恰好可以工作,因为它有效地转换为以前的命令。


也就是说,您不需要担心卸载太多,除非

  1. 您已经安装了旧的文件系统,例如 FAT(由 EFI 系统分区使用)或 ext2,它不实现日志记录或等效功能。对于现代文件系统来说,sync这应该足够了,并且文件系统将在下次启动时快速修复自身。
  2. 您可能已经留下了一个写入文件系统的正在运行的进程,并且您打算彻底关闭它。在这种情况下,尝试卸载文件系统很有用,因为卸载会失败并显示繁忙错误以提醒您剩余的写入器。

以上是重要的部分。之后,您还可以使用 方便地关闭硬件电源poweroff -f。或者使用 重新启动reboot -f

有一个systemd特定的等效项poweroff -fsystemctl poweroff -f -f。但是,poweroff -f它的作用相同,systemd并且即使构建时没有 SysV 兼容性,也支持此命令。


从技术上讲,我记得我的 USB 硬盘驱动器被记录为需要 Windows“安全删除”或同等功能。但这个要求并不安全,而且 Linux 在正常关机期间也不会这样做。更好的解释是,您不应该在硬盘旋转时轻推硬盘 - 包括尝试拔掉它的插头。完全关闭电源应该会停止驱动器旋转。您可能可以听到、感觉到或看到它是否没有停止:-)。

答案3

实际上,你想打电话重新启动(2)系统调用。

有两种方法可以做到这一点:

  1. 运行reboot -fpoweroff -f,这应该reboot(2)直接调用。

  2. 如果您使用的是真正的 Linux 虚拟终端(而不是 GUI 终端模拟器),请按Ctrl+ Alt+ Delete

请注意,某些用户空间程序(通常是 init)可以禁用键盘快捷键,禁用时快捷键将向 init 发送信号。

上述所有命令都应在卸载所有磁盘或重新挂载为只读并运行同步后完成,否则可能会丢失未写入的数据。如果您的 shell 是唯一正在运行的进程,则同步可能就足够了。

答案4

您可以使用 Magic SysRq 键(https://en.wikipedia.org/wiki/Magic_SysRq_key) 关闭计算机电源。

要正确关闭,您可以使用以下命令(引用自维基百科):

SysRq 神奇密钥的常见用途是对已锁定的 Linux 计算机执行安全重新启动(缩写)。瑞斯)。这可以防止fsck重新启动时需要,并使某些程序有机会保存未保存工作的紧急备份。[5]  QWERTY(或 AZERTY)助记符:“艾辛大象sSU特利奥林“,”电子引导FS系统U特利roken”或简单地倒读单词“BUSIER”,通常用于记住以下 SysRq 键序列:

  • un Raw(从 X 夺回键盘控制权),
  • t Erminate(向所有进程发送 SIGTERM,允许它们正常终止),
  • k Ill(向所有进程发送 SIGKILL,强制它们立即终止),
  • Ssync(将数据刷新到磁盘),
  • Unmount(以只读方式重新挂载所有文件系统),
  • 重新B开始。

但将最后一个 B 替换为(对于 azerty/qwerty)对于“电源FF”

相关内容