Чому оновлення іноді потребують перезавантаження

Оновлення встановилось, індикатор дійшов до 100 %, і система все одно просить перезавантажитися.

Ілюстрація до статті: Чому оновлення іноді потребують перезавантаження

Оновлено:

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

Чому файли, що працюють, не можна просто замінити

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

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

  • Ядро операційної системи. Це код, який керує процесором, пам’яттю та пристроями. Його не можна вивантажити «на ходу»: новий образ ядра завантажується тільки при старті машини.
  • Драйвери пристроїв. Частина з них вбудована в ядро або тримає відкритими апаратні ресурси, які не можна безпечно передати новій версії.
  • Системні бібліотеки. Бібліотека на кшталт libc або криптографічної бібліотеки завантажена одразу сотнями процесів. Оновити файл легко; змусити всі ці процеси перезапуститися — фактично те саме, що перезавантажити систему.
  • Графічна оболонка та системні служби. Сеанс користувача, менеджер входу, служби мережі — їх перезапуск і так виглядає для користувача як перезавантаження.

Є й друга причина: заблоковані файли. У Windows файл, який виконується, не можна замінити взагалі; система планує заміну «при наступному завантаженні» і виконує її до того, як хтось встигне відкрити старий файл. У Linux і macOS відкритий файл замінити можна, але старі процеси все одно тримають старий вміст.

Чому не всі оновлення потребують перезавантаження

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

Виробники активно працюють над зменшенням кількості перезавантажень. Linux має механізми live patching (kpatch, livepatch, kGraft), які дозволяють накласти невелике виправлення на працююче ядро без перезавантаження — це використовують сервери з жорсткими вимогами до безперервності. Windows поступово вводить «гаряче» виправлення для серверних редакцій. Але такі механізми підходять лише для малих змін; велике оновлення ядра все одно потребує перезавантаження.

Чим ризиковано відкладати перезавантаження

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

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

Коли перезавантажувати, а коли можна зачекати

  • Не ігноруйте запит на перезавантаження після оновлень безпеки; заплануйте його на той самий день.
  • Використовуйте «активні години» або відкладене перезавантаження, щоб система не перезавантажувалася під час роботи, але зробила це вночі.
  • Зберігайте роботу й закривайте важливі документи перед оновленням, щоб перезавантаження не було раптовим.
  • На серверах перевіряйте, чи потрібне перезавантаження (needs-restarting, /var/run/reboot-required), і плануйте його в технічне вікно.
  • Якщо перезавантаження неприйнятні, розглядайте live patching, але розумійте його межі.

Часті запитання

Чому оновлення на телефоні завжди перезавантажує пристрій?

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

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

Так, у налаштуваннях оновлень. Але тоді відповідальність за своєчасне перезавантаження повністю лягає на вас; краще налаштувати зручний час, ніж вимкнути повністю.

Чому після перезавантаження система «оновлюється» ще кілька хвилин?

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

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

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