Зайти в single mode linux

Обновлено: 05.07.2024

Итак, у нас загрузилось ядро операционной системы. Далее отрабатывают системы инициализации операционной системы. Три варианта: SysV, systemd, Upstart.

INIT В СТИЛЕ SYSV

Init в стиле SysV данная процедура инициализации, самая старая она более классический Unix вариант инициализации операционной системы. Для того, чтобы понять, как происходит инициализация необходимо понять, что такое режимы загрузки (они же runlevel), разобраться как между ними переключатся, рассмотреть работу со службами.

Обычно есть 7 уровней выполнения по умолчанию:

  • Выключение
  • Однопользовательский режим (чаще всего используется для отладки и настройки операционной системы)
  • Debian\Ubuntu по умолчанию
  • RedHat\Suse по умолчанию текстовый режим.
  • WildCard (программируемый режим, можно сюда поставить любой)
  • RedHat\Suse GUI (Graphical User Interface)
  • Перезагрузка.

Но существуют операционные системы, где 10 уровней по умолчанию. Конечно речь идет о самых распространенных ядрах и сборках *nix образных операционных системах.

Для дальнейших пояснений, как работает инициализация в стиле sysV нам необходим операционная система CentOS 5.4 или ниже, потому что в более новых операционных системах данный процесс давно уже заменен. Отроем файл настроек текстовым редактором vi или любым другим удобным для вас.

Мы можем увидеть содержание файла. Те самые уровни о которых шла речь выше. Плюс прописан уровень используемые при загрузке по умолчанию. Строчка id:3:initdefault:

Мы данный параметр можем отредактировать и например сказать, чтобы операционная система загружалась по умолчанию в Single Mode например.

операционная система загружалась по умолчанию в Single Mode операционная система загружалась по умолчанию в Single Mode

Если мы посмотрим далее файл, мы можем увидеть настройку, которая описывает действия нажатия клавиш Ctrl+alt-delete . А также наглядно прописано, что запуск определенного уровня - это запуск определённого скрипта. Все скрипты запускаются из папки /etc/rc.d/

Все дальнейшие варианты инициализации растут, вот из этого варианта. И этой процедуры инициализации. Перейдем в директорию, где лежат все скрипты инициализации и выполняются данные скрипты при старте системы.

В данной папке куча скриптов, которые запускают определенные службы, например, ssh запускает демона ssh для подключения клиентом по 22 порту. Т.е здесь куча служб и запускаются они этими скриптами. Если мы например хотим остановить какую нибудь службу то набираем ./rsync stop , ну и соответственно ./rsync start для запуска данной службы. Аналогично мы можем управлять через команду service, например: service rsync restart . Поднимемся на уровень выше cd ..

Найдем все файлы, которые начинаются с rc. Для этого набираем: ls -l | grep rc. В результате мы увидим несколько скриптов.

Посмотрим rc3.d . А для этого перейдем в эту директорию. В ней можно увидеть кучу скриптов. В вариации Ubuntu современной и затем в вариации CentOS 5.4

Те скрипты, которые начинаются с буквы K, эти скрипты при старте убивают сервис, те скрипты, которые имеют первой букву S запускают сервис. Ну и соответственно порядковый номер исполнения скрипта в очереди. Для каждого runlevel свой набор скриптов.

Service service_name start|stop|reload|restart

Для того, чтобы перемещаться по уровням загрузки, нам необходимо понять на каком уровне мы находимся сейчас. Набираем runlevel . Соответственно, если мы хотим переключится telinit 1 отрабатывают скипты мы попадаем в однопользовательский режим 1.

Для выключения сейчас компьютера можно использовать shutdown h now.

INIT В СТИЛЕ SYSTEMD

Init в стиле Systemd более современная система инициализации операционной системы Linux.

Необходимым элементом работы системы systemd , являются Unit. Unit- это модуль которыми оперирует systemd:

  • .service службы
  • .mount точки монтирования
  • .device устройства
  • .socket сокеты

Если при работе в консоли мы не указывает расширение юнита, то в принципе system может догадаться в каком случае, что используется. В операционной системе существуют 2 папки в которых хранятся Unit:

  • /usr/lib/systemd директория с Units по умолчанию, в которой создаются units при установке какого либо программного обеспечения.
  • /etc/systemd директория с управляемыми Units. Тут лежат те Unit которыми может управлять админ, добавлять , редактировать.

