Как загрузить Ubuntu 18.04 в аварийный и аварийный режим
Объективный
Изучение аварийных и спасательных целей systemd и как загрузить систему в них
Требования
- Никаких специальных требований
Трудность
ЛЁГКИЙ
Конвенции
- # – требует, чтобы данные команды Linux выполнялись с привилегиями root либо
Непосредственно от имени пользователя root или с помощью командыsudo
- $ – требует, чтобы заданные команды Linux выполнялись от имени обычного непривилегированного пользователя
Знакомство
Systemd в настоящее время стала де-факто стандартной системой инициализации
для всех основных дистрибутивов Linux.
Заменив SysV и upstart, он также заменил классический способ определения системных уровней запуска
, используя системные цели
, особый тип единиц
.
В этом руководстве мы увидим, как загрузить систему Ubuntu 18.04 в аварийно-спасательные
системы systemd, и какую среду они предоставляют пользователям.
Цели Systemd против классических уровней прохождения
Systemd представила концепцию мишеней
, которая пришла на смену классической системе прогонов.
Например, то, что в SysV было известно как уровень запуска 0
, представляющий состояние остановки
машины, является эквивалентом цели отключения питания
systemd.
Аналогично, Runlevel 1
или однопользовательский режим
находит свой эквивалент в systemd в цели спасения
.
Наконец, уровни запуска 5 и 6, используемые соответственно для графического режима и для перезагрузки системы, теперь заменены графическими
целями и целями перезагрузки
. The rescue
и аналогичный emergency
цели, являются о чем мы поговорим в этом руководстве: они очень полезны для исправления некоторых критические ситуации.
Чрезвычайная цель
Аварийная
цель — это самая минимальная среда, в которой может быть загружена система.
Как только эта цель достигнута, на главной консоли запускается аварийная оболочка.
В остальном пользователю доступна только сама systemd
: монтируется только корневая файловая система (в режиме только для чтения) и никакие службы не запускаются (это также означает, что у вас не будет доступа к сети).
Это цель, в которую мы попадаем, когда процесс загрузки не может быть успешно завершен (например, когда проверка файловой системы завершается неудачей).
Как определяется аварийная цель
Чтобы проверить, как определена аварийная цель, мы должны осмотреть специальный блок
systemd.
Для выполнения этой задачи мы можем использовать команду systemctl cat
:
systemctl cat emergency.target
/lib/systemd/system/emergency.target
This file is part of systemd.
#
systemd is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
[Unit]
Description=Emergency Mode
Documentation=man:systemd.special(7)
Requires=emergency.service
After=emergency.service
AllowIsolate=yes
Как видно из приведенных выше выводов, для emergency.target требуется соответствующий emergency.service в качестве зависимости. Давайте рассмотрим его тоже:
systemctl cat emergency.service
/lib/systemd/system/emergency.service
This file is part of systemd.
#
systemd is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
[Unit]
Description=Emergency Shell
Documentation=man:sulogin(8)
DefaultDependencies=no
Conflicts=shutdown.target
Conflicts=rescue.service
Before=shutdown.target
Before=rescue.service
[Service]
Environment=HOME=/root
WorkingDirectory=-/root
ExecStart=-/lib/systemd/systemd-sulogin-shell emergency
Type=idle
StandardInput=tty-force
StandardOutput=inherit
StandardError=inherit
KillMode=process
IgnoreSIGPIPE=no
SendSIGHUP=yes
Определение услуги дает нам очень четкую информацию.
Прежде всего, переменная окружения HOME
определяется с помощью ключевого слова Environment
, и соответствует домашнему каталогу пользователя root.
Это также рабочий каталог, используемый по умолчанию при достижении emergency.target.
Когда эта служба запускается, вызывается исполняемый файл оболочки /lib/systemd/systemd-sulogin,
который, в свою очередь, вызывает /usr/sbin/sulogin
, отвечающий за предоставление нам логина для однопользовательской оболочки.
Как получить доступ к emergency.target при загрузке
Чтобы принудительно загрузить систему в emergency.target, мы должны изменить меню grub.
Это очень простая операция. Когда появится меню grub, просто выберите первую запись и нажмите e
для редактирования:
Как только вы нажмете клавишу e
, вы сможете изменить параметры загрузки и командную строку ядра.
Найдите строку, начинающуюся с linux
:
На этом этапе нажмите CTRL-e
, чтобы дойти до конца строки, удалите $vt_handoff
и добавьте директиву systemd.unit=emergency.target
(вы также можете просто использовать emergency
в качестве псевдонима, для совместимости с SysV), чтобы ваша строка выглядела следующим образом:
Если теперь вы нажмете CTRL-x
или F10
, система загрузится в аварийном режиме:
Аварийный режим Ubuntu 18.04
Функция rescue.target
Это цель systemd, которая может быть связана со старым однопользовательским режимом.
В отличие от того, что происходит с emergency.target, когда эта цель достигнута, базовая система подключается: все файловые системы монтируются, а самые основные службы запускаются и становятся доступными для пользователя.
Функция rescue.target определена в файле /lib/systemd/system/rescue.target:
/lib/systemd/system/rescue.target
This file is part of systemd.
#
systemd is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
[Unit]
Description=Rescue Mode
Documentation=man:systemd.special(7)
Requires=sysinit.target rescue.service
After=sysinit.target rescue.service
AllowIsolate=yes
Для rescue.target, как и для emergency.target, требуется соответствующий rescue.service
плюс sysinit.target
.
Первый, как и emergency.service, в основном обеспечивает вход в систему для одного пользователя, в то время как второй привлекает сервисы, необходимые для инициализации системы (в отличие от emergency.target, rescue.target — это больше, чем просто оболочка).
Загрузитесь в файл rescue.target
Процедура загрузки системы в rescue.target такая же, как и у нас, чтобы она загрузилась в аварийную цель.
Единственное, что нужно изменить, это аргумент, добавленный в командную строку ядра: вместо systemd.unit=emergency.target мы будем использовать systemd.unit=rescue.target
; опять же, мы также можем использовать псевдоним для совместимости с SysV, заменив директиву просто на 1
.
После запуска система загрузится в rescue.target, где мы сможем администрировать систему в однопользовательском режиме:
Режим восстановления Ubuntu 18.04
Выводы
Мы быстро изучили, что такое аварийно-спасательные цели systemd, чем они отличаются и какие условия они предоставляют пользователю.
Мы также рассмотрели, как отредактировать меню grub, чтобы изменить командную строку ядра и загрузить систему непосредственно к этим целям.
Важно отметить, что цели systemd также могут быть достигнуты из уже работающей системы, "изолировав" их с помощью systemctl.
Например, запустить:
systemctl isolate rescue.target
выведет систему на выручку цели.
Для более глубокого ознакомления со специальными юнитами
systemd мы можем обратиться к соответствующей очень понятной справочной странице (SYSTEMD. СПЕЦИАЛЬНЫЙ(7)).