답변:
부트 로더는 커널을로드하고, 커널은 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
.
/bin/sh
파일 이 없다면 ? 또는 /bin/bash
또는 /bin/dash
등? 이 모든 것을 동시에 삭제할 수 있는지 확실하지 않지만 이론적으로는 어떻게됩니까?
재부팅을 시도 할 때까지 아무 일도 일어나지 않습니다. 시스템이 실행 중이고 /sbin/init
n을 실행하여 실행 수준을 전환하려고 시도하지 않는 한 시스템이 사라 졌다는 사실조차 알지 못합니다.
실제로 /sbin/init
실수를 조기에 인식하고 침착성을 유지하면 삭제를 취소 할 수 없습니다. 시스템 관리자는 운영 체제를 계속 실행하면서 많은 초기 "로보 토미" 를 복구했습니다 .
삭제를 복구하는 한 가지 방법 /sbin/init
은 upstart
APT를 사용 하여 패키지 를 다시 설치하는 것 입니다.
복구하는 가장 큰 방법은 시스템 자체의 리소스 만 사용하는 것입니다. 유리한 점 중 하나 /sbin/init
는 항상 실행 된다는 것 입니다. 따라서을 실행할 때 rm /sbin/init
파일은 파일 시스템과 연결이 해제됩니다. inode 및 파일 내용은 PID 1이 종료 될 때까지 디스크와 메모리에 남아 있습니다. /sbin/init
적절한 inode에서 다시 생성 하면됩니다.
가장 쉬운 방법은 그것을 달성하기입니다 :
# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
-L
. 작동하지 않습니다.cp /proc/fd/1/exe /sbin/init && chmod 755 /sbin/init
그래도 작동합니다. APT를 사용하여 upstart를 다시 설치하는 것은dpkg
기본적으로 사라진 것을 알 수 없으므로별로 명확 하지 않습니다. "패키지 시작은 이미 현재 버전입니다."dpkg --force-depends --force-remove-essential -r upstart
먼저 할 수 있습니다.