Налаштування GRUB і параметрів ядра для production-серверів

Збій завантаження бойового сервера зупиняє роботу цілого напряму, а відновлення затягується на години. Ми налаштовуємо GRUB і параметри ядра під ключ: переводимо завантаження в керований стан, перевіряємо сценарії відкату й передаємо команді готові конфігурації. Час на планові зміни скорочується в рази, а ризик зупинки сервісу — мінімальний.
Часті запитання

Налаштування GRUB: де ламається завантаження продакшн-серверів

Найпоширеніша історія: сервер перезавантажується після планового оновлення ядра — і замість завантаження потрапляє в аварійну консоль.

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

Завантажувач не повідомляє, що саме йому не подобається, — він просто зупиняється, і далі інженер відновлює систему вручну, з пам’яті, вночі.

Другий тип збою — не з оновленням, а з обладнанням. Після перенесення диска, заміни контролера або клонування розділу завантажувач втрачає кореневий розділ: запис указує на старий ідентифікатор, а не на поточний.

Сервер фізично справний, дані на місці, але він недоступний, і підняти його без ручної правки конфігурації завантажувача неможливо.

Схожа ситуація — коли параметри ядра налаштовані на живому сервері багато місяців тому: ніхто не пам’ятає, звідки взялися значення, яка частина з них потрібна для роботи системи, а яка залишилася від старого завдання.

Відновити таке середовище на новому вузлі з пам’яті не виходить — відтворюється лише те, що записано.

Окрема ціна цих збоїв — час і передбачуваність. Поки сервер в аварійній консолі, він недоступний повністю: сервіс на ньому не відповідає, а черговий шукає інструкцію, яку писав хтось інший.

Кожна така історія закінчується однаково: ручне відновлення завантаження, яке тримається на досвіді конкретного інженера, а не на перевірюваній процедурі. Нижче розбираємо, як це закривається: що саме ламається, чому і як зробити завантаження та параметри ядра відтворюваними.

Що дає кероване завантаження та параметри ядра

Передбачуване перезавантаження

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

Час відновлення — хвилини замість годин

Якщо вузол не піднімається після правки, черговий завантажується з попереднього профілю і повертає сервіс. Час відновлення після збою падає з годин діагностики біля консолі до кількох хвилин, простій сервісу обмежується одним циклом перезавантаження.

Зникає клас відмов через розходження налаштувань

Ліміти дескрипторів, поведінку пам’яті, роботу мережевих черг описуємо в одному шаблоні й розкочуємо на весь парк машин. Розбіжність налаштувань між серверами перестає бути джерелом «плаваючих» відмов, які відтворюються лише на частині вузлів.

Зміни застосовуються повторювано, відкат — однією командою

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

Режими застосування параметрів ядра: порівняння підходів

Параметри ядра застосовуються один раз — на етапі завантаження, і помилка в рядку завантажувача коштує вузла: він не піднімається або втрачає мережу, а доступ залишається лише через консоль.

Тому вибір режиму застосування — це насамперед вибір способу відкотитися, а вже потім питання зручності.

Нижче — п’ять підходів, між якими реально обирають. Вони не взаємовиключні: ручна правка живе на стенді, фрагменти — на постійних налаштуваннях, шаблони та профілі — на парку.

Варіант Коли підходить Обмеження
Правка основного конфігураційного файлу завантажувача Одиночний сервер, разове налагодження Перезаписується генератором конфігурації, немає історії змін і перевірки, правки розходяться між вузлами
Окремий файл-фрагмент із параметрами Постійні параметри для всіх ядер на вузлі Виправданий на невеликій кількості вузлів, інакше конфігурації розходяться; важливий порядок підключення фрагментів
Декларативні шаблони з ролями керування конфігурацією Парк серверів, вимога відтворюваності Потрібна інфраструктура керування; шаблон спочатку перевіряють на одному вузлі, інакше помилка йде на всі
Набір завантажувальних профілів Різні режими на одному обладнанні: робочий, налагоджувальний, ізольований Профілі з часом розходяться; перемикання потребує перезавантаження та регламенту
Мережеве завантаження парку серверів із резервним завантажувальним записом Масове розгортання та відновлення вузлів Залежність від мережі та служби завантаження; образи й профілі потрібно версіонувати

Як відбувається впровадження налаштування GRUB: від аудиту до передачі

