我今天刚刚升级到 Ubuntu Vivid (15.04),重启后我经历了一个非常长的启动过程。我的笔记本电脑通常在 5 秒或更短的时间内启动,但现在几分钟后它还没有完成。
按下Esc显示以下屏幕:
最后一行显示“正在运行启动作业,以实现 /etc/rc.local 兼容性(7 分 24 秒 / 无限制)”。尽管有“无限制”部分,但它在 10 分钟后就放弃(或完成?),启动过程结束。
每次启动时都会发生这种情况。
这可能与过渡到 systemd 有关吗?我该如何修复这个问题?(现在,我在关闭笔记本电脑之前会三思而后行)。我应该报告错误吗?如果是,在哪里报告?
我的/etc/rc.local
文件:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
fstrim -v /
fstrim -v /home
exit 0
该文件是可执行的:
$ ls -l /etc/rc.local
-rwxr-xr-x 1 root root 333 aug 14 2013 /etc/rc.local
fstrim
大约两年前,我按照以下说明安装了 SSD,然后添加了这两行简单的 Linux 技巧项目。
显然这些就是导致我的问题的原因(我删除了它们并重新启动 - 问题消失了),但我仍然认为系统不应该像这样挂起 10 分钟。另外,我fstrim
现在如何在启动时运行?
答案1
如果您将长时间运行的命令放入 中rc.local
,您的启动将会延迟。您应该将这些命令发送到后台:
( fstrim -v /; fstrim -v /home ) &
也就是说,你可能不必自己做这件事。Ubuntu 14.10 添加了每周的工作fstrim
。
答案2
奇怪的是,这在 Ubuntu 15.04 中突然出现了问题,而在 Ubuntu 14.04 中它一直运行良好......
您还可以在 trim 之前添加 sleep 参数,这样两个 trim 命令将在设定的秒数后执行。这应该允许启动过程完成,从而导致 trim 命令在后台运行。
像这样(延迟 40 秒):
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
sleep 40
fstrim /
fstrim /home
exit 0
顺便说一句,trim 的 -v(详细)参数在这种情况下毫无用处,因为它是在后台运行的。我也在我的 Easylinuxtips 操作指南中更改了这一点。
笔记:我只在 Ubuntu 14.04 和 Linux Mint 17.x 中的 rc.local 中测试过这样的睡眠参数(用于 trim 以外的其他目的),所以我不确定这是否会在 Ubuntu 15.04 中以类似的方式工作。
答案3
我遇到了同样的问题,基本上这种情况发生在 rc.local 中的某些东西没有正常终止时,例如某种守护进程。要找出 rc.local 中的哪个命令是罪魁祸首,只需使用 killall -9 命令/from/etc.local,一旦 rc.local 中的所有命令都终止,它就会重新启动。