长话短说,我的一系列不幸的开发错误导致了/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.local
Wheezy 会避免这种情况;或者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,请记住从 中删除所有救援选项。