Завантажувач і параметри ядра проявляються лише після перезавантаження: помилка в конфігурації перетворює плановий перезапуск на недоступний вузол. Тому йдемо кроками, і на кожному є перевірюваний результат і точка повернення.

  1. Аудит поточного завантаження. Інвентаризація парку: версії ядра та завантажувача, де лежать налаштування — локально чи в системі керування конфігурацією, які параметри перевизначено вручну. Окремо позначаємо вузли з шифруванням і програмним RAID — там порядок завантаження нестандартний.
  2. Схема змін. Фіксуємо цільові параметри та обґрунтування кожного: таймаут меню, набір ядер для відкату, керування пам’яттю, планувальник введення-виведення, вимкнення зайвих модулів.
  3. Тестовий стенд. Копія конфігурації на тій самій версії ядра: застосовуємо правки, перезавантажуємо, перевіряємо, що сервіси піднялися штатно. Тут же відпрацьовуємо повернення до попереднього ядра з меню.
  4. Вікно робіт. Погоджуємо вікно й застосовуємо по одному вузлу: виведення з балансування, правка, перезавантаження, повернення в роботу. Наступний вузол — лише після того, як попередній стабільно віддає трафік.
  5. Контрольне перезавантаження. Дивимося не «чи завантажилося», а конкретику: чи застосувалися параметри, у якому стані сервіси, чи не піднялися зайві модулі. Розбіжність — стоп і розбір.
  6. План відкату. Копії конфігурації поруч із робочими, попереднє ядро в меню, доступ через консоль керування. Відкат — правка й перезавантаження, без перескладання вузла.
  7. Приймання та передача. Конфігурація йде в систему керування, щоб нові вузли отримували її автоматично; команда замовника отримує інструкцію та чек-лист перевірки.

Що залишається в команди: конфігурації, схеми та регламенти

Після робіт у команди залишається не лише налаштований вузол, а й повний комплект артефактів, за яким наступна правка завантажувача робиться без археології.

Жоден із них не є «документацією заради документації»: кожен закриває конкретний клас збоїв — невдале оновлення ядра, неправильний параметр, втрачений доступ під час перезавантаження.

  • Файли конфігурації завантажувача та параметрів ядра — порядково з коментарями, що задає кожен параметр і які в нього побічні ефекти на пам’ять, мережу та поведінку під час збою.
  • Схема завантаження сервера: розмітка розділів, точки монтування, порядок монтування та місце, де лежить завантажувальний розділ, — щоб правка одного рядка не повела систему в аварійний режим.
  • Набір завантажувальних профілів: штатний, діагностичний із мінімальним набором підсистем і безпечний із вимкненими змінами — три варіанти на випадок, коли штатний не стартує.
  • Шаблони керування конфігурацією: параметри винесено в керовані описи, правки йдуть через рев’ю і розкочуються однаково на всі вузли, а не руками по одному.
  • Регламент змін: обов’язкова перевірка на тестовому вузлі, вікно застосування, фіксація попереднього стану та заздалегідь прописаний відкат до перезавантаження.
  • Документація з відновлення: покроковий сценарій підняття вузла з нуля, розбір типових помилок завантаження та порядок дій, якщо доступ втрачено.
  • Матриця доступу: хто має право правити параметри ядра, хто лише завантажувальні профілі, і як обмежено прямий доступ до завантажувача на production-вузлах.
  • Набір перевірок після застосування: завантаження, коректність монтування, фактичні значення параметрів ядра та доступність сервісів — фіксується звіт по кожному вузлу.

Кейс: відновлення після збою завантаження без втрати даних

До: аварійний режим після планового оновлення ядра

Парк із 60+ серверів на Supermicro, ядро оновлювали раз на квартал за єдиним регламентом. Приблизно кожна п’ята машина після перезавантаження не піднімалася: завантажувач вибирав не той образ, а initramfs не збирався під нове ядро — сервер потрапляв в аварійний режим без мережі.

Відновлення однієї машини займало від 40 хвилин до двох годин: доступ до консолі, ручний вибір ядра в меню, відкат пакета. Простій сервісу на цій ділянці — до 1,5 години, причому частина відмов припадала на нічні вікна, коли інженера поруч немає.

Що змінили

Перевели завантаження на явні профілі: закріпили номер запису за замовчуванням замість пошуку «першого доступного» образу, задали таймаут очікування меню й залишили попереднє ядро як робочу точку відкату.

Узгодили initramfs із фактичним набором модулів і кореневим розділом, додали перевірку конфігурації перед перезавантаженням — помилка виявляється до вікна, а не під час.

Окремий профіль завели для машин із шифрованим коренем і програмним RAID: саме там збої проявлялися найчастіше.