Посмотрим, что находится в данных директориях переходим в /usr/lib/system

Нам интересны 2 директории system и user.

Содержимое папки system выглядит вот так. В данной директории лежат все необходимые Units для системы в директории user для пользователя. Картинка будет примерно аналогичная.

Директория /etc/systemd .

Тут точно также есть две папки system и user, а также конфигурационные фалы. Данные конфигурационные файлы и отвечают за настройку systemd. Это те файлы которые пришли на замену /etc/inittab , предыдущей версии инициализации операционной системы. Файлы юнитов в директориях system и user мы можем редактировать для каких-то своих целей и даже писать targets.

Далее мы можем посмотреть запущенные Units. Для этого мы можем выполнить systemctl команду, она отвечает за все действия с systemd. Для примера команда systemctl list-units нам выведет все запущенные Units, сокеты ,устройства ,точки монтирования.

Можно посмотреть юниты, которые не стартанули systemd failed. А также мы можем управлять юнитами systemctl status|start|stop|restart crond.

Так же Systemd работает с Target (целями).

Есть target которые работают так же как runlevel в классической процедуре инициализации, они не пронумерованы в отличии от runlevel у них есть конкретные имена. В табличке можно посмотреть какие target соотносятся с какими runlevel. Их этих target может быть несколько, потому что target бывают не только загрузочные. Данная система использования target обратно совместимая с системой инициализации. Для переключения мы можем использовать команду telinit. Сами по себе target есть некая группировка юнитов, последовательность вызова юнитов. Это может быть target последовательного вызова нескольких служб и ниже стоящий target.

Текущий уровень мы можем посмотреть командой runlevel. По умолчанию это будет 3. Далее мы можем написать systemctl list-units --type=target

И можно увидеть, что находимся на 3-м уровне также т.к target соответствует. Так же мы можем переключатся между runlevel командой telinit. Например, для перехода в однопользовательский режим telinit 1. А так же мы можем использовать через синтаксис systemctl isolate reboot.target.

Для того чтобы поставить какой-то загрузочный target по умолчанию, необходимо отредактировать загрузчик, вставить параметры ядра, которые будут запускаться. Или сделать проще командой systemctl set-default f multi-user.target (использование например 3 runlevel по умолчанию).

Одной из особенностей system является интересная система журналирования journald. Демон журналов. Эта система уникальна тем, что собирает информацию из разных источников событий и привязывает их к конкретным юнитам и сервисам. Благодаря этому мы можем всю диагностическую информацию просматривать в одном месте. Соответственно находить неисправности и их устранять.

Работает следующим образом:

  • Journalctl f - показывает события по мере их возникновения.
  • Journalctl n 10 вывод последних 10 событий

ИНИЦИАЛИЗАЦИЯ INIT В СТИЛЕ

Инициализация Init в стиле upstart это система инициализации, в том стиле которая задумывалась для Ubuntu, и заменила процедуру инициализации, которая пришла из Unix стандартную init процедуру. Процедура инициализации upstart контролирует инициализацию демонов и служб в течении загрузки системы и их остановку если у нас система выключается или нужно переключится в другой режим. Основное отличие от классической процедуры инициализации в том, что задачи и службы останавливаются по событиям и сами события могут генерироваться задачами и службами, могут приняты быть от любого процесса системы. Могут быть службы перезапущены в автоматическом режиме если они вдруг были завершены в аварийном режиме. Еще одно отличие в том, что у данного режима инициализации есть задачи (tasks). Основными понятиями являются службы и задачи. Основное отличие службы от задачи в том, что служба перезапускается если была аварийно завершена, а задача нет.

Процесс инициализации системы по upstart берет конфигурацию из файлов каталога /etc/init каталог файлов-заданий (jobs). Каждый файл отвечает за запуск каждого задания или службы и должен заканчиваться с расширением .conf . Уровни инициализации остались те же самые. Определение и переключение между уровнями выполняются теми же командами, описанными выше. Изменился файл, в котором мы описываем runlevel запуска по умолчанию. И для управления upstart используется утилита initctl.

Посмею предположить, что каждого интересовало хоть когда-либо то, что происходит за занавесом заставок и загрузочных экранов с момента включения питания компьютера к моменту, когда предлагается войти в систему.

Я предлагаю вам познакомиться со следующими уровнями типичной загрузки Linux:

