przełączaj się między różnymi wersjami jądra bez restartu


11

Chcę przełączać się między różnymi wersjami jądra zainstalowanymi w moim systemie bez ponownego uruchamiania.

To znaczy, jeśli mam 3.0.0-16-genericobecnie uruchomione jądro i mam 3.0.0-14-generictam również starsze jądro , być może będę w stanie przełączyć się na 3.0.0-14-generic(inne jądro) bez ponownego uruchamiania.

(Muszę przeprowadzać debugowanie jądra na żywo i wprowadzać zmiany, więc w tym celu nie mogę zrestartować się)

Odpowiedzi:


8

Nie ma możliwości zamiany dwóch kompletnych jąder. Jestem pewien, że możesz zrozumieć znaczenie monolitycznego jądra, takiego jak Linux, i dlaczego nie można tego po prostu zastąpić.

Najbliżej można uzyskać proces łatania na żywo za pomocą Ksplice . Przekształca aktualizacje jądra w magiczne podkładki, które mogą zaślepiać dziury w działającym jądrze, pozwalając na utrzymanie komputera w nieskończoność bez konieczności ponownego uruchamiania. Do twoich celów pozwala także wycofać zmiany.

Jest darmowy dla wersji Ubuntu Desktop, więc możesz się nim bawić, ale musisz zapłacić abonament za serwery (tam, gdzie tego typu rzeczy są najbardziej potrzebne).


Właśnie zobaczyłem twoją edycję. Ksplice prawdopodobnie nie pomoże, jeśli ręcznie hakujesz i budujesz własne jądra do debugowania, ponieważ „usługa” polega na tym, że zapewniają one specjalne aktualizacje i nie są czymś, co możesz wygenerować samodzielnie.

Jeśli budujesz coś na podstawie oficjalnego jądra, może nadal działać.


Jeszcze jeden pomysł: wirtualizacja. Możesz zbudować nowe jądro i wymieniać rzeczy na maszynie wirtualnej i restartować. Ponowne uruchomienie zajmie trochę czasu, ale możesz zrobić maszynę wirtualną o wiele lżejszą niż twoja maszyna programistyczna (oprzyj ją na Ubuntu Server, upuść serwer X, jeśli go nie potrzebujesz itp.).


1
ale chcę przełączać się między dwoma różnymi jądrami w moim katalogu / boot
programista

1
Tak, nie będziesz w stanie arbitralnie przełączać się między dwoma jądrami. Dodałem kolejną edycję z innym pomysłem, który może ci się przydać.
Oli

2

Jak wspomniał Oli , twoim najlepszym strzałem jest prawdopodobnie wirtualizacja.

To powiedziawszy, jeśli majstrujesz przy sprzęcie, wirtualizacja może cię nie wyciąć, w takim przypadku możesz użyć kexecdo zamiany działającego jądra bez pełnego restartu.

Zrobione z ArchWiki kexecstronie :

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

Zauważ, że powyższe spowoduje ponowne uruchomienie wszystkich usług , w tym systemu init, serwera wyświetlacza, sieci itp. Jednak jeśli używasz wystarczająco szybkiego systemu init systemd, możesz na przykład uruchomić się z nowym jądrem w ciągu 2-3 sekund, ponieważ omijasz BIOS / UEFI i bootloader.


Podobny opis można znaleźć na stronie Wiki RapidReboot Ubuntu .


0

Myślę, że te odpowiedzi wymagają aktualizacji.

Jest kpatch teraz , który jest więcej niż natywna ksplice et al.

Jednak z oczywistych powodów nie może zmieniać wewnętrznych struktur jądra, więc jest to głównie przydatne w hotspotach bezpieczeństwa.

Ogólny problem zawsze brzmi: uruchomione procesy nadal utrzymują struktury danych jądra, oczekując, że funkcje jądra będą ich oczekiwać i zwrócą. I bez tych procesów nie można naprawdę wiedzieć, czy tak jest. Nie można ich więc zmienić, dopóki wszystkie procesy, które ich używają, nie zostaną ponownie uruchomione. Wymagałoby to również łatania na żywo wszystkich tych programów.
I nawet nie wspominałem o zmianach sterowników, kiedy sprzęt jest w specjalnym stanie. (Ten sam problem, co w przypadku kexec .)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.