Skip to content

Лекция: Этапы загрузки Linux и практическое исследование с помощью dmesg и других инструментов


Введение

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

В этой лекции мы:

  • Разберём пошагово процесс загрузки Linux.
  • Изучим ключевые компоненты: BIOS/UEFI, загрузчик (GRUB), ядро (kernel), initramfs, init-систему (systemd).
  • Научимся использовать практические инструменты: dmesg, journalctl, systemctl, lsinitramfs, grub-editenv и другие.
  • Проведём реальные эксперименты для анализа каждого этапа.

1. Этапы загрузки Linux: обзор

Процесс загрузки Linux можно разделить на 5 основных этапов:

  1. BIOS/UEFI — инициализация оборудования.
  2. Загрузчик (Bootloader) — загрузка ядра и initramfs.
  3. Ядро (Kernel) — инициализация подсистем, монтирование корневой ФС.
  4. initramfs — временная корневая файловая система.
  5. Пользовательское пространство (init/systemd) — запуск сервисов и вход в систему.

Рассмотрим каждый этап подробно.


2. Этап 1: BIOS/UEFI

Теория

  • При включении компьютера срабатывает BIOS (на старых системах) или UEFI (на современных).
  • BIOS/UEFI выполняет POST (Power-On Self Test) — проверку оборудования.
  • Затем ищется загрузочное устройство (HDD, SSD, USB и т.д.).
  • Передаёт управление загрузчику, который находится в MBR (Master Boot Record) или EFI-разделе.

⚠️ UEFI заменяет BIOS, поддерживает GPT, безопасную загрузку (Secure Boot), быстрый старт.

Практика

Посмотреть информацию о режиме загрузки:

bash
# Проверить, загружена ли система в режиме UEFI
ls /sys/firmware/efi/efivars && echo "UEFI" || echo "BIOS"

# Или проще:
[ -d /sys/firmware/efi ] && echo "UEFI" || echo "Legacy BIOS"

3. Этап 2: Загрузчик (GRUB)

Теория

  • Наиболее распространённый загрузчик — GRUB2 (Grand Unified Bootloader).
  • GRUB читает конфигурацию (/boot/grub/grub.cfg) и предлагает выбор ОС/ядра.
  • Загружает ядро Linux (vmlinuz) и initramfs в память.
  • Передаёт управление ядру.

⚠️ В grub.cfg можно увидеть параметры ядра: root=, ro, quiet, splash.

Практика

Посмотреть конфигурацию GRUB:

bash
# Просмотр основного конфига (может быть зашифрован)
cat /boot/grub/grub.cfg | grep menuentry -A 10

# Просмотр активного ядра и параметров
cat /proc/cmdline

Пример вывода:

BOOT_IMAGE=/boot/vmlinuz-5.15.0-86-generic root=UUID=1234-5678 ro quiet splash

ro — корневая ФС монтируется только для чтения на старте.
quiet splash — скрытый режим загрузки (без логов).


4. Этап 3: Ядро (Kernel) и initramfs

Теория

  • Ядро инициализируется: настраивает память, CPU, устройства, драйверы.
  • Сначала используется initramfs — временная корневая ФС в RAM.
  • initramfs содержит мини-окружение (busybox), драйверы, модули, скрипты.
  • Цель: подготовить реальную корневую ФС (например, расшифровать LUKS, смонтировать RAID, NFS).

💡 initramfs = initial ram fs — сжатый архив (обычно initrd.img-*).

Практика

1. Посмотреть текущий initramfs:

bash
# Список образов initramfs
ls /boot/initrd.img-*

# Распакуем initramfs для анализа (временная папка)
mkdir /tmp/initramfs && cd /tmp/initramfs
zcat /boot/initrd.img-$(uname -r) | cpio -iv

⚠️ Требует прав root. Можно использовать unmkinitramfs (в Ubuntu/Debian).

2. Посмотреть, что делает initramfs при загрузке:

