/sbin/init가 실행 파일인가요?

/sbin/init가 실행 파일인가요?
# Mount the root filesystem.
1 .mount -o ro /dev/sda1 /mnt/root
# Boot the real thing.
2 .exec switch_root /mnt/root /sbin/init

이것은 initramfs의 /init 파일에 있는 코드 조각입니다.파푸아 뉴기니. 여기서는 rootfs가 /mnt/root에 마운트된 다음 newroot로 /mnt/root, 대상으로 /sbin/init를 사용하여 switch_root가 실행됩니다.

첫 번째 줄이 실행되면 /dev/sda1의 내용이 /mnt/root에 마운트됩니다. 나는 노력했다.

sudo mount -o ro /dev/sda1 /mnt/temp그리고 이런 메시지를 받았고,

마운트: /mnt/temp: /dev/sda1이 /boot/efi에 마운트됩니다.

그래서 시도해봤더니 cd /boot/efi이렇게 됐어요

CD: 명령을 찾을 수 없습니다

그래서 ./efi/boot 디렉토리에서 시도해 보았지만 이제 다음 메시지가 나타납니다.

bash: ./efi: 디렉토리입니다

그런 다음 /sbin/init의 내용을 보려고 했습니다.

cd /sbin/init하지만 지금은 이렇게 말합니다.

bash: cd: /sbin/init: 디렉토리가 아닙니다.

혼란스러워요. /dev/sda1 및 /mnt/root가 디렉토리인데 왜 갑자기 /sbin/init가 실행 파일이 되었습니까? 그것도 디렉토리가 아니겠습니까?

답변1

여기서 혼란은 당신이 그것이 무엇을 switch_root하는지 오해했기 때문입니다.

맨페이지에서:

NAME
       switch_root - switch to another filesystem as the root of the mount tree

SYNOPSIS
       switch_root [-hV]

       switch_root newroot init [arg...]

DESCRIPTION
       switch_root  moves  already  mounted  /proc,  /dev,  
       /sys  and  /run to newroot and makes newroot the new root
       filesystem and starts init process.

       WARNING: switch_root removes recursively all 
       files and directories on the current root filesystem.

평신도의 관점에서 이것은 다음과 같습니다.목차첫 번째 인수(귀하의 경우 /mnt/root새 루트 파일 시스템이 됨( )가 됨 /)로 지정되고 다양한 가상 파일 시스템 트리가 마운트됩니다.프로그램두 번째 인수로 지정된 내용은 new 로 실행됩니다 init.

더 중요한 것은 이 지침이 잘못된 것으로 보이며 귀하의 경우에는 /dev/sda1EFI 파일 시스템이 마운트되어 있기 때문에 어떤 설정에서도 작동하지 않는다는 것입니다.

강하게현재 수행 중인 작업과 이유를 알기 전까지는 이 작업을 시도하지 않는 것이 좋습니다.

답변2

이것매뉴얼 페이지설명하다:

SWITCH_ROOT(8)                               System Administration                                                   > SWITCH_ROOT(8)

NAME
      switch_root - switch to another filesystem as the root of the
      mount tree

SYNOPSIS
      switch_root newroot init [arg...]

DESCRIPTION
      switch_root moves already mounted /proc, /dev, /sys and /run
      to newroot and makes newroot the new root filesystem and
      starts init process.

따라서 를 실행하면 make as 를 switch_root /mnt/root /sbin/init사용 하고 일부 시스템 디렉터리를 복사한 다음 ./mnt/root///sbin/init

내 데비안 시스템에는 /sbin/init심볼릭 링크가 있습니다:

$ ls -la /sbin/init
lrwxrwxrwx 1 root root 20 Aug 17 22:28 /sbin/init -> /lib/systemd/systemd

/lib/systemd/systemd실행 파일 에 연결됩니다 .

$ ls -la /lib/systemd/systemd
-rwxr-xr-x 1 root root 1649088 Aug 17 22:28 /lib/systemd/systemd

관련 정보