yeniden başlatmadan çekirdeğin farklı sürümü arasında geçiş yapma


11

Sistemimde kurulu olan farklı çekirdek sürümleri arasında yeniden başlatma olmadan geçiş yapmak istiyorum.

Yani 3.0.0-16-genericşu anda çalışan çekirdek varsa ve ben 3.0.0-14-genericde orada eski bir çekirdek varsa, o zaman belki 3.0.0-14-genericyeniden başlatmadan (diğer çekirdek) geçmek mümkün .

(Bunu yapmak için canlı çekirdek hata ayıklama ve değişiklik yapmak gerekir, böylece yeniden başlatmak olamaz)

Yanıtlar:


8

İki tam çekirdeği değiştirmenin bir yolu yoktur. Linux gibi monolitik bir çekirdeğin önemini ve bunun neden basitçe değiştirilmesini imkansız hale getirdiğini anlayabileceğinize eminim.

Ksplice kullanarak alabileceğiniz en yakın canlı yama işlemi . Çekirdek güncellemelerini çalışan bir Çekirdeğe delik ekleyebilen büyülü dolgulara dönüştürerek bilgisayarı yeniden başlatmaya gerek kalmadan süresiz olarak tutmanızı sağlar. Amaçlarınız için, değişiklikleri geri almanıza da olanak tanır.

Ubuntu Desktop sürümleri için ücretsizdir, bu yüzden onunla oynayabilirsiniz, ancak sunucular için bir abonelik ödemek zorundasınız (bu tür şeylerin en çok ihtiyaç duyulduğu yerlerde).


Düzenlemenizi gördünüz. Ksplice, "servis" olarak hata ayıklamak için elle kendi Çekirdeklerinizi oluşturup oluşturuyorsanız yardımcı olmayacaktır.

Sadece resmi bir çekirdeğe karşı bir şeyler inşa ediyorsanız , yine de işe yarayabilir.


Bir fikir daha: Sanallaştırma. Yeni çekirdeğinizi oluşturabilir ve sanal makinenizde bir şeyler değiştirebilir ve yeniden başlatabilirsiniz. Yine de yeniden başlatılması gereken zamanı alacaktır, ancak VM'yi geliştirme makinenizden çok daha hafif hale getirebilirsiniz (Ubuntu Sunucusuna dayandırın, ihtiyacınız yoksa X sunucusunu bırakın).


1
ama / boot dizinimde iki farklı çekirdek arasında geçiş yapmak istiyorum
kodlayıcı

1
Evet, keyfi olarak iki çekirdek arasında geçiş yapamayacaksınız. Yine de sizin için işe yarayabilecek başka bir fikirle başka bir düzenleme ekledim.
Oli

3

As Oli söz, en iyi atış muhtemelen sanallaştırma olduğunu.

Bununla birlikte, donanımla uğraşıyorsanız, sanallaştırma sizin için kesmeyebilir, bu durumda kexecçalışan çekirdeği tam bir yeniden başlatma olmadan değiştirmek için kullanabilirsiniz .

Alındığı ArchWiki kexecsayfa :

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

Yukarıdakilerin başlangıç ​​sisteminiz, ekran sunucunuz, ağ iletişimi vb. Dahil olmak üzere tüm hizmetleri yeniden başlatacağını unutmayın. Ancak, yeterince hızlı bir başlangıç ​​sistemi kullanıyorsanız, systemd2-3 saniye içinde yeni çekirdeğinize önyükleme yapabilirsiniz. BIOS / UEFI ve önyükleyiciyi atlıyorsunuz.


Benzer bir açıklama RapidReboot Ubuntu Wiki sayfasında bulunabilir .


1

Bu cevapların güncellenmesi gerektiğini düşünüyorum.

Orada kpatch artık daha doğal olan, Ksplice ve diğ.

Çekirdek veri yapılarını açık nedenlerle değiştiremez, bu nedenle çoğunlukla güvenlik hotpatch'ları için yararlıdır.

Genel sorun her zaman: Çalışan süreçler çekirdek veri yapılarını hala koruyarak çekirdek işlevlerinin onları beklemelerini ve geri vermelerini bekler. Ve bu süreçler yapılmadan, durumun böyle olup olmadığını bilmek gerçekten mümkün değildir. Dolayısıyla, bunları kullanan tüm işlemler yeniden başlatılıncaya kadar bunları değiştiremezsiniz. Tüm bu programları da canlı düzeltme eki gerektirir.
Donanım özel durumdayken sürücü değişikliklerinden bile bahsetmedim. ( Kexec ile aynı problem .)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.