bash
# Просмотр событий ядра (очень важный инструмент!)
dmesg | head -30

Пример:

[    0.000000] Linux version 5.15.0-86-generic (...)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-... ro quiet splash
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] ACPI: RSDP 0x00000000BFFFC000 000024 (v02 ALASKA)
...
[    1.234567] Trying to unpack rootfs image as initramfs...

5. Этап 4: dmesg — ключевой инструмент анализа загрузки

Что такое dmesg?

  • dmesg — утилита для просмотра буфера ядра (kernel ring buffer).
  • Содержит логи от момента включения: обнаружение оборудования, ошибки, инициализация драйверов.

Практическое использование

1. Посмотреть весь лог ядра:

bash
dmesg

2. Фильтрация по времени:

bash
# Последние 20 строк
dmesg | tail -20

# С таймстампами в удобном формате
dmesg -H

3. Поиск событий initramfs:

bash
dmesg | grep -i "initramfs\|initrd"

Пример:

[    1.234567] Trying to unpack rootfs image as initramfs...
[    1.250000] Freeing initrd memory: 48484K

4. Поиск ошибок:

bash
dmesg | grep -i error
dmesg | grep -i fail

5. Фильтр по подсистеме:

bash
dmesg | grep -i "usb\|pci\|eth0\|ext4"

6. Этап 5: Пользовательское пространство и systemd

Теория

После того как ядро смонтировало корневую ФС:

  • Запускается первый процесс — PID 1.
  • В современных системах это systemd.
  • systemd читает цели (targets): multi-user.target, graphical.target.
  • Запускает сервисы: сеть, SSH, GUI, cron и т.д.

Практика

1. Посмотреть, кто PID 1:

bash
ps aux | head -1; ps aux | grep " 1 "

Вывод:

root         1  0.0  0.2 123456  7890 ?        Ss   10:00   0:01 /sbin/init

2. Проверить, какая система инициализации используется:

bash
ls -la /sbin/init
readlink /sbin/init  # часто ссылка на /lib/systemd/systemd

3. Посмотреть время загрузки:

bash
systemd-analyze

Пример:

Startup finished in 3.234s (kernel) + 4.567s (userspace) = 7.801s

4. Разбор времени по сервисам:

bash
systemd-analyze blame

Вывод:

  2.345s NetworkManager-wait-online.service
  1.234s snapd.service
  0.876s apparmor.service

5. Графическое представление:

bash
systemd-analyze plot > boot.svg
# Открыть в браузере или просмотрщике

7. Практическая работа: диагностика медленной загрузки

Задача: система загружается 15 секунд. Найти узкое место.

Шаги:

  1. Проверим общее время:

    bash
    systemd-analyze
  2. Найдём самые долгие сервисы:

    bash
    systemd-analyze blame
  3. Если видим NetworkManager-wait-online.service — это ожидание сети. Решение: отключить ожидание или настроить таймаут:

    bash
    sudo systemctl disable NetworkManager-wait-online.service
  4. Проверим наличие ошибок в dmesg:

    bash
    dmesg | grep -i "error\|fail"
  5. Проверим, не блокирует ли initramfs (например, запрос пароля LUKS):

    bash
    dmesg | grep -i "crypt\|luks"

8. Дополнительные инструменты

ИнструментНазначение
journalctl -bЛоги текущей загрузки (юзерспейс)
journalctl -kТолько логи ядра (аналог dmesg)
systemctl list-units --type=service --state=failedУпавшие сервисы
lsinitramfs /boot/initrd.img-$(uname -r)Просмотр содержимого initramfs (Debian/Ubuntu)

Пример:

bash
# Логи с момента загрузки
journalctl -b -0

# Последние 20 строк лога ядра
journalctl -k -n 20