Результат

Метрики до та після: частка серверів, що не піднялися після оновлення ядра, знизилася з 20% до нуля за два квартали спостережень; час простою на інцидент — з 40–110 хвилин до 3–5 хвилин завдяки поверненню на попереднє ядро прямо з меню. Відмовостійкість завантаження перестала залежати від того, чи є інженер на майданчику.

Правка на місці чи декларативне керування конфігурацією?

Правка на місці виграє, коли сервер один, а параметр потрібен один: відкрити конфіг завантажувача, додати рядок, перезібрати завантажувальний запис, перезавантажитися. На одній машині це хвилини роботи й жодної інфраструктури навколо. Питання в тому, що відбувається, коли таких машин десятки і правок було не одна.

Параметри ядра та завантажувача — зона, яку регулярно переписують пакетні оновлення.

Під час встановлення нової версії ядра інсталятор кладе поруч свіжий конфіг, і ручні рядки опиняються у файлі, який система більше не читає: сервер завантажується, але вже з іншими параметрами, і дізнаються про це під час першої аварії.

Далі — дрейф між машинами, коли однакові на вигляд вузли поводяться по-різному, і повна відсутність перевірюваності змін: з історії видно, що хтось заходив, але не видно, що саме і навіщо змінювалося.

Декларативне керування перевертає логіку: параметри описуються шаблоном у ролі, роль застосовується до всього парку серверів, а стан вузла приводиться до описаного під час кожного прогону.

Тут і з’являється Ansible — один шаблон на групу хостів закриває повторюваність налаштувань, зміна проходить перевірку перед викаткою, а відкат зводиться до відкату шаблону й повторного застосування ролі.

Ціна — потрібно один раз описати ролі й тримати парк у єдиному стані, включно з порядком перезавантажень.

Розумне поєднання виглядає так: налагодження й добір параметрів ідуть на одному сервері вручну, а щойно значення підтвердило себе — воно переноситься в шаблон ролі й розкочується на решту.

Аварійний доступ на місці залишається, але з правилом: будь-яка ручна правка закінчується комітом у шаблон, інакше дрейф повертається на наступному оновленні пакетів.

Якщо машин одиниці й вони не пов’язані спільним завданням — правка на місці дешевша. Якщо це парк, де важливі відтворюваність, єдиний стан і зрозуміла історія змін, — лише декларативно, з ручною правкою як тимчасовим інструментом.

Технічні сумніви: оновлення, відмовостійкість, відкат

Правки завантажувача й параметрів ядра відрізняються від звичайних змін тим, що ціна помилки проявляється до старту системи — машина не виходить на зв’язок.

Тому конфігурація GRUB зберігається в системі контролю версій, а права доступу до неї обмежені суперкористувачем: застосунок не повинен мати можливості переписати параметри завантаження.

Що буде, якщо сервер не завантажиться після правки параметрів ядра?

У меню завантаження залишається попередній робочий набір, а конфігурація — в історії змін. Відкат — одне перезавантаження й повернення файлу з репозиторію; доступ до консолі керування тримаємо окремо від мережі.

Чи потрібне перезавантаження сервера?

Командний рядок ядра та правила складання масивів читаються лише під час старту. Такі правки йдуть вікном: спочатку одна машина, потім решта групами.

Чи можна застосувати налаштування лише на частині парку?

Так: конфігурація зберігається шаблоном зі змінними за групами ролей, тому бази даних і вузли застосунків отримують різні параметри. Розкатка йде хвилями з перевіркою метрик завантаження між ними.

Як зміни переживуть оновлення ядра?

Параметри задаються в конфігурації завантажувача, а не в окремому пункті меню. Під час встановлення нового ядра підсумковий файл перезбирається, і нова гілка успадковує ті самі параметри — перевіряємо це до розкатки пакетів.

Як налаштування працюють із програмним RAID і шифруванням диска?

Критичний порядок: збирається масив, розблоковується шифрований том, потім керування передається кореневій системі. Параметри цих кроків лежать у завантажувальному образі — після правок перезбираємо його й перевіряємо на стенді.

Обговорімо ваше завдання: з чого починається робота

Розкажіть, який парк серверів потрібно перевести на кероване завантаження, які ядра та завантажувачі використовуються і чи є вимоги щодо шифрування або програмного RAID.

Ми розберемо поточну конфігурацію, запропонуємо схему з перевірюваними точками відкату та склад артефактів, які залишаться у вашої команди. Обсяг і терміни робіт визначаються після аудиту й узгоджуються індивідуально.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139