1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
GRUB нужен, если:
- Нужно загрузить систему с особыми параметрами.
- Нужно добавить поддержку нескольких ОС в меню загрузки.
- Надо включить/выключить режим отладки ядра.
- Любите жить опасно и копаетесь в экспериментальных функциях Linux.
### Структура конфигурации GRUB:
**Основной конфиг:** `/etc/default/grub`
Этот файл — первая остановка при настройке GRUB. Открываем:
```sh
sudo nano /etc/default/grub
```
Пример стандартного конфига:
```
GRUB_DEFAULT=0GRUB_TIMEOUT=5GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"GRUB_CMDLINE_LINUX=""
```
Обозначение параметров:
- `GRUB_DEFAULT=0` — загружается первая запись в меню GRUB.
- `GRUB_TIMEOUT=5` — пауза в секундах перед автозагрузкой.
- `GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"` — параметры, которые передаются ядру (по умолчанию он загружается без лишнего вывода).
- `GRUB_CMDLINE_LINUX` — дополнительные параметры, которые работают во всех режимах.
Это далеко не все параметры. Ниже будет спойлер со всеми параметрами.
Изменения в файле **не вступят в силу сами по себе**. После редактирования надо обновить конфиг:
```sh
sudo update-grub
```
Бывает, что система не загружается, но есть время на спасение. В такие моменты жмём `e` в меню GRUB, находим строку вида:
```
linux /boot/vmlinuz-5.15.0-52-generic root=UUID=xxxx-xxxx-xxxx-xxxx ro quiet splash
```
И меняем параметры ядра прямо в загрузчике. Например, если система зависает из‑за ACPI, можно добавить:
```
acpi=off
```
После чего грузимся с помощью `Ctrl + X` или `F10`. Эти изменения действуют **только для текущей загрузки**.
Все параметры GRUB:
Если уже загрузились и хотите узнать, какие параметры применились:
```
cat /proc/cmdline
```
### Применение
Несколько вариантов применения:
Если провайдер не поддерживает IPv6, а система продолжает упрямо пытаться его использовать:
```
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ipv6.disable=1"
```
Обновляем GRUB, перезагружаем систему.
Если вам нужно больше информации при загрузке системы:
```
GRUB_CMDLINE_LINUX_DEFAULT="debug ignore_loglevel"
```
После этого получите максимально подробный лог загрузки.
Если у вас простая система, можно попробовать грузиться без `initrd`:
1. В `/etc/default/grub` добавляем:
```
GRUB_CMDLINE_LINUX_DEFAULT="noinitrd"
```
2. Пересобираем загрузочный образ:
```
sudo update-initramfs -u
```
3. Обновляем GRUB и перезагружаемся.
### Безопасность GRUB
Если не хотите, чтобы кто‑то случайно (или специально) изменил параметры ядра:
1. Создаём хеш пароля:
```
sudo grub-mkpasswd-pbkdf2
```
2. Открываем файл `/etc/grub.d/40_custom`:
```
sudo nano /etc/grub.d/40_custom
```
3. Добавляем:
```
set superusers="admin"password_pbkdf2 admin grub.pbkdf2.sha512.10000.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
```
4. Обновляем GRUB:
```
sudo update-grub
```
Теперь при попытке редактирования параметров загрузки GRUB попросит пароль.
### GRUB Modules
GRUB умеет очень многое, но многие даже не подозревают, что можно подгружать **модули** прямо в загрузчике.
Загрузка по сети через PXE:
```
insmod pxeinsmod netinsmod tftpset net_pxe_ifname=eth0set net_pxe_ip=192.168.1.100set net_pxe_server=192.168.1.1set net_pxe_gateway=192.168.1.1set root=(tftp,192.168.1.1)/
```
Можно добавить другие полезные модули:
- `lvm` — для работы с логическими томами.
- `cryptodisk` — для расшифровки зашифрованных дисков перед загрузкой.
- `usb` — если грузимся с USB‑диска.
### Кастомизация экрана загрузки GRUB
Стандартное меню GRUB скучное?
1. Кладём красивую картинку в `/boot/grub/` (лучше PNG 1024×768).
2. Открываем `/etc/default/grub` и добавляем:
```
GRUB_BACKGROUND="/boot/grub/background.png"
```
3. Обновляем конфиг:
```
sudo update-grub
```
Теперь при загрузке будет фон вместо унылого чёрного экрана.
Можно поменять цвета текста в файле `/etc/grub.d/05_debian_theme`:
```
set menu_color_normal=white/blackset menu_color_highlight=yellow/blue
```
(меняем белый текст на чёрном фоне на жёлтый текст на синем фоне)
### Если что-то пошло не так
Сломали GRUB?
1. Загружаемся с LiveCD или флешки с Linux.
2. Открываем терминал и монтируем системный раздел:
```
sudo mount /dev/sdXn /mntsudo mount --bind /dev /mnt/devsudo mount --bind /proc /mnt/procsudo mount --bind /sys /mnt/sys
```
3. Заходим в chroot‑окружение:
```
sudo chroot /mnt
```
4. Переустанавливаем GRUB:
```
grub-install /dev/sdXupdate-grub
```
5. Перезагружаемся. Система снова жива.
Если GRUB сломался окончательно, можно загрузить ядро вручную из UEFI:
1. Загружаемся в UEFI Shell или LiveCD.
2. Выполняем:
```
linux /boot/vmlinuz-5.15.0-52-generic root=/dev/sda2 roinitrd /boot/initrd.img-5.15.0-52-genericboot
```
3. Если сработало — переустанавливаем GRUB:
```
sudo grub-install /dev/sdasudo update-grub
```
|