Điều gì sẽ xảy ra nếu init bị xóa?


22

Chỉ là một câu hỏi lý thuyết ...

Nhưng điều gì sẽ xảy ra nếu init(trong /sbin/init) sẽ bị xóa?


Đừng thử ln -L- nó sẽ không hoạt động. cp /proc/fd/1/exe /sbin/init && chmod 755 /sbin/inithoạt động mặc dù. Sử dụng APT để cài đặt lại khởi động không rõ ràng như vậy dpkg, vì nó sẽ không biết rằng nó đã đi theo mặc định. "Gói khởi động đã có ở phiên bản hiện tại." Bạn có thể dpkg --force-depends --force-remove-essential -r upstartđầu tiên.
Joshua

1
apt-get install --reinstall upstart. Ngoài ra, tôi không có /proc/fdthư mục. Và tôi chỉ kiểm tra, ln -L /proc/1/exe /tmp/initlàm việc với /sbin/inittên được đổi thành /sbin/init.bak, tức là tôi có thể đọc mà không gặp vấn đề gì /tmp/initsau việc này.
Ruslan

@muru OK. Tôi sẽ thêm một từ đồng nghĩa thẻ sau đó.
Kaz Wolfe

Câu trả lời:


31

Trình tải khởi động sẽ tải kernel, kernel sẽ cố chạy init, không tìm thấy nó và hoảng loạn.

Cách thoát khỏi nó là khởi động lại, chỉnh sửa các tham số khởi động, thêm init=/bin/bashvà khởi động theo cách đó. Nhân sẽ sử dụng bash làm init. Điều này sẽ cung cấp cho bạn một cơ hội để chạy các lệnh và sửa chữa hệ thống.

Sửa lỗi
Rõ ràng kernel (file init / main.c ) không:

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

Vì vậy, nó sẽ tìm / bin / sh (là một liên kết đến dấu gạch ngang) và điều đó sẽ cung cấp cho bạn một vỏ và cơ hội để sửa nó mà không cần sử dụng init=/bin/bashtham số khởi động.


Câu trả lời chính xác. Không biết rằng kernel tìm kiếm cái gì đó nhiều hơn /sbin/init.
Ruslan

Và nếu không có /bin/shtập tin? Hay /bin/bashhay /bin/dashv.v? Không chắc chắn làm thế nào bạn có thể xóa tất cả những thứ này cùng một lúc, nhưng về mặt lý thuyết thì điều gì sẽ xảy ra?
phân tích

Chà, sau đó bạn sẽ thấy hạt nhân hoảng loạn, một phần của câu trả lời phía trên dòng Correction . Nhưng đừng làm điều đó trên một hệ thống bạn cần. Nghiêm túc, đừng. Nếu bạn muốn thử nghiệm (và đó là một bài tập tốt) hãy tạo một Virtualbox VM, phá vỡ nó và cố gắng sửa nó. BTW câu trả lời của 200_success cũng không tệ.
surfurf

12

Không có gì xảy ra, cho đến khi bạn cố gắng khởi động lại. Miễn là hệ thống đang chạy và bạn không thử chuyển đổi đường băng bằng cách chạy /sbin/init n , bạn thậm chí sẽ không nhận ra nó đã biến mất.

Trên thực tế, việc xóa /sbin/initlà không thể xóa bỏ nếu bạn nhận ra sai lầm sớm và giữ bình tĩnh. Các quản trị viên hệ thống đã phục hồi từ các "lobotomies" khó chịu hơn nhiều trong khi vẫn duy trì hệ điều hành.

Một cách để phục hồi sau khi xóa /sbin/initlà cài đặt lại upstartgói bằng APT.

Cách phục hồi cơ học là chỉ sử dụng các tài nguyên trên máy. Một yếu tố có lợi cho bạn /sbin/initlà luôn luôn chạy. Do đó, khi bạn chạy rm /sbin/init, tệp chỉ được hủy liên kết khỏi hệ thống tệp. Các nội dung inode và tập tin vẫn còn trên đĩa và trong bộ nhớ cho đến khi thoát 1. Bạn chỉ cần tạo lại /sbin/inittừ inode thích hợp.

Các cách đơn giản nhất để thực hiện điều đó là:

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.