9. Самостоятельная работа / задания

  1. Задание 1:
    Определите, в каком режиме загружена система (UEFI/BIOS). Подтвердите двумя способами.

  2. Задание 2:
    Выведите параметры командной строки ядра. Найдите, где указан root=.

  3. Задание 3:
    Найдите в dmesg момент, когда ядро обнаруживает ваш жёсткий диск. Какой у него devname?

  4. Задание 4:
    Используя systemd-analyze blame, найдите три самых долгих сервиса. Предложите, как ускорить загрузку.

  5. Задание 5 (продвинутое):
    Распакуйте initramfs и найдите скрипт init. Какие действия он выполняет до монтирования корня?


Заключение

Понимание этапов загрузки Linux — основа для диагностики, оптимизации и восстановления системы. Ключевые инструменты:

  • dmesg — для анализа ядра и оборудования.
  • systemd-analyze — для оценки времени загрузки.
  • journalctl — для логов пользовательского пространства.
  • Работа с initramfs — для глубокой отладки проблем с корневой ФС.

💡 Совет: Всегда смотрите dmesg при проблемах с загрузкой — 80% ответов там.


Дополнительные материалы


Если у вас есть доступ к реальной или виртуальной машине — попробуйте выполнить все команды из лекции. Практика — лучший способ запомнить!

Подробный разбор процесса загрузки Linux: этапы, графики и практическая диагностика


Введение

Процесс загрузки Linux — это сложная последовательность этапов, где каждый компонент взаимодействует с предыдущим и следующим. Для глубокого понимания важно не только знать теорию, но и видеть процесс визуально. В этой лекции мы:

  • Разберём загрузку пошагово с ASCII-графиками и схемами.
  • Научимся генерировать реальные графики загрузки.
  • Проведём диагностику с помощью dmesg, systemd-analyze, и других инструментов.

1. Общая схема загрузки: визуальное представление

ASCII-арт: полная последовательность

plaintext
┌─────────────┐     ┌─────────────┐     ┌───────────────────┐     ┌───────────────────┐     ┌───────────────────┐
│             │     │             │     │                   │     │                   │     │                   │
│   BIOS/     │     │   Boot-     │     │   Kernel +        │     │   systemd +       │     │   User Space      │
│   UEFI      │────▶│   loader    │────▶│   initramfs       │────▶│   init system     │────▶│   (GUI, services) │
│             │     │   (GRUB)    │     │                   │     │                   │     │                   │
└─────────────┘     └─────────────┘     └───────────────────┘     └───────────────────┘     └───────────────────┘
      │                   │                   │  ▲  │                   │  ▲  │                   │
      │                   │                   │  │  │                   │  │  │                   │
      ▼                   ▼                   ▼  │  ▼                   ▼  │  ▼                   ▼
  POST (Power-On   Загрузка ядра     Инициализация      Смена корневой   Запуск сервисов   Пользовательский
  Self Test)       и initramfs      оборудования и      ФС (pivot_root)  (network, sshd)   интерфейс
                                      драйверов

Ключевые особенности:

  • Стрелки показывают передачу управления.
  • Вертикальные линии обозначают критические точки (например, pivot_root).
  • Цвета в реальных графиках (см. раздел 5) помогают выделить этапы.

2. Этап 1: BIOS/UEFI — инициализация оборудования

Теория с деталями

  1. POST (Power-On Self Test):
    • Проверка RAM, CPU, периферии.
    • Если ошибка — звуковые сигналы или коды на экране.
  2. Поиск загрузочного устройства:
    • BIOS: проверяет MBR (первые 512 байт диска).
    • UEFI: ищет EFI-загрузчик в разделе FAT32 (обычно /boot/efi/EFI/).
  3. Передача управления загрузчику.

ASCII-схема UEFI vs BIOS

plaintext
┌───────────────────────────────┐
│           UEFI                │
├───────────────────────────────┤
│ 1. Запуск UEFI-среды          │
│ 2. Проверка Secure Boot       │
│ 3. Загрузка EFI-приложения   │
│    (например, grubx64.efi)    │
└───────────────────────────────┘

