# 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/sda1
EFI 파일 시스템이 마운트되어 있기 때문에 어떤 설정에서도 작동하지 않는다는 것입니다.
나강하게현재 수행 중인 작업과 이유를 알기 전까지는 이 작업을 시도하지 않는 것이 좋습니다.
답변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