Существует много причин того, почему система не грузится. Это может быть и неисправность железа и неисправность ПО, даже обновление ядра может привести иногда к тому результату. В таких ситуациях, я обычно использую три подхода к этой ситуации:
1. Не отлаживать, просто откатиться в известное состояние.
2. Довести систему до такого состояния, чтобы можно было запустить оболочку и попробовать наладить все в интерактивном режиме.
3. Загрузиться с другого образа, смонтировать неисправную систему и исследовать ее.
Первый способ больше всего подходит для облака, но его можно использовать и на физических серверах. Если вы делаете резервные копии файловой системы, то можно попробовать восстановится. Но я бы воздержался бы от этого способа, так как он иногда может доставить больше проблем, чем хотелось бы.
В остальных двух случаях, основной принцип заключается в том, чтобы получить доступ к системе, после чего определить проблему и исправить ее. Загрузка системы в оболочку, более предпочтительный вариант, но проблемы которые возникают на ранних этапах загрузки, скорее всего помешают вам это сделать.
Однопользовательский режим
Однопользовательский режим, известный как rescue.target, это такой режим, в котором загружается только минимальный набор служб. В этом режиме не загружаются сетевые службы и доступ к консоли возможен только физический. Из-за этого этот режим недоступен обычно для облачных систем. В системах с systemd есть еще более примитивный режим, известный как emergency mode. Он похож на rescue.target, но делает абсолютный минимум работы перед запуском.
Из однопользовательского режима можно выполнять команды так же, как и при входе в систему с полной загрузкой. Но надо учитывать, что иногда монтируется только корневой раздел и чтобы использовать программы, которые находятся в каталогах /bin, /sbin или /etc, необходимо их смонтировать вручную. На точки монтирования можно посмотреть следующими командами:
$fdisk -l (строчная L)
$cat /etc/fstab
$lsblk
Во многих системах корневой каталог в однопользовательском режиме начинает монтироваться в состоянии "только для чтения". И если каталог /etc является частью этой системы (а обычно так и есть), то тогда надо перемонтировать каталог в режиме чтения и записи. С помощью такого трюка это возможно сделать:
$mount -o rw, remount /
Ну и советую после загрузки в однопользовательский режим проверить систему, командой fsck. Иногда, с помощью этой программы можно устранить проблему загрузки или хотя бы выяснить что не так.
Однопользовательский режим - это просто точка на обычном пути загрузки, поэтому можно запустить загрузку далее, просто введя команду exit или нажав на клавиши ctrl+D.
Что делать с облачными машинами?
В облачных машинах невозможно подключить монитор или накопитель с ОС, чтобы попробовать восстановить систему. Провайдеры конечно делают обходные пути. У некоторых, например, имеется доступ к консоли через веб-интерфейс, хотя и так себе решение. Консоль не всегда адекватно работает в некоторых браузерах.
Во первых, советую делать резервные копии. Такие копии очень просто сделать такую копию. Провайдеры таких систем берут дополнительную плату за резервные копии, но обычно цена в пределах разумного. Тем более это цена вашего спокойствия. Чаще делайте образы (snapshot) и вы всегда будете иметь в наличии актуальный системный образ, к которому вы можете вернуться в короткие сроки.
Во вторых, если у вас на облачной машине производится что-то очень важное и дорогое, то советую под рукой иметь аналогичную тестовую машину, на которой вы будете производить те же действия, что и на главной машине. Но по крайней мере, вы всегда можете проверить то или иное действие на ней и посмотреть на результат. Либо в случае какой-то проблемы на основной машине переключиться на тестовую, а основную просто удалить.
Тем не менее, иногда, все равно приходится восстанавливать облачные системы. За все системы не скажу, но вот в AWS и GCP можно, например, подключить файловую систему проблемной машины к другому серверу. Главное, чтобы этот сервер и файловая система была в одной зоне видимости. Ну, а как это сделать, обычно подробно описано в разделах "помощь", нужных провайдеров.
Заключение
Итак, в этой статье, я попытался объяснить, каким образом можно начать решение проблем с системой, ну а частные случаи, рассмотрим далее.
Ну и напоследок, подписывайтесь на мой канал в телеграмм, или прямо здесь на дзене, чтобы не пропустить новое. И если возникли вопросы, то приглашаю в комментарии ниже. Так же, приветствуются предложения по темам, которые хотели бы узнать, обязательно разберем в будущем.