我今天剛升級到 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 中運作良好...
您也可以在修剪之前新增一個睡眠參數,以便兩個修剪指令將在設定的秒數後執行。這應該允許啟動過程完成,從而導致修剪命令在背景運行。
像這樣(延遲 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 how-to 中改變了這一點。
筆記:我只在 Ubuntu 14.04 和 Linux Mint 17.x 的 rc.local 中測試了這樣的睡眠參數(出於修剪之外的其他目的),所以我不確定這是否會在 Ubuntu 15.04 中類似地工作。
答案3
我遇到了同樣的問題,基本上,當 rc.local 中的某些內容(例如某種守護程序)無法正常終止時,就會發生這種情況。要查找 rc.local 中的哪個命令是罪魁禍首,只需執行killall -9 命令/from/etc.local,一旦 rc.local 中的所有命令終止,它將重新啟動。