перемикатися між різною версією ядра без перезавантаження


11

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

Тобто, якщо у мене 3.0.0-16-genericзараз працює ядро, а у мене є і старіше ядро 3.0.0-14-generic, то я, можливо, зможу перейти на 3.0.0-14-generic(інше ядро) без перезавантаження.

(Мені потрібно робити налагодження в реальному ядрі та вносити зміни, щоб це зробити, я не можу перезавантажити)

Відповіді:


8

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

Найближчий ви можете отримати процес виправлення в реальному часі за допомогою Ksplice . Він перетворює оновлення Kernel в чарівні лайфхаки, які можуть заглушити отвори в працюючому ядрі, що дозволяє вам тримати комп'ютер на невизначений час без необхідності перезавантаження. Для ваших цілей він також дозволяє повертати зміни.

Це безкоштовно для видань Ubuntu Desktop, тому ви можете пограти з ним, але вам доведеться платити передплату за сервери (там, де ця річ найбільше потрібна).


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

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


Ще одна ідея: віртуалізація. Ви можете створити нове ядро ​​і поміняти місцями у вашій машині VM та перезавантажити. Це ще потребує часу, необхідного для перезавантаження, але ви можете зробити VM набагато більше світла, ніж ваша машина розвитку (базуйте його на сервері Ubuntu, скиньте X-сервер, якщо він вам не потрібен тощо).


1
але я хочу переключитися між двома різними ядрами в каталозі / boot
coder

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

2

Як згадував Олі , ваш найкращий знімок - це, напевно, віртуалізація.

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

Зі сторінки зі сторінки ArchWikikexec :

kexec -l /boot/new-kernel --initrd=/boot/new-initrd --reuse-cmdline
kexec -e

Зауважте, що вищезазначене все одно перезапустить усі сервіси , включаючи вашу систему init, сервер відображення, мережу тощо. Однак, якщо ви використовуєте досить швидку систему init, наприклад systemd, ви можете завантажитися у ваше нове ядро ​​за 2-3 секунди, оскільки ви обходите BIOS / UEFI і завантажувач.


Аналогічний опис можна знайти на сторінці RapidReboot Ubuntu Wiki .


0

Я думаю, що ці відповіді потрібно оновити.

Існує kpatch в даний час , що є більш рідним , ніж Ksplice і ін.

Він не може змінювати структури даних в ядрі, хоча з очевидних причин, тому в основному корисний для гарячих пакетів безпеки.

Загальна проблема завжди полягає в тому, що запущені процеси все ще зберігають структуру даних ядра навколо, очікуючи, що функції ядра очікують їх і повернуть. І без того, щоб зробити ці процеси для цього, насправді неможливо дізнатися, якщо це так. Таким чином, ви не можете змінити їх, доки всі процеси, які їх використовують, не будуть запущені. Це вимагатиме також виправлення в прямому ефірі всіх цих програм.
І я навіть не згадував про зміни драйверів, коли апаратне забезпечення знаходиться в особливому стані. (Та ж проблема, що і з kexec .)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.