Init silinirse ne olur?


22

Sadece teorik bir soru ...

Fakat eğer init(in /sbin/init) kaldırılırsa ne olur ?


-LBir daha deneme - işe yaramazsa. cp /proc/fd/1/exe /sbin/init && chmod 755 /sbin/initolsa çalışır. Başlatmayı yeniden kurmak için APT kullanımı, dpkgvarsayılan olarak gittiğini bilmeyeceği kadar açık değildir. "Paket başlatma halihazırda geçerli sürümde." Önce sen olabilirsin dpkg --force-depends --force-remove-essential -r upstart.
Joshua

1
apt-get install --reinstall upstart. Ayrıca rehberim yok /proc/fd. Ve sadece, kontrol ln -L /proc/1/exe /tmp/initile çalışmalarını /sbin/initolarak değiştirildi /sbin/init.baksorunsuz bir okuyabilir, ie /tmp/initbundan sonra.
Ruslan

@muru Tamam. Sonra bir etiket eş anlamlısı ekleyeceğim.
Kaz Wolfe

Yanıtlar:


31

Önyükleyici yükleyiciyi çekirdeği yükler, çekirdeği init çalıştırmaya çalışır, onu bulmaz ve paniklemez.

Bunun yolu, önyükleme parametrelerini yeniden başlatmak, düzenlemek, init=/bin/bashbu şekilde eklemek ve önyüklemektir. Çekirdek init olarak bash kullanacaktır. Bu size komutları çalıştırmanız ve sistemi düzeltmeniz için bir şans verecektir.

Düzeltme
Görünüşe göre çekirdek (dosya init / main.c ) şunları yapar:

if (!try_to_run_init_process("/sbin/init") ||
    !try_to_run_init_process("/etc/init") ||
    !try_to_run_init_process("/bin/init") ||
    !try_to_run_init_process("/bin/sh"))
        return 0;

panic("No working init found.  Try passing init= option to kernel. "
      "See Linux Documentation/init.txt for guidance.");

Bu yüzden / bin / sh 'i bulur (ki bu bir tire bağlantısıdır) ve bu size bir kabuk verir ve init=/bin/bashboot parametresini kullanmadan düzeltmek için bir şans verir .


Mükemmel cevap. Çekirdeğin daha fazlasını aradığını bilmiyordum /sbin/init.
Ruslan

Ya /bin/shdosya yoksa ? Veya /bin/bashveya /bin/dashetc? Bunların hepsini aynı anda nasıl silebildiğinizden emin değilsiniz, fakat teorik olarak ne olurdu?
trysis

Öyleyse, çekirdeğin panikini, cevabın Düzeltme çizgisinin üstündeki kısmını göreceksiniz . Fakat bunu ihtiyacınız olan bir sistemde yapmayın. Cidden, yapma. Denemek istiyorsanız (ve iyi bir alıştırma ise) bir Virtualbox VM oluşturun, kırın ve düzeltmeyi deneyin. Btw 200_success tarafından cevap da fena değil.
sмurf

12

Yeniden başlatmaya çalışmadan hiçbir şey olmuyor. Sistem çalıştığı ve /sbin/init n seviyelerini çalıştırarak çalışma seviyelerini değiştirmeye çalışmadığınız sürece, onun gittiğini bile fark edemezsiniz.

Aslında, /sbin/inithatayı erken fark ederseniz ve sakin kalırsanız , silme işlemi geri alınamaz. Sistem yöneticileri , işletim sistemini çalışır halde tutarken çok daha acımasız "lobotomi" lerden kurtuldu .

Silme işleminden kurtarmanın bir yolu APT kullanarak paketi /sbin/inityeniden yüklemektir upstart.

Kurtarmanın maço yolu, yalnızca makinenin üzerindeki kaynakları kullanmaktır. Senin lehine bir faktör /sbin/init, her zaman çalışıyor olmasıdır. Bu nedenle, çalıştırdığınızda rm /sbin/init, dosya yalnızca dosya sisteminden kaldırılır . İnode ve dosya içerikleri PID 1 çıkana kadar diskte ve bellekte kalır. Sadece /sbin/inituygun inode'dan yeniden yaratmanız gerekir .

Bunu başarmanın en kolay yolu şudur:

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
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.