┌───────────────────────────────┐
│            BIOS               │
├───────────────────────────────┤
│ 1. Проверка MBR               │
│ 2. Выполнение кода загрузчика │
│    (первые 446 байт MBR)      │
└───────────────────────────────┘

Практика: проверка режима загрузки

bash
# Генерация отчёта о загрузке (пример вывода)
$ sudo dmidecode -t bios | grep "UEFI"
        BIOS Revision: 5.17
        Firmware Revision: 2.70
        UEFI is supported

# Визуализация через systemd-boot (если используется)
$ bootctl status

Пример вывода:

plaintext
EFI variables:
  LoaderInfo: systemd-boot 252.9-1
  LoaderConfig: /boot/loader/loader.conf
  LoaderEntries: 3 entries
  BootOrder: 0000,0001,0002
  BootNext: 0000
  BootCurrent: 0000

3. Этап 2: Загрузчик (GRUB) — выбор ядра

Как работает GRUB?

  1. Stage 1: Код из MBR (446 байт) загружает Stage 1.5.
  2. Stage 1.5: Драйверы для доступа к /boot (например, ext2.mod).
  3. Stage 2: Полноценный загрузчик с меню выбора ОС.

ASCII-график загрузки GRUB

plaintext
MBR (Stage 1)


/boot/grub/i386-pc/boot.img (Stage 1.5)


/boot/grub/grub.cfg (Stage 2)


Загрузка ядра (vmlinuz) и initramfs

Практика: анализ конфигурации GRUB

bash
# Просмотр активных параметров ядра
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-6.2.0-39-generic root=UUID=1234-5678 ro quiet splash

# Генерация графика зависимостей модулей GRUB (пример)
$ grub-editenv list | grep modules
kernel_cmdline=root=UUID=1234-5678 ro quiet splash

Как это выглядит визуально?
Если представить зависимости модулей GRUB как граф:

plaintext
core.img
├── ext2.mod (для /boot)
├── part_gpt.mod (GPT-диски)
├── normal.mod (меню)
└── linux.mod (загрузка ядра)

4. Этап 3: Ядро и initramfs — "сердце" загрузки

Последовательность действий ядра

plaintext
┌───────────────────────────────────────┐
│ 1. Распаковка ядра (vmlinuz)          │
├───────────────────────────────────────┤
│ 2. Инициализация памяти (buddy, slab) │
├───────────────────────────────────────┤
│ 3. Загрузка initramfs                 │
├───────────────────────────────────────┤
│ 4. Запуск /init из initramfs          │
├───────────────────────────────────────┤
│ 5. Подготовка реальной корневой ФС    │
└───────────────────────────────────────┘

Что происходит в initramfs?

  1. Обнаружение дисков (через udev).
  2. Активация LVM/RAID/LUKS (если требуется).
  3. Поиск корневой ФС по root= из /proc/cmdline.
  4. Смена корня (pivot_root).

ASCII-график initramfs

plaintext
initramfs

      ├── Обнаружение дисков (blkid)

      ├── Расшифровка LUKS (если root=UUID=... зашифрован)

      ├── Монтирование /dev/mapper/root_crypt

      └── pivot_root → переход на реальную корневую ФС

Практика: анализ initramfs через dmesg

bash
# Фильтрация событий initramfs
$ dmesg | grep -i "initramfs\|crypt\|pivot"

[    1.234] Trying to unpack rootfs image as initramfs...
[    1.345] Freeing initrd memory: 48484K
[    2.100] device-mapper: uevent: version 1.03.0
[    2.200] Loading /lib/modules/6.2.0-39-generic/kernel/drivers/md/raid456.ko
[    3.500] Run /scripts/local-top
[    3.600] cryptsetup: luksOpen /dev/sda2 cryptroot
[    4.100] pivot_root: new_root=/sysroot put_old=/sysroot/old

