대체 쉘에서 init를 어떻게 시작합니까?

대체 쉘에서 init를 어떻게 시작합니까?

grub을 사용하여 시스템을 시작했습니다.

리눅스 /boot/vmlinuz-4.5.0 루트=/dev

initrd /boot/initrd-4.5.0

제대로 부팅되지 않도록 루트를 dev로 설정했습니다. 물론, 이는 비지박스(Busybox) 항목으로 돌아가서, 어떻게든 마운트를 사용하고 초기화를 시작할 수 있다는 것을 온라인에서 읽었습니다. 나는 주위를 둘러보며 /sbin 아래에서 switch_root를 발견하고 그것을 사용해 보았으나 성공하지 못했습니다. 루트를 변경하고 PID 1로 초기화를 시작하는 방법은 무엇입니까? 또한 내 초기화는 System V이고 모든 것이 동일한 파티션에 있습니다.

답변1

전환하려는 루트 디렉터리를 설치해야 합니다. 나는 당신이 이미 이 작업을 수행하는 방법을 알고 있다고 가정합니다. 기본적으로 그냥mkdir /newroot; mount -r /dev/something /newroot

그럼 당신은 필요바꾸다현재 실행 중인 대체 셸입니다. 이는 PID 1(verification을 사용할 수 있음 echo $$)로 실행되며 대상 init는 해당 번호를 다시 가져와야 합니다. 따라서 exec사용하려면 내장 쉘이 필요합니다 .

switch_root전환할 루트 디렉터리와 전환 후 실행할 init 실행 파일 이름이라는 두 개 이상의 매개 변수를 허용합니다.

따라서 대체 쉘을 교체하면 됩니다.

exec switch_root /newroot /sbin/init, /sbin/init루트를 mount 로 변경한 후 PID 1을 다시 가져오고 /newroot추가 초기화를 계속할 수 있습니다.

관련 정보