从 /etc/rc.local 停止无限重启循环

从 /etc/rc.local 停止无限重启循环

长话短说,我的一系列不幸的开发错误导致了/etc/rc.local快速执行reboot(在我的例子中是在 Pi 上)。机器现在陷入无限重启循环。

我可以阻止吗?它会在登录提示显示之前重新启动,即使没有,我也没有时间停止它。

是否有一些神奇的键盘快捷键可以阻止 /etc/rc.local 运行?

我发现退出启动时的无限重启循环(rc.local)在这里,但这实际上是针对问题的先发制人的预防,而不是事后修复。哎呀。

答案1

在 PC 上,您可以编辑内核命令行并(例如)附加以下内容之一:

  • systemd.unit=emergency.target只得到一个 shell(需要 systemd);
  • systemd.unit=rescue.target要开始更多的事情,然后是一个 shell(需要 systemd);
  • single在 SysV init 系统上引导至单用户模式。不过,并不完全确定rc.localWheezy 会避免这种情况;或者
  • init=/bin/bash,这将完全避免启动 init,而是为您提供一个 shell(然后您可以在其中以读写方式重新挂载根文件系统,并编辑损坏的文件)。不过,我并不完全确定 Pi 上的键盘是否可以正常工作。它需要一些知识,因为您将在没有 init 为您设置系统的情况下运行;一般情况下可以使用exec /sbin/init继续启动。 (适用于任何init 系统,因为你完全绕过了它)。

我认为没有办法在 Raspberry Pi 上做到这一点除非你正在使用NOOBS。在这种情况下,按住 Shift 键应该会出现一个恢复界面,让您进行编辑cmdline.txt,这会更改内核命令行。 (或者,可能只是编辑损坏的文件 - 我建议如果可能的话这样做)

另一种选择是将 SD 卡从 Pi 中取出,然后使用 SD 读卡器安装启动分区(我相信是 FAT32,因此您应该能够在 Windows 上执行此操作)或根分区(这是可能是 ext4,因此您需要运行 Linux)。然后您可以更改内核命令行cmdline.txt或直接修复您的rc.local.如果您cmdline.txt在 Windows 上进行编辑,请确保使用能够理解 Unix 风格的行结尾并且不会弄乱它们的编辑器。

就我个人而言,我的方法是将 Pi 的根文件系统安装在 Linux 机器上并编辑损坏的rc.local.

cmdline.txt当然,一旦您再次启动 Pi,请记住从 中删除所有救援选项。

相关内容