Я только что обновился до 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
Я добавил эти 2 fstrim
строки почти 2 года назад, когда устанавливал 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
Параметр -v (verbose) для trim в данном случае бесполезен, кстати, потому что он выполняется в фоновом режиме. Я также изменил это в своем руководстве Easylinuxtips.
Примечание:Я тестировал такой параметр сна только в rc.local в Ubuntu 14.04 и Linux Mint 17.x (для других целей, кроме trim), поэтому не уверен, будет ли он работать аналогично в Ubuntu 15.04.
решение3
У меня была та же проблема, в основном это происходит, когда что-то в rc.local не завершается нормально, например, какой-то демон. Чтобы найти, какая команда в rc.local является виновником, просто выполните команду killall -9 /from/etc.local, и он перезагрузится, как только все команды из rc.local будут завершены.