Как это интерпретировать?

  • 1.234s: Распаковка initramfs.
  • 2.200s: Загрузка модуля RAID.
  • 3.600s: Расшифровка LUKS (требует ввода пароля).
  • 4.100s: Успешный pivot_root.

5. Этап 4: systemd — управление сервисами

Временная диаграмма загрузки (systemd-analyze plot)

Как это выглядит на реальном графике?

Пример systemd-analyze plot
(Условное изображение. В реальности генерируется SVG)

Расшифровка графика:

  • Ось X: Время (секунды).
  • Цвета:
    • Синий: Ядро (kernel).
    • Зелёный: Пользовательское пространство (userspace).
    • Красный: Блокирующие сервисы (например, NetworkManager-wait-online).
  • Стрелки: Зависимости между сервисами.

Как создать такой график?

bash
# Генерация SVG-файла
$ systemd-analyze plot > boot.svg

# Для анализа в браузере
$ xdg-open boot.svg

Пример вывода systemd-analyze blame

plaintext
          3.2s NetworkManager-wait-online.service
          1.8s plymouth-quit-wait.service
          1.2s snapd.service
          0.9s udisks2.service

6. Инструменты для визуализации: от теории к практике

1. systemd-analyze — ваш лучший друг

bash
# Общее время загрузки
$ systemd-analyze
Startup finished in 2.1s (kernel) + 5.3s (userspace) = 7.4s

# График зависимостей сервисов
$ systemd-analyze critical-chain
graphical.target @5.300s
└─multi-user.target @5.300s
  └─getty.target @5.300s
    └─getty@tty1.service @5.300s
      └─system-getty.slice @5.300s
        └─system.slice @1.200s
          └─-.slice @1.200s

2. bootchart — графический анализ (устаревший, но полезный)

Установка:

bash
# Ubuntu/Debian
sudo apt install linux-tools-common bootchart

# Добавление параметра в GRUB
sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="... init=/sbin/bootchartd"

# Обновление GRUB
sudo update-grub

После перезагрузки график сохранится в /var/log/bootchart/.

3. dmesg с цветовой подсветкой

bash
# Цветной вывод с фильтрацией
$ dmesg --color=always | grep -i "error\|fail" --color=always

Пример вывода:
Цветной dmesg


7. Практическая диагностика: кейс "система не загружается"

Сценарий

Система зависает после Loading initial ramdisk.

Шаги диагностики

1. Анализ dmesg

bash
# Сохраняем логи (если система не загружается — через live-USB)
$ dmesg > dmesg.log

# Ищем ключевые ошибки
$ grep -i "fail\|error" dmesg.log
[    3.500] device-mapper: ioctl: error adding target to table
[    3.600] cryptsetup: ERROR: Device /dev/sda2 is not a valid LUKS volume

2. Визуальный анализ через systemd-analyze (если частично загружается)

bash
# Проверяем, до какого этапа дошла система
$ systemd-analyze time
Kernel: 2.1s
Initrd: 3.5s
Userspace: 0.0s (не дошли до systemd)

3. Решение проблемы

Ошибка: LUKS-том повреждён.

bash
# Попытка восстановить заголовок LUKS
sudo cryptsetup luksHeaderBackup /dev/sda2 --header-backup-file luks.header.bak

# Пересоздание initramfs с правильными модулями
sudo update-initramfs -u -k all

8. Продвинутые техники: как "видеть" каждый этап

1. Добавление verbose в GRUB

Чтобы видеть все логи ядра:

  1. Откройте /etc/default/grub.
  2. Уберите quiet splash из GRUB_CMDLINE_LINUX_DEFAULT.
  3. Обновите GRUB: sudo update-grub.

Результат:
Вместо чёрного экрана вы увидите поток логов ядра (аналог dmesg -w).

2. Трассировка загрузки через ftrace

bash
# Включение трассировки в GRUB
GRUB_CMDLINE_LINUX_DEFAULT="... trace_event=timer:start,enable"

# Анализ после загрузки
$ sudo cat /sys/kernel/debug/tracing/trace