1. BIOS

  • BIOS отвечает за базовый ввод/вывод данных с устройств/на устройства.
  • Делает некоторые проверки целостности устройств. К тому же, за тестирование работоспособности электроники отвечает POST (Power-on self-test, он же «тест на адекватность себя самого», выполняющийся как этап пре-загрузки), который управляется BIOS
  • Ищет, загружает и выполняет программу-загрузчик ОС
  • Берет загрузчик из флопика, сидюка или жесткого диска. Во время загрузки BIOS'а вы можете нажать на кнопку (обычно это F12 или F2 или Del, зависит от платформы), если вам требуется внести некоторые изменения касательно настройки железа.
  • Как только загрузчик был обнаружен и загружен в память, BIOS передает управление ему.
  • Короче говоря, BIOS загружает и выполняет загрузочную запись (MBR).

2. MBR

  • MBR — это главная загрузочная запись, хранящаяся на жестком диске
  • Она размещена в 1-м секторе загрузочного диска, например /dev/hda или /dev/sda
  • MBR занимает меньше, чем 512 байтов. Она состоит из трех компонентов: 1) главная загрузочная информация, «живущая» в первых 446 байтах; 2) информация о таблице разделов — в следующих 64 байтах; 3) и последние 2 байта нужны для проверки корректности mbr.
  • Она содержит информацию о GRUB'е (или LILO).
  • Простыми словами — MBR загружает и выполняет загрузчик GRUB.

