一个解决这类问题的简单方法通常是从一个活动系统启动,将根分区挂载到/mnt,并重命名文件。
如果您没有活动系统或制作活动系统的手段,或者您无法物理访问该系统但可以重新启动并进入GRUB菜单,您可以使用GRUB编辑器获取root shell并重命名文件。
重新启动或关机,打开电源,如果您在启动时通常看不到GRUB菜单,请按Shift键或Esc键进入GRUB菜单。
将光标移动到"Advanced Options for Ubuntu"并按Enter键,然后按e键编辑引导选项(仅限一次 - 在此处进行的更改不会永久保存,因此我们不必事后清理)。
您将看到一个类似于以下内容的屏幕
1:
![screenshot of GRUB menu editor](https://istack.dev59.com/gFZZD.webp)
将光标移动到以
linux
开头的行,并将光标移动到该行的末尾,或者在内核引导参数中的任何位置。请确保您在正确的行上,并小心输入,因为系统可能无法启动而没有
/etc
。
添加文本
init=/bin/bash
并按下
F10进行启动。
这将使用Bash shell作为init启动系统。您将获得一个root shell,并且文件系统将被挂载为只读。
2要使文件系统可写,请输入以下命令。
mount -o remount,rw /
现在你可以重命名
/etc
(你可能想先执行
ls
命令)。
mv /apache2 /etc
现在你可以重新启动,或者通过让根shell用正常的init系统替换自己来完成正常引导
3。
exec systemd
我在Ubuntu MATE 18.04上测试了这个过程。
1 非常感谢Kulfy在VirtualBox中获得了GRUB编辑器的高质量截图!
2 尽管在这种情况下无法从/etc
的配置文件中设置PATH,但Bash会自动设置一个。
3 如果exec systemd
对您不起作用,exec /sbin/init
应该能解决问题。如果不行,readlink -e /sbin/init
应该给出应该运行的任何init程序的路径,然后您可以使用其完整路径exec
。如果无法按此方式继续,请直接输入reboot
。
/mnt
上,进行重命名操作,然后重新启动。 - AlexP