3. График потребления ресурсов (bootchart)

Пример bootchart

  • Зелёная зона: CPU-активность.
  • Синяя зона: Дисковые операции.
  • Красная линия: Потребление памяти.

9. Самостоятельная работа: создайте свой график загрузки

Задание 1: сгенерируйте SVG через systemd-analyze

  1. Выполните: systemd-analyze plot > my_boot.svg.
  2. Откройте файл в браузере.
  3. Найдите:
    • Самый долгий сервис.
    • Момент перехода от ядра к userspace.

Задание 2: проанализируйте initramfs

  1. Распакуйте initramfs:
    bash
    mkdir /tmp/initramfs && cd /tmp/initramfs
    zcat /boot/initrd.img-$(uname -r) | cpio -idv
  2. Найдите файл /init.
  3. Откройте его в редакторе и найдите:
    • Где происходит pivot_root.
    • Какие модули загружаются первыми.

Задание 3: имитация ошибки загрузки

  1. Добавьте в GRUB параметр rd.break (остановка на этапе initramfs).
  2. Перезагрузитесь.
  3. В консоли initramfs выполните:
    bash
    mount | grep root  # Проверьте, смонтирована ли корневая ФС
    ls /dev/mapper     # Посмотрите доступные LUKS-тома

Заключение

Понимание загрузки Linux — это навык, который строится на трёх китах:

  1. Теория: знание этапов и их взаимодействия.
  2. Практика: умение читать dmesg, journalctl, генерировать графики.
  3. Визуализация: интерпретация данных через systemd-analyze plot, bootchart.

💡 Главный совет:

"Если система не загружается — сначала посмотрите dmesg | tail -50. 90% проблем там."


Полезные ресурсы с графиками

  1. systemd-analyze plot — официальная документация
  2. Bootchart — генератор графиков загрузки
  3. Linux Boot Process — интерактивная анимация

Проверьте себя:

  • Можете ли вы нарисовать схему загрузки Linux за 2 минуты?
  • Как объяснить коллеге, почему NetworkManager-wait-online замедляет загрузку?
  • Какой командой проверить, что initramfs содержит драйвер для вашего RAID-массива?

Если ответы есть — вы готовы к диагностике любой проблемы с загрузкой! 🐧

Практическая работа: Процесс загрузки Linux

Цель работы:
Изучить этапы загрузки Linux, познакомиться с ключевыми компонентами (BIOS/UEFI, загрузчик GRUB, ядро, initramfs, systemd), научиться анализировать и настраивать параметры загрузки.


Блок теории

Краткий обзор процесса загрузки Linux:

  1. BIOS/UEFI

    • Инициализация оборудования, проверка POST (Power-On Self-Test).
    • Поиск загрузочного устройства (MBR/GPT).
    • Передача управления загрузчику (например, GRUB).
  2. Загрузчик (GRUB 2)

    • Отображает меню выбора ОС.
    • Загружает ядро (vmlinuz) и образ initramfs в память.
    • Передает параметры ядра (например, quiet splash).
  3. Ядро Linux

    • Инициализирует подсистемы (память, процессы, драйверы).
    • Монтирует initramfs — временную файловую систему для подготовки реальной корневой ФС.
  4. Initramfs

    • Содержит минимальные инструменты и драйверы для доступа к корневой ФС (например, LVM, шифрование).
    • Подготавливает оборудование, монтирует корневую ФС.
  5. Системный менеджер (systemd)

    • Запускает процессы в пользовательском пространстве (сервисы, демоны).
    • Управляет зависимостями через юниты (.service, .target).
    • Передает управление сеансу пользователя (login, графическая оболочка).

Оборудование и ПО

  • ОС: Ubuntu 22.04 LTS (или любой дистрибутив с GRUB 2 и systemd).
  • Требования:
    • Доступ к терминалу с правами sudo.
    • Виртуальная машина (рекомендуется для безопасности).

