Panik üzerinde yeniden başlatmak için Linux çekirdeği nasıl erken yapılandırılır?


13

Sistemin bir panikten N saniye sonra yeniden başlatılması için çekirdek komut satırına "panic = N" koyabilirsiniz.

Ancak, önyükleme yükleyicisi bile bir oyuna girmeden önce bunu belirtmek için bir yapılandırma seçeneği var mı (varsayılan çekirdek komut satırı seçeneği dışında)? Bazı çekirdek seçenekleri olabilir mi?


Çekirdek bekçi köpeği alt sistemi aracılığıyla, belki?
Gilles 'SO- kötü olmayı bırak'

config dosyası önyükleme (grub) yapılandırma dosyasının kendisidir, çünkü önyükleme sırasında çağrılan bir parametredir ve grubun dosya sistemi takılı değilken başka bir yapılandırma dosyasından okuması beklenemez.
Nikhil Mulley

Sanırım farklı bir çekirdeğe yeniden başlamak isteyeceksiniz? Bu, bootloader'dan biraz işbirliği gerektirecek ve bu noktada, komut satırı argümanlarını kesinlikle geçebileceksiniz. Bazı önyükleyiciler, bir önyükleme başarısız olursa farklı bir çekirdeğe yeniden önyükleme yapacak şekilde ayarlanabilir (kullanıcı alanı programı önyükleyicinin başarılı olduğunu belirtiyorsa).
Gilles 'SO- kötü olmayı bırak'

Evet, farklı bir çekirdeğe önyükleme yapacağım veya çekirdeğe farklı bir rootfs yolu vereceğim. Önyükleyicinin yapılandırmasında, kullanıcı alanı başarıyla önyüklendiğinde değişen bir değişken vardır; eğer değişmezse, farklı bir şey denemeyi bilir. Önyükleyicinin yapılandırması Linux kullanıcı alanı tarafından değiştirilebildiğinden bunun için sadece çekirdek komut satırından daha fazlasını umuyordum. Bir sorun varsa, kullanıcı alanının yazmaya başlaması muhtemeldir, o zaman cihaz kapalıdır; ve bunun için bir varsayılan varsayılan yapılandırma vardır; Hala bunu alabileceğim en sağlamı arıyorum.
Shawn J. Goff

Yanıtlar:


2

Böyle bir yapılandırma seçeneği yok gibi görünüyor. Varsayılan zaman aşımı, http://www.mjmwired.net/kernel/Documentation/kernel-parameters.txt#1898'e göre "sonsuza kadar bekle" olan 0'dır .

Seçenek çekirdek / panic.c'de tanımlanır , başlangıç ​​değerini farklı bir şeye ayarlayan bir yama yazabilirsiniz.

3 saniye sonra yeniden başlatmayı sabit kodlamak için değiştirin:

int panic_timeout;

için:

int panic_timeout = 3;

Özel bir mekanizma olduğunda kaynaklarla uğraşmak
poige

19

Gönderen man proc:

/ Proc / sys / çekirdek / panik

Bu dosya panic_timeout çekirdek değişkenine okuma / yazma erişimi verir. Bu sıfırsa, çekirdek bir panik üzerinde dönecektir; sıfırdan farklıysa, çekirdeğin bu saniye sonra otomatik olarak yeniden başlatılması gerektiğini gösterir. Yazılım bekçi köpeği aygıt sürücüsünü kullandığınızda, önerilen ayar 60'tır.


Ben burada bir kullanıcı yapılandırma seçeneği değil, bir çekirdek yapılandırma seçeneği arıyorum. Özellikle, herhangi bir nedenle, kök dosya sistemini bağlayamazsa (veya başka bir nedenle, kullanıcı alanı asla gelmez), yeniden başlatmak için buna ihtiyacım var.
Shawn J. Goff

@ ShawnJ.Goff Ayrıca kullanıcı alanının gelmemesi konusunda endişeleriniz varsa, o zaman yanlış soru soruyorsunuz (çekirdek panik yapmasa bile yeniden başlatmak istiyorsunuz). Ve cevap, tanımı gereği bir bekçi köpeği biçimidir; bekçi köpeği alt sistemini etkinleştirmeniz gerekir ( /dev/watchdogbir süre dokunulmazsa yeniden başlatmayı tetikler ). Bkz Documentation/watchdog/watchdog-api.txt.
Gilles 'SO- kötü olmayı bırak

1
Evet, bir bekçim var. Sadece olabildiğince çok güvenlik ağını yerleştiriyorum.
Shawn J. Goff

Yeniden başlatma yerine kapatmak için herhangi bir yol var mı?
Ciro Santilli 事件 at 中心 法轮功 六四 事件

@ ShawnJ.Goff önyükleme yükleyicisi, kullanıcı alanı önyüklenmeden çok önce bu parametrenin iletilmesini destekler. Her neyse, cevabımı gör: unix.stackexchange.com/a/517364/6622
poige

5

Yapılandırma dosyası önyükleme (grub) yapılandırma dosyasının kendisidir, çünkü önyükleme sırasında çağrılan bir parametredir ve grubun dosya sistemi takılı değilken başka bir yapılandırma dosyasından okuması beklenemez.

Ancak, başlatılan bir ayar olan çalışma zamanı da değiştirilebilir sysctl. Yani, esas /etc/sysctl.confolarak parametre kernel.panic = 3ile güncelleme bir yapılandırma güncellemesidir.


1
grub tüm sistemlerde değildir; birlikte çalıştığım grub kullanmıyor. Önyükleyicimin yapılandırması flash belleğe kaydedilir.
Shawn J. Goff

evet, yine de .. dosya sistemini bağlayabilir ve çekirdek yapılandırma dosyasını okuyabilir mi? evet ise, işte gidiyorsunuz. Çünkü çekirdek yüklenirken çekirdek parametrelerini çekirdeğe geçiren önyükleyici.
Nikhil Mulley


3

Linux Çekirdeğinde, (3 ve üzeri sürümlerde gördüm) seçeneği var .config. CONFIG_PANIC_TIMEOUTparametre ve varsayılan olarak 0. Linux çekirdeğinin bu sürümlerinde Lekensteyn'in yanıtı da işe yarayacak. Ama bu değişken .configsadece birinden alıyor .

int panic_timeout = CONFIG_PANIC_TIMEOUT;

1

Linux çekirdeği desteği CONFIG_CMDLINE_BOOL

Oluşturma sırasında çekirdeğe önyükleme bağımsız değişkenleri belirtilmesine izin verin. Bazı sistemlerde (örn. Gömülü olanlar), çekirdek önyükleme bağımsız değişkenlerinin bir kısmını veya tamamını çekirdeğin kendisi ile sağlamak (yani, bunları sağlamak için önyükleme yükleyicisine güvenmemek) gerekir veya uygundur.

Bu "portalda" bile bazı örnekler var, örneğin;

/superuser/778826/config-cmdline-override-set-but-hardcoded-vga-boot-parameter-ignored


0

Bir yapılandırma seçeneği ekleyen bu yamayı kullanabilirsiniz .


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.