답변:
나는 여기서 훌륭한 설명을 발견했다 . 그러나 대답에서 이해 한 것의 짧은 형식을 시도해 보겠습니다.
더 짧은 버전
pivot_root
사용하고 위해 initramfs에 switch_root
사용됩니다.더 긴 버전
이제 위에서 언급 한 내용에 대해 자세히 설명하겠습니다.
initramfs와 initrd는 같은 목적으로 사용되지만 두 가지 차이점이 있습니다. 가장 분명한 차이점은 initrd가 램 디스크에로드된다는 것입니다. 램 디스크에 마운트 된 실제 파일 시스템 (일반적으로 ext2)으로 구성됩니다. 반면에, initramfs는 파일 시스템이 아닙니다. tmpfs로 압축 해제 된 (압축 된) cpio 아카이브 (newc 유형)입니다. 이로 인해 initramfs가 initrd보다 조금 더 최적화되어 커널 부트 프로세스에서 조금 일찍로드 될 수있는 부작용이 있습니다. 또한 커널은 미리 정의 된 램 디스크 크기에 의존하지 않고 실제로로드 된 것에 맞게 tmpfs의 크기를 조정할 수 있기 때문에 메모리의 initramfs 크기는 더 작습니다.
또 다른 부작용 차이점이 있습니다. 루트 장치 (및 장치 전환) 처리 방법. initrd는 램으로 압축 해제 된 실제 파일 시스템이므로 루트 장치는 실제로 램 디스크 여야합니다. initramfs에는 initramfs가 압축 해제 된 tmpfs가되는 커널 "rootfs"가 있습니다 (커널이 initramfs를로드하는 경우 rootfs는 단순히 root = kernel boot 매개 변수를 통해 지정된 파일 시스템 임). 이 임시 rootfs는 root = boot 매개 변수로 지정해서는 안됩니다 (연결된 장치가 없기 때문에 그렇게 할 수있는 방법이 없습니다). 이것은 initramfs를 사용할 때 여전히 실제 루트 장치를 커널로 전달할 수 있음을 의미합니다. initrd를 사용하면 실제 루트 장치가 무엇인지 처리해야합니다. 또한 "진짜"이후 initrd를 가진 루트 장치는 램 디스크이고, 커널은 하나의 실제 장치 (램 디스크)에서 다른 장치 (실제 루트)로 루트 장치를 사용해야합니다. initramfs의 경우, initramfs 공간 (tmpfs)은 실제 장치가 아니므로 커널은 실제 장치를 전환하지 않습니다. 따라서 pivot_root 명령은 initrd와 함께 사용되지만 initramfs에는 다른 명령을 사용해야합니다. Busybox는이를 위해 switch_root를 제공하고 klibc는 new_root를 제공합니다. initramfs에는 다른 명령을 사용해야합니다. Busybox는이를 위해 switch_root를 제공하고 klibc는 new_root를 제공합니다. initramfs에는 다른 명령을 사용해야합니다. Busybox는이를 위해 switch_root를 제공하고 klibc는 new_root를 제공합니다.
/
. 내 이해에서 그것은 어떤 경로가 될 수 있으며 실제 "디스크"와 관련이 없습니다.
pivot_root
과거에 initramfs에 사용switch_root
했지만 그 당시에는 존재하지 않았습니다.switch_root
의 편리한 방법이 될 것으로 보인다pivot_root
좀 더 정리도 이동 않는/proc
/sys
및/dev
등뿐 아니라 루트 자체