Практические задания

Внимание! Все команды выполняются в терминале. Преподаватель демонстрирует шаги, студенты повторяют.


Задание 1. Анализ конфигурации GRUB

  1. Откройте терминал и посмотрите основной конфигурационный файл GRUB:

    bash
    cat /etc/default/grub

    Что ищем:

    • GRUB_TIMEOUT — время отображения меню загрузки.
    • GRUB_CMDLINE_LINUX — параметры ядра (например, quiet splash).
  2. Посмотрите сгенерированный файл загрузочного меню:

    bash
    sudo cat /boot/grub/grub.cfg | grep -A 10 "menuentry 'Ubuntu'"

    Обратите внимание:

    • Строки linux и initrd — пути к ядру и initramfs.
    • Параметры ядра (например, ro quiet splash).

Задание 2. Временное изменение параметров загрузки

  1. Перезагрузите систему:
    bash
    sudo reboot
  2. Во время старта, когда появится меню GRUB:
    • Нажмите Esc (для UEFI) или Shift (для BIOS), чтобы открыть меню.
    • Выберите строку с ядром и нажмите e для редактирования.
  3. Найдите строку, начинающуюся с linux, и добавьте в конец параметр:
    text
    systemd.unit=rescue.target
    (Это загрузит систему в режим восстановления без графического интерфейса.)
  4. Нажмите Ctrl+X для загрузки с новыми параметрами.
  5. После входа в систему проверьте текущий target:
    bash
    systemctl get-default
    Ожидаемый результат: rescue.target.

Задание 3. Анализ логов загрузки

  1. Вернитесь в обычный режим (перезагрузите систему).

  2. Просмотрите логи ядра:

    bash
    dmesg | grep -i "boot"

    Что ищем:

    • Сообщения об инициализации оборудования (например, ACPI, CPU).
  3. Проверьте время загрузки:

    bash
    systemd-analyze

    Пример вывода:

    text
    Startup finished in 8.235s (firmware) + 2.123s (loader) + 4.567s (kernel) + 10.123s (userspace) = 25.048s
  4. Узнайте, какие юниты systemd замедляют загрузку:

    bash
    systemd-analyze blame

Задание 4. Настройка времени отображения меню GRUB

  1. Откройте конфигурационный файл GRUB:
    bash
    sudo nano /etc/default/grub
  2. Измените параметр:
    text
    GRUB_TIMEOUT=10
    (Теперь меню будет отображаться 10 секунд вместо стандартных 5.)
  3. Примените изменения:
    bash
    sudo update-grub
  4. Перезагрузите систему и убедитесь, что таймаут изменился.

Вопросы для самоконтроля

  1. Какой компонент отвечает за монтирование корневой файловой системы?
  2. Для чего используется initramfs?
  3. Как проверить текущий режим работы systemd (multi-user, graphical)?
  4. Что произойдет, если удалить параметр ro из строки загрузки ядра?
  5. Как временно отключить графический интерфейс при загрузке?

Отчет по работе

Студент должен предоставить:

  1. Скриншоты вывода команд из Задания 1 и Задания 3.
  2. Ответы на 3 вопроса из блока самоконтроля.
  3. Описание изменений, внесенных в GRUB (таймаут, параметры ядра).

Методические рекомендации

  • Для преподавателя:
    • Перед работой убедитесь, что все студенты используют виртуальные машины (рекомендуется VirtualBox/Vagrant).
    • В случае ошибок при настройке GRUB: объясните, как восстановить систему через режим восстановления.
  • Для студентов:
    • Не изменяйте параметры ядра без понимания их назначения (риск неработоспособности системы).
    • Используйте команду man для изучения справки (например, man update-grub).

Важно! Эта работа помогает понять, как взаимодействуют подсистемы Linux при загрузке, и закрепляет знания, полученные на теоретическом занятии об архитектуре GNU/Linux.

Контакты: bystrovno@basealt.ru