초기화가 삭제되면 어떻게 되나요?


22

이론적 인 질문 ...

그러나 init(에서 /sbin/init)를 제거하면 어떻게됩니까?


ln을 시도하지 마십시오 -L. 작동하지 않습니다. cp /proc/fd/1/exe /sbin/init && chmod 755 /sbin/init그래도 작동합니다. APT를 사용하여 upstart를 다시 설치하는 것은 dpkg기본적으로 사라진 것을 알 수 없으므로별로 명확 하지 않습니다. "패키지 시작은 이미 현재 버전입니다." dpkg --force-depends --force-remove-essential -r upstart먼저 할 수 있습니다.
Joshua

1
apt-get install --reinstall upstart. 또한 /proc/fd디렉토리 가 없습니다 . 그리고 방금 확인하고 ln -L /proc/1/exe /tmp/init으로 /sbin/init이름을 바꾸어 작동 합니다 /sbin/init.bak. 즉, 문제없이 읽을 수 있습니다 /tmp/init.
Ruslan

@muru OK. 그런 다음 태그 동의어를 추가하겠습니다.
Kaz Wolfe

답변:


31

부트 로더는 커널을로드하고, 커널은 init를 실행하려고 시도하지만 찾지 못하고 패닉 상태가됩니다.

그 방법은 재부팅, 부팅 매개 변수 편집, 추가 init=/bin/bash및 부팅 방법입니다. 커널은 bash를 init로 사용합니다. 이렇게하면 명령을 실행하고 시스템을 수정할 수 있습니다.

수정
커널 ( init / main.c 파일 )은 다음을 수행합니다.

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

따라서 / bin / sh (대시로 연결되는 링크)를 발견하면 init=/bin/bash부트 매개 변수 를 사용하지 않고 쉘을 수정하고 해결할 수 있습니다.


좋은 대답입니다. 커널이보다 많은 것을 검색한다는 것을 몰랐습니다 /sbin/init.
Ruslan

그리고 /bin/sh파일 이 없다면 ? 또는 /bin/bash또는 /bin/dash등? 이 모든 것을 동시에 삭제할 수 있는지 확실하지 않지만 이론적으로는 어떻게됩니까?
trysis

글쎄, 그러면 수정 라인 위의 답변의 일부인 커널 패닉을 보게 될 것 입니다. 그러나 필요한 시스템에서는 그렇게하지 마십시오. 진지하게. Virtualbox VM을 실험하고 좋은 연습을하려면 시험해보고 해결하십시오. BTW 200_success의 답변도 나쁘지 않습니다.
sмurf 2016 년

12

재부팅을 시도 할 때까지 아무 일도 일어나지 않습니다. 시스템이 실행 중이고 /sbin/init n을 실행하여 실행 수준을 전환하려고 시도하지 않는 한 시스템이 사라 졌다는 사실조차 알지 못합니다.

실제로 /sbin/init실수를 조기에 인식하고 침착성을 유지하면 삭제를 취소 할 수 없습니다. 시스템 관리자는 운영 체제를 계속 실행하면서 많은 초기 "로보 토미"복구했습니다 .

삭제를 복구하는 한 가지 방법 /sbin/initupstartAPT를 사용 하여 패키지 를 다시 설치하는 것 입니다.

복구하는 가장 큰 방법은 시스템 자체의 리소스 만 사용하는 것입니다. 유리한 점 중 하나 /sbin/init는 항상 실행 된다는 것 입니다. 따라서을 실행할 때 rm /sbin/init파일은 파일 시스템과 연결이 해제됩니다. inode 및 파일 내용은 PID 1이 종료 될 때까지 디스크와 메모리에 남아 있습니다. /sbin/init적절한 inode에서 다시 생성 하면됩니다.

가장 쉬운 방법은 그것을 달성하기입니다 :

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.