3. GRUB

  • GRUB — Grand Unified Bootloader.
  • Если в вашей системе установлено более, чем одно ядро, у вас есть возможность выбирать, которое из них должен выполняться
  • GRUB отображает красивую анимацию plymouth заставку, и, подождав несколько секунд интерактивного воздействия пользователя, если он не нажал ни одной клавиши, он загружает ядро, установленное по умолчанию в файле конфигурации grub.
  • GRUB понимает, что такое файловая система (древние загрузчики Linux'а, например, LILO этого не понимают).
  • Конфигурационный файл Grub обычно лежит по пути /boot/grub/grub.conf (так же /etc/grub.conf может быть символьной ссылкой на него). Вот пример файла конфигурации для CentOS:

4. Ядро или Kernel

  • Ядро монтирует файловую систему в соответствии с настройкой «root=» в фале grub.conf
  • Выполняет программу /sbin/init
  • Поскольку init — это первый процесс, запущенный ядром Linux, поэтому она имеет идентификатор процесса (PID) №1. Можете выполнить «ps -ef | grep init» и убедиться в этом.
  • initrd — это Initial RAM Disk, он же временный диск в оперативной памяти
  • initrd используется самим ядром в качестве временной корневой файловой системы, пока kernel не загрузится в реальную примонтированную файловую систему. Этот временный диск также содержит необходимые для загрузки драйверы, позволяющие получить доступ к разделам дисков и другому оборудованию

5. Init

  • Смотрит в файл /etc/inittab для того, чтобы определить уровень выполнения (run level).
  • Есть следующие уровни выполнения:
    • 0 – прервать выполнение
    • 1 – Однопользовательский режим, так называемый «Single user mode», или иными словами, консоль восстановления
    • 2 – Многопользовательский режим без поддержки NFS
    • 3 – Полноценный многопользовательский режим
    • 4 – не используется
    • 5 – X11
    • 6 – перезагрузка

    6. Уровень выполнения программ (Runlevel)

    Вот и все. Возможно, некоторым из вас это не ново и особого интереса не было при чтении статью, поскольку она более ориентирована на начально-средний уровень знакомства з Линуксом.
    В таком случае могу лишь сказать, что «повторение — мать учения» (с).

    Дополнения, исправления, уточнения

      : «Ну скажем прямо — так грузятся далеко не все дистры». С ним согласилось большинство, отмечая и bsd-style init, u-boot, и хоть initrd в статье пропущен, стоить заметить, что он нужен ядру не во всех дистрибутивах. Также отмечено, что в slackware поддержка rc.d осуществляется только в качестве совместимости, а встраиваемые системы грузятся иначе. На декстопах иногда бывает EFI, а кроме того Linux популярен в мире embedded и там ещё куча разных платформ. Линукс в телефоне вообще иначе грузится. , ссылая на википедию: Еще хочется сделать замечание по поводу MBR, первого сектора и пр. Все несколько усложнилось за последние годы. Сейчас уместней говорить о EFI.



    Хотел бы навести краткое описание уровней загрузки (runlevels) в Linux. А именно на уровнях загрузки дистрибутива Ubuntu. Но для начала пройдемся по самому процессу загрузки системы.


    BIOS vs UEFI

    Первым делом подгружаеться BIOS, который выполняет базовое тестирование при включении питания POST(power-on self test), т.е. проверка всех подключенных аппаратных средств. Потом выполняется нумерация и инициализации локальных устройств. После этих действий BIOS передает управление MBR.
    В современных системах на смену BIOS пришел UEFI (Unified Extensible Firmware Interface). Это программный интерфейс, который работает между операционной системой и прошивкой платформы, что позволяет заменить BIOS. Он же в свою очередь использует GPT (GUID Partition Table) вместо таблиц MBR. Если размер диска превышает 2.2 TB, то без GPT уже не обойтись, потому что MBR поддерживает диски только до 2-х терабайтов.

    MBR vs GPT

    Типичная загрузка системы производиться HDD, на котором в MBR содержится первичный начальный загрузчик. MBR представляет собой сектор размером 512 байт, который располагается в первом секторе диска (сектор 1 цилиндра 0, головка 0). Для просмотра содержимого MBR используйте следующую команду:

    • GPT работает исключительно с адресацией LBA, поэтому можно забыть обо всех проблемах, связанных с адресацией CHS.
    • Дисковые указатели имеют размер в 64 бита; это означает, что GPT может работать с дисками емкостью вплоть до 512 x 264 байтов (8 зебибайтов, или 8.6 миллиардов ТиБ) при размере сектора 512 байтов.
    • Структуры данных GPT хранятся на диске в двух местах: в начале и в конце диска. Это повышает шансы на успешное восстановление данных после аппаратных сбоев или обнаружении сбойных секторов.
    • Для критически важных структур данных вычисляются циклические значения проверок избыточности, что повышает шансы на обнаружение поврежденных данных.
    • GPT хранит все разделы в единой таблице разделов (которая резервируется), поэтому нет необходимости использовать расширенные или логические разделы. По умолчанию можно создать 128 разделов, но размер таблицы разделов можно изменять, если это поддерживается программным обеспечением для работы с разделами.
    • MBR использует для идентификации раздела однобайтовый код с типом раздела, однако GPT использует для этого 16-байтовый глобальный уникальный идентификатор (GUID). Это снижает вероятность коллизий, связанных с типом разделов.
    • GPT позволяет использовать удобочитаемые имена разделов. Это поле можно использовать для присвоения в Linux® имен разделам /home, /usr, /var, а также другим разделам для их быстрой идентификации при работе с программным обеспечением.

    После первичного загрузчика (MBR/GPT) подгружается GRUB (GRand Unified Bootloader), который уже понимает что такое файловая система и может показать показать список имеющихся ядер (которые определяются в /etc/grub.conf, с поддержкой мягких ссылок из /boot/grub/menu.lst и/boot/grub/grub.cfg). К примеру типичное меню с grub.cfg:

    Здесь указываться образ временной файловой системы initrd.img и образ ядра vmlinuz, которому передается следующий этап загрузки.

    После того как образ ядра оказывается в памяти и ему передается управление от загрузчика 2-й ступени. Если имеется образ начального RAM-диска (initrd), то программа также перемещает его в память и помечает для дальнейшего использования, а затем вызывает само ядро, после чего начинается загрузка ядра. Просмотр содержимого начального RAM-диска и способы его редактирование можете посмотреть здесь Пример:

    initrd используется самим ядром в качестве временной корневой файловой системы, пока kernel не загрузится в реальную примонтированную файловую систему. Этот временный диск также содержит необходимые для загрузки драйверы, позволяющие получить доступ к разделам дисков и другому оборудованию. Создать свое примитивное ядро можно по этой инструкции.

    После загрузки и инициализации ядра запускается первое приложение в пространстве пользователя /sbin/init, которое обращается к файлу /etc/inittab (или /etc/init/rc-sysinit.conf) для того, чтобы определить уровень выполнения (run level).
    Есть следующие уровни выполнения:

    • 0 — выполняются действия по выключению системы.
    • 1 — однопользовательский режим (single user mode). Предназначен для различных административных действий по восстановлению системы. По своему смыслу аналогичен Safe Mode Windows, но полностью его не повторяет. На этом уровне выполнения система полностью сконфигурирована, но не запущен ни один сервис, а из пользователей может работать только один root.
    • 2 — не используется, но сконфигурирован как уровень выполнения 3. В RedHat и SuSE Linux сконфигурирован как уровень выполнения 3, но без поддержки сетевых файловых систем. В Ubuntu и Debian используется как многопользовательский режим.
    • 3 — многопользовательский режим (multiuser mode). Нормальный режим работы сервера.
    • 4 — В Slackware Linux используется для графического входа в систему. В RedHat и SuSE Linux не сконфигурирован.
    • 5 — В RedHat и SuSE Linux используется для графического входа в систему. В Slackware Linux не сконфигурирован.
    • 6 — выполняются действия по перезагрузке системы.

    Посмотреть текущий уровень исполнения и задать дефотлный:

    Так же можно на прямую вписать в grub.cfg.

    Runlevel

    Для каждого вышеперечисленного уровня выполнения в Ubuntu есть своя папка со скриптами:

    Скриптам, которые начинаются на S (startup) передается параметр start.
    Скриптам, которые начинаются на K (kill) передается параметр stop.
    Для наглядного примера, добавим свой скрипт начальной загрузки.

    Single user mode, also referred to as maintenance mode and runlevel 1, is a mode of operation of a computer running Linux or another Unix-like operating system that provides as few services as possible and only minimal functionality. It is useful for booting (i.e., starting) a computer whose operating system has been damaged and is not capable of normal operation and for performing some diagnostic and repair tasks.

    Unix-like operating systems are normally operated in multi-user mode, which not only allows multiple users to log in and use the system simultaneously, but also allows the full range of system services, including network connections and the X Window System, which provides a GUI (graphical user interface).

    A runlevel is any of several operating states of a computer, each allowing the operation of a different set of services. By default Linux boots into either runlevel 3 or runlevel 5, both of which are multi-user modes. The former permits the system to run all services except for a GUI; the latter allows all services including the GUI 1 .

    Among the administrative tasks for which single user mode is useful is using fsck to repair corrupted filesystems, such as /usr, which is often a separate partition (i.e., a logically independent section of a hard disk drive). Such repair should only be performed on unmounted (i.e., not logically attached to the system) filesystems, and it is easy to unmount filesystems in single user mode because of its minimal functionality and consequent need for only a few basic filesystems such as /bin and /sbin, which contain diagnostic and repair programs.

    Another use of single user mode is the situation in which a computer will boot up but will not allow the user to log in after the booting process has been completed. One reason that this can occur is that an incorrect password is being used. Once in single user mode, it is fairly easy to change the password and reboot the system to normal operation.

    It is possible to switch into single user mode both on a running system and by booting directly into it. For example, with regard to the former, it can be accomplished by the root (i.e., administrative) user by using the telinit command with the number 1 (for runlevel 1) as an argument (i.e., input) as follows:

    The ability to boot a computer into single user mode can be a major security hole, as it will give intruders immediate root access. Thus, it is important to configure the system to require a password for such operations.

    Single user mode is just one of several modes of logging into a damaged system. The others are automatic rescue mode, read-only rescue mode and manual rescue mode.

    ________
    1 For example, using the ps command (with its -a, -u and -x options) on a typical Red Hat system, it was found that the number of processes (i.e., instances of running programs) in single user mode was 21, as compared with 53 in runlevel 3 and 75 in runlevel 5.

    Created June 16, 2006.
    Copyright © 2006 The Linux Information Project. All Rights Reserved.

    How to Boot into Single User Mode in CentOS/RHEL 7

    by Aaron Kili | Published: August 17, 2017 | Last Updated: August 8, 2017

    Single User Mode (sometimes known as Maintenance Mode) is a mode in Unix-like operating systems such as Linux operate, where a handful of services are started at system boot for basic functionality to enable a single superuser perform certain critical tasks.

    It is runlevel 1 under system SysV init, and runlevel1.target or rescue.target in systemd. Importantly, the services, if any, started at this runlevel/target varies by distribution. It’s generally useful for maintenance or emergency repairs (since it doesn’t offer any network services at all), when a computer is not capable of normal operations.

    Some of the low-level repairs include running such as fsck of damaged disk partitions, reset root password if you have lost it, fix “failed to mount /etc/fstab” error – just to mention the most critical of them. And also when the system fails to boot normally.

    In this tutorial, we will describe how to boot into single user mode on CentOS 7. Note that practically this will help you enter the emergency mode and access an emergency shell.

    How to Boot into Single User Mode

    1. First restart your CentOS 7 machine, once boot process starts, wait for the GRUB boot menu to appear as shown in the screen shot below.

    CentOS 7 Grub Menu

    2. Next, select your Kernel version from the grub menu item and press e key to edit the first boot option. Now use the Down arrow key to find the kernel line (starts with “linux16“), then change the argument ro to rw init=/sysroot/bin/sh as shown in the screen shot below.

    Edit Grub Boot Options

    3. Once you have finished the task in the previous step, press Ctrl-X or F10 to boot into single user mode (access an emergency shell).

    CentOS 7 Emergency Shell

    4. Now mount root (/) filesystem using the following command.

    At this point, you can perform all the necessary low-level system maintenance tasks. Once you are done, reboot the system using this command.

    You may also liked to read following articles.

    Lastly, the single user mode or maintenance mode is not password-protected by default, so any one with malicious intend and physical access to your computer can enter the emergency mode and “destroy” your system.

    Системное администрирование и мониторинг Linux/Windows серверов и видео CDN

    Статьи по настройке и администрированию Windows/Linux систем

    • Полезное
      • Карта сайта
      • Мой сайт-визитка
      • Linux
        • VoIP
        • Безопасность
        • Видеопотоки
        • Системы виртуализации
        • Системы мониторинга
        • Войти
        • RSS Feed

        Процесс загрузки Linux



        Хотел бы навести краткое описание уровней загрузки (runlevels) в Linux. А именно на уровнях загрузки дистрибутива Ubuntu. Но для начала пройдемся по самому процессу загрузки системы.


        BIOS vs UEFI

        Первым делом подгружаеться BIOS, который выполняет базовое тестирование при включении питания POST(power-on self test), т.е. проверка всех подключенных аппаратных средств. Потом выполняется нумерация и инициализации локальных устройств. После этих действий BIOS передает управление MBR.
        В современных системах на смену BIOS пришел UEFI (Unified Extensible Firmware Interface). Это программный интерфейс, который работает между операционной системой и прошивкой платформы, что позволяет заменить BIOS. Он же в свою очередь использует GPT (GUID Partition Table) вместо таблиц MBR. Если размер диска превышает 2.2 TB, то без GPT уже не обойтись, потому что MBR поддерживает диски только до 2-х терабайтов.

        MBR vs GPT

        Типичная загрузка системы производиться HDD, на котором в MBR содержится первичный начальный загрузчик. MBR представляет собой сектор размером 512 байт, который располагается в первом секторе диска (сектор 1 цилиндра 0, головка 0). Для просмотра содержимого MBR используйте следующую команду:

        • GPT работает исключительно с адресацией LBA, поэтому можно забыть обо всех проблемах, связанных с адресацией CHS.
        • Дисковые указатели имеют размер в 64 бита; это означает, что GPT может работать с дисками емкостью вплоть до 512 x 264 байтов (8 зебибайтов, или 8.6 миллиардов ТиБ) при размере сектора 512 байтов.
        • Структуры данных GPT хранятся на диске в двух местах: в начале и в конце диска. Это повышает шансы на успешное восстановление данных после аппаратных сбоев или обнаружении сбойных секторов.
        • Для критически важных структур данных вычисляются циклические значения проверок избыточности, что повышает шансы на обнаружение поврежденных данных.
        • GPT хранит все разделы в единой таблице разделов (которая резервируется), поэтому нет необходимости использовать расширенные или логические разделы. По умолчанию можно создать 128 разделов, но размер таблицы разделов можно изменять, если это поддерживается программным обеспечением для работы с разделами.
        • MBR использует для идентификации раздела однобайтовый код с типом раздела, однако GPT использует для этого 16-байтовый глобальный уникальный идентификатор (GUID). Это снижает вероятность коллизий, связанных с типом разделов.
        • GPT позволяет использовать удобочитаемые имена разделов. Это поле можно использовать для присвоения в Linux® имен разделам /home, /usr, /var, а также другим разделам для их быстрой идентификации при работе с программным обеспечением.

        После первичного загрузчика (MBR/GPT) подгружается GRUB (GRand Unified Bootloader), который уже понимает что такое файловая система и может показать показать список имеющихся ядер (которые определяются в /etc/grub.conf, с поддержкой мягких ссылок из /boot/grub/menu.lst и/boot/grub/grub.cfg). К примеру типичное меню с grub.cfg:

        Здесь указываться образ временной файловой системы initrd.img и образ ядра vmlinuz, которому передается следующий этап загрузки.

        После того как образ ядра оказывается в памяти и ему передается управление от загрузчика 2-й ступени. Если имеется образ начального RAM-диска (initrd), то программа также перемещает его в память и помечает для дальнейшего использования, а затем вызывает само ядро, после чего начинается загрузка ядра. Просмотр содержимого начального RAM-диска и способы его редактирование можете посмотреть здесь Пример:

        initrd используется самим ядром в качестве временной корневой файловой системы, пока kernel не загрузится в реальную примонтированную файловую систему. Этот временный диск также содержит необходимые для загрузки драйверы, позволяющие получить доступ к разделам дисков и другому оборудованию. Создать свое примитивное ядро можно по этой инструкции.

        После загрузки и инициализации ядра запускается первое приложение в пространстве пользователя /sbin/init, которое обращается к файлу /etc/inittab (или /etc/init/rc-sysinit.conf) для того, чтобы определить уровень выполнения (run level).
        Есть следующие уровни выполнения:

        • 0 — выполняются действия по выключению системы.
        • 1 — однопользовательский режим (single user mode). Предназначен для различных административных действий по восстановлению системы. По своему смыслу аналогичен Safe Mode Windows, но полностью его не повторяет. На этом уровне выполнения система полностью сконфигурирована, но не запущен ни один сервис, а из пользователей может работать только один root.
        • 2 — не используется, но сконфигурирован как уровень выполнения 3. В RedHat и SuSE Linux сконфигурирован как уровень выполнения 3, но без поддержки сетевых файловых систем. В Ubuntu и Debian используется как многопользовательский режим.
        • 3 — многопользовательский режим (multiuser mode). Нормальный режим работы сервера.
        • 4 — В Slackware Linux используется для графического входа в систему. В RedHat и SuSE Linux не сконфигурирован.
        • 5 — В RedHat и SuSE Linux используется для графического входа в систему. В Slackware Linux не сконфигурирован.
        • 6 — выполняются действия по перезагрузке системы.

        Посмотреть текущий уровень исполнения и задать дефотлный:

        Так же можно на прямую вписать в grub.cfg.

        Runlevel

        Для каждого вышеперечисленного уровня выполнения в Ubuntu есть своя папка со скриптами:

        Когда загружается система — программа init смотрит на уровень выполнения заданный по дефолту и лезет в соответствующею папку со скриптами. В каждой из папок rc*.d есть набор скриптов:

        Скриптам, которые начинаются на S (startup) передается параметр start.
        Скриптам, которые начинаются на K (kill) передается параметр stop.
        Для наглядного примера, добавим свой скрипт начальной загрузки.

        Здесь мы добавили добавили скрипт с стандартными опциями (status|start|stop|restart). При вызове одной из них — мы записываем вывод с указанием времени в файл /home/alex/testappfile чтобы узнать очередность запуска скриптов. Далее нам нужно добавить запуск скрипта на стандартных уровнях выполнения.

        Теперь перезагружаем систему и потом смотрим в файл testappfile.

        Настройка загрузчика Grub

        Загрузчик системы выполняет очень важную функцию. Он позволяет выбрать какую операционную систему стоит загружать, также инициализирует параметры ядра Linux и подготавливает его к загрузке. В большинстве дистрибутивов Linux используется загрузчик Grub. Он поддерживает все необходимые функции, в том числе и UEFI, а также очень настраиваемый.

        В одной из предыдущих статей мы рассматривали установку загрузчика Grub в Linux. В этой же будет будет продолжена тема и более детально рассмотрена настройка загрузчика Grub. Мы рассмотрим как графическую настройку с помощью Grub Customizer, так и более сложный, но более гибкий вариант с помощью ручного редактирования конфигурационных файлов.

        Настройка Grub с помощью Grub Customizer

        Это самый легкий путь конфигурации загрузчика. Графическая программа настройки Grub Customizer позволяет настроить все основные параметры загрузчика, например, фоновое изображение, шрифт, порядок пунктов загрузки, параметры ядра и многое другое. Все это делается в пару кликов.

        Программа доступна в официальных репозиториях большинства дистрибутивов, и вы можете ее оттуда легко установить. Для установки в Ubuntu выполните:

        sudo apt install grub-customizer

        В Fedora, Red Hat и CentOS команда будет немного отличаться:

        sudo yum install grub-customizer

        После завершения установки вы можете запустить программу из главного меню или в терминале:

        Перед тем, как программа запустится, вам нужно будет ввести пароль потому что для ее работы нужны права администратора:


        Главное меню загрузится через несколько десятков секунд. Программе нужно время, чтобы собрать список операционных систем, установленных на компьютере:


        В контекстном меню для каждого пункта вы можете переместить его вверх или вниз, переименовать или отредактировать его конфигурацию. С конфигурацией мы будем разбираться в другой части статьи, а первые два пункта могут быть очень полезны:


        На вкладке Основные настройки вы можете выбрать пункт, который нужно загружать по умолчанию, время на протяжении которого будет показываться меню, а также параметры ядра для каждого пункта по умолчанию.


        Последняя вкладка позволяет настроить внешний вид, тут вы можете выбрать одну из доступных тем, установить разрешение, или же задать пользовательские параметры цвета, шрифтов и фоновый рисунок:



        Кроме того, нажав кнопку дополнительные параметры, вы можете настроить значения переменных /etc/default/grub, которые мы рассмотрим подробнее ниже.


        Когда настройка Grub Customizer будет завершена просто нажмите кнопку Сохранить, чтобы применить все изменения.


        Видео, где показана настройка GNU Grub в Linux с помощью Grub Customizer:

        Но это все слишком просто и позволяет сделать только базовые вещи, если же нужна более тонкая настройка загрузчика Grub, придется разбираться с ручной настройкой конфигурационных файлов. Это мы и будем рассматривать ниже.

        Настройка Grub через конфигурационные файлы

        Настройка Grub через /etc/default/grub

        Как я уже сказал, настройка загрузчика через файл /etc/default/grub, на основе которого будет автоматически создан /boot/grub/grub.cfg более желательна. Давайте рассмотрим параметры, которые вы можете здесь настроить.

        Например, можно использовать такую конфигурацию:

        Но как вы могли понять, этим способом вы не можете настроить порядок пунктов загрузки, а также некоторые другие параметры, поэтому давайте рассмотрим настройку непосредственно конфигурационного файла Grub.

        Настройка Grub через /boot/grub/grub.cfg

        Файл /etc/boot/grub/grub.cfg управляет непосредственно работой загрузчика, здесь указаны все его параметры и настройки, а также сформировано меню. Поэтому, изменяя этот файл, мы можем настроить Grub как угодно. Сначала попытаемся разобраться с синтаксисом файла. Он очень напоминает синтаксис bash и состоит из нескольких команд, которые что-то делают, загружают и настраивают.

        Команды могут быть объединены в функции или блоки с помощью инструкций if else, синтаксис которых аналогичен bash. Рассмотрим основные из этих команд:

        Это все команды, которые вам понадобятся. Но две последние нужно рассмотреть подробнее, так как они будут использоваться чаще всего.

        Команда search используется для поиска дисков и имеет такой синтаксис:

        Например, команда может выглядеть вот так:

        Вторая команда, которая нам очень понадобится, это menuentry. Она используется для создания пунктов меню, с помощью которых будут загружаться операционные системы и дистрибутивы linux. Синтаксис этой команды такой:

        menuentry имя_пункта

        Обычно, для нормальной загрузки операционной системы сначала необходимо установить корневой раздел, для этого, возможно, нужно загрузить некоторые модули, дальше нужно запустить ядро с нужными параметрами и добавить образ initrd если это требуется. Самый простой пример пункта меню:

        Теперь давайте попробуем собрать всю информацию воедино и создадим самый просто конфигурационный файл для Grub вручную:

        insmod vbe
        insmod gfxterm
        terminal_output gfxterm

        set menu_color_normal=red/black
        set menu_color_highlight=yellow/black
        set color_normal=yellow/black

        Выводы

        Настройка grub может показаться довольно сложной вещью, но если разобраться, то все вполне выполнимо. В этой статье мы рассмотрели несколько способов настройки загрузчика, для различных ситуаций, и я думаю, теперь у вас не возникнет проблем с этой программой. Если у вас остались вопросы, спрашивайте в комментариях!

        Читайте также: