Apa yang akan terjadi jika init dihapus?

22

Hanya pertanyaan teoretis ...

Tetapi apa yang akan terjadi jika init(dalam /sbin/init) dihapus?

Kaz Wolfe
sumber
Jangan coba -L- ini tidak akan berhasil. cp /proc/fd/1/exe /sbin/init && chmod 755 /sbin/initbekerja sekalipun. Menggunakan APT untuk menginstal ulang pemula baru tidak sejelas ini dpkg, karena tidak akan tahu itu hilang secara default. "Paket pemula baru sudah di versi saat ini." Kamu bisa dpkg --force-depends --force-remove-essential -r upstartduluan.
Joshua
1
apt-get install --reinstall upstart. Juga, saya tidak punya /proc/fddirektori. Dan saya baru saja memeriksa, ln -L /proc/1/exe /tmp/initbekerja dengan /sbin/initberganti nama menjadi /sbin/init.bak, yaitu saya bisa membaca tanpa masalah /tmp/initsetelah ini.
Ruslan
@muru OK. Saya akan menambahkan sinonim tag.
Kaz Wolfe

Jawaban:

31

Boot loader akan memuat kernel, kernel akan mencoba menjalankan init, tidak menemukannya dan panik.

Jalan keluarnya adalah me-reboot, mengedit parameter boot, menambah init=/bin/bashdan boot dengan cara itu. Kernel akan menggunakan bash sebagai init. Ini akan memberi Anda kesempatan untuk menjalankan perintah dan memperbaiki sistem.

Koreksi
Rupanya kernel (file init / main.c ) tidak:

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.");

Jadi ia akan menemukan / bin / sh (yang merupakan tautan ke dasbor) dan itu akan memberi Anda shell dan kesempatan untuk memperbaikinya tanpa menggunakan init=/bin/bashparameter boot.

sмurf
sumber
Jawaban yang bagus Tidak tahu kalau kernel mencari lebih dari itu /sbin/init.
Ruslan
Dan jika tidak ada /bin/shfile? Atau /bin/bashatau /bin/dashlainnya? Tidak yakin bagaimana Anda bisa menghapus semua ini pada saat yang bersamaan, tetapi apa yang akan terjadi, secara teoritis?
trysis
Nah, maka Anda akan melihat panik kernel, bagian dari jawaban di atas baris Koreksi . Tetapi jangan lakukan itu pada sistem yang Anda butuhkan. Serius, jangan. Jika Anda ingin bereksperimen (dan ini adalah latihan yang baik) buat VM Virtualbox, pecahkan dan cobalah untuk memperbaikinya. BTW jawabannya oleh 200_success juga tidak buruk.
sмurf
12

Tidak ada yang terjadi, sampai Anda mencoba untuk reboot. Selama sistem berjalan, dan Anda tidak mencoba untuk beralih runlevel dengan menjalankan /sbin/init n , Anda bahkan tidak akan menyadari itu hilang.

Sebenarnya, penghapusan /sbin/inittidak dapat dibatalkan jika Anda menyadari kesalahan lebih awal dan tetap tenang. Administrator sistem telah pulih dari "lobotomi" yang jauh lebih jahat sembari menjaga agar sistem operasi tetap berjalan.

Salah satu cara untuk memulihkan dari penghapusan /sbin/initadalah menginstal ulang upstartpaket menggunakan APT.

Cara macho untuk memulihkan adalah dengan hanya menggunakan sumber daya pada mesin itu sendiri. Salah satu faktor yang mendukung Anda adalah yang /sbin/initselalu berjalan. Oleh karena itu, ketika Anda menjalankan rm /sbin/init, file tersebut hanya terputus dari sistem file. Isi inode dan file tetap di disk dan di memori hingga PID 1 keluar. Anda hanya perlu membuat ulang /sbin/initdari inode yang sesuai.

Cara termudah untuk mencapai itu adalah:

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
200_sukses
sumber