beralih di antara versi kernel yang berbeda tanpa perlu reboot

11

Saya ingin beralih di antara versi berbeda dari kernel yang diinstal pada sistem saya tanpa reboot.

Artinya jika saya memiliki ' 3.0.0-16-generickernel saat ini berjalan dan saya memiliki kernel yang lebih tua 3.0.0-14-genericjuga di sana, maka saya mungkin dapat beralih ke 3.0.0-14-generic(kernel lain) tanpa me-reboot.

(Saya perlu melakukan debugging kernel langsung dan membuat perubahan agar saya tidak bisa reboot)

pembuat kode
sumber

Jawaban:

8

Tidak ada cara untuk menukar keluar dua kernel lengkap. Saya yakin Anda dapat memahami pentingnya kernel monolitik seperti Linux dan mengapa hal itu membuatnya tidak mungkin untuk diganti begitu saja.

Yang paling dekat Anda dapatkan adalah proses tambalan langsung menggunakan Ksplice . Itu mengubah pembaruan Kernel menjadi shims ajaib yang dapat menancapkan lubang di Kernel yang sedang berjalan, memungkinkan Anda untuk menjaga komputer tetap tanpa batas tanpa perlu reboot. Untuk keperluan Anda, itu juga memungkinkan Anda memutar kembali perubahan.

Ini gratis untuk edisi Ubuntu Desktop sehingga Anda dapat bermain-main dengannya tetapi Anda harus membayar berlangganan untuk server (di mana hal semacam ini sangat dibutuhkan).


Baru saja melihat hasil edit Anda. Ksplice mungkin tidak akan membantu jika Anda meretas dan membuat kernel sendiri secara manual untuk debugging sebagai "layanan" adalah bahwa mereka menyediakan pembaruan khusus dan mereka bukan sesuatu yang dapat Anda hasilkan sendiri.

Jika Anda hanya membuat beberapa hal terhadap kernel resmi, mungkin masih berfungsi.


Satu lagi gagasan: Virtualisasi. Anda dapat membangun kernel baru Anda dan bertukar hal-hal di VM Anda dan reboot. Masih perlu waktu untuk reboot, tetapi Anda bisa membuat VM jauh lebih ringan daripada mesin pengembangan Anda (mendasarkannya di Ubuntu Server, jatuhkan server X jika Anda tidak membutuhkannya, dll).

Oli
sumber
1
tetapi saya ingin beralih di antara dua kernel yang berbeda di direktori / boot saya
coder
1
Ya, Anda tidak akan bisa beralih antara dua kernel secara sewenang-wenang. Saya telah menambahkan suntingan lain dengan ide lain yang mungkin cocok untuk Anda.
Oli
2

Seperti yang disebutkan Oli , kesempatan terbaik Anda mungkin adalah virtualisasi.

Yang mengatakan, jika Anda mengutak-atik perangkat keras, virtualisasi mungkin tidak memotongnya untuk Anda, dalam hal ini, Anda dapat menggunakan kexecuntuk menukar kernel yang berjalan tanpa reboot penuh.

Diambil dari halaman ArchWikikexec :

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

Perhatikan bahwa hal di atas masih akan me - restart semua layanan , termasuk sistem init Anda, server tampilan, jaringan, dll. Namun, jika Anda menggunakan sistem init yang cukup cepat, seperti systemd, Anda dapat boot ke kernel baru Anda dalam 2-3 detik, karena Anda melewati BIOS / UEFI dan bootloader.


Deskripsi serupa dapat ditemukan di halaman RapidReboot Ubuntu Wiki .

Attila O.
sumber
0

Saya pikir jawaban ini perlu diperbarui.

Ada kpatch sekarang , yang lebih asli daripada ksplice et al.

Meskipun demikian, ia tidak dapat mengubah struktur data di kernel, untuk alasan yang jelas, jadi ini sangat berguna untuk hotpatch keamanan.

Masalah umum selalu adalah: Menjalankan proses masih menjaga struktur data kernel sekitar, mengharapkan fungsi kernel untuk mengharapkannya dan mengembalikannya. Dan tanpa proses-proses yang dibuat untuk itu, itu tidak benar-benar mungkin untuk mengetahui, jika itu masalahnya. Jadi, Anda tidak dapat mengubahnya, sampai semua proses yang menggunakannya, dimulai kembali. Itu akan membutuhkan tambalan langsung semua program juga.
Dan saya bahkan tidak menyebutkan perubahan driver, ketika perangkat keras dalam keadaan khusus. (Masalah yang sama dengan kexec .)

Evi1M4chine
sumber