initramfs가 왜 필요한가요?

initramfs가 왜 필요한가요?

파일 시스템으로 ( 대신 ) jffs또는 를 선택하면 커널 크기가 매우 작습니다(3.4MB에 비해 1.4MB ). 이는 상당한 양의 공간이 필요하다는 것을 의미합니다. 그래서 가능하다면 완전히 제거하고 아주 작은 코어를 얻을 것입니다. 이것이 바로 제가 원하는 것입니다.sdinitramfsinitramfsinitramfs

내 마음에 떠오르는 기본적인 질문은 이것이 왜 필요한가입니다 initramfs. 초기 파일 시스템 없이 Linux 커널을 부팅할 수 없나요?

내 최종 애플리케이션은 계산과 통신만 수행하며 저장 공간은 전혀 없습니다. 따라서 파일 시스템이 없는 OS는 적어도 내 애플리케이션에는 적합합니다.

답변1

initramfs의 크기 증가는 ramfs 드라이버(몇 kB에 불과하고 어쨌든 다른 것이 필요함) 때문이 아니라 initramfs 자체 때문입니다. initramfs에는 실제 루트 파일 시스템을 조립하고 마운트하는 데 필요한 프로그램이 포함되어 있습니다.

/Initramfs를 사용하면 시스템 부팅이 더 쉬워지며 일부 경우(예: 암호화)도 가능합니다. 핫스왑 가능한 주변 장치가 많은 PC 스타일 하드웨어에 이를 유지하는 것이 좋습니다. 반면에 initramfs 없이 임베디드 장치를 부팅하는 것은 완벽하게 합리적이며 커널은 빌드된 특정 하드웨어 구성만 지원합니다.

물론 커널은 파일 시스템으로 부팅해야 합니다. 실행하려는 응용 프로그램을 로드할 수 있는 방법이 있어야 합니다. 아무 것도 실행할 계획이 없다면 기계의 전원을 끄는 것이 좋습니다.

initramfs를 사용하고 싶지 않다면 부트로더에 이를 전달하지 말라고 지시하면 됩니다. 물론 커널 빌드의 출력에도 하나를 포함하지 마십시오. 이것이 어떻게 발생하는지 아키텍처와 부트로더에 따라 다릅니다. 예를 들어 initramfs는 포함되지 vmlinux않습니다 bzImage(각각 원시 커널과 압축 커널입니다). , 그러나 uImage(U-Boot의 경우) 커널과 initramfs(있는 경우)가 모두 패키지되어 있습니다.

(기술적으로 말하자면,맥사이프항상 initramfs가 있지만 기본적으로 이는 빈 134바이트 아카이브입니다. 당신이 보고 있고 제거하고 싶은 것은 루트 파일 시스템을 마운트하기 위한 도구가 포함된 빌드 프로세스에서 생성된 "실제" 비어 있지 않은 initramfs입니다. )

initramfs는 영구 데이터가 없는 단일 응용 프로그램 시스템을 만드는 합리적인 방법입니다. 모든 응용 프로그램을 initramfs에 넣고 시작하고 유지합니다. 이를 통해 영구 저장소 또는 부팅 이미지를 더 쉽게 구성할 수 있습니다(커널과 initramfs만 필요하며 함께 번들로 묶을 수 있음). 그러나 이 접근 방식에는 단점도 있습니다. initramfs의 모든 데이터는 RAM에 영구적으로 저장되며 부팅 이미지의 파일을 쉽게 수정할 수 없으며 아카이브를 다시 작성해야 합니다.

답변2

~에서선형 FS:

initramfs의 유일한 목적은 루트 파일 시스템을 마운트하는 것입니다. initramfs는 일반 루트 파일 시스템에 있는 전체 디렉토리 세트입니다. cpio 아카이브에 번들로 포함되어 있으며 여러 압축 알고리즘 중 하나를 사용하여 압축됩니다.

...

LFS 환경에서 initramfs를 사용하는 주요 이유는 네트워크에서 rootfs 로드, LVM 논리 볼륨에서 로드, 비밀번호가 필요한 경우 암호화된 rootfs 보유 또는 rootfs를 레이블로 지정하는 네 가지입니다. 또는 편의상 UUID입니다. 다른 것은 일반적으로 커널이 올바르게 구성되지 않았음을 의미합니다.

...

대부분의 배포판에서 커널 모듈은 initramfs를 갖는 가장 큰 이유입니다. 일반적인 배포판에는 파일 시스템 유형, 디스크 레이아웃 등 알 수 없는 요소가 많이 있습니다. 어떤 면에서 이것은 시스템 기능과 레이아웃이 알려져 있고 사용자 정의 커널이 종종 구축되는 LFS의 반대입니다. 이 경우 initramfs는 거의 필요하지 않습니다.

다른 소스www.kernel.org

또한 initramfs를 사용하지 않는 라우터와 유사한 Linux 시스템이 많이 있습니다.

답변3

루트 fs에 대한 액세스를 구성하려면 일부 사용자 모드 유틸리티가 필요하므로 네트워크 부팅, lvm 또는 raid와 같은 보다 복잡한 설정에는 initramfs가 필요합니다. 디스크의 단순 일반 파티션의 경우 디스크 드라이버가 커널에 내장되어 있고 루트 매개변수가 UUID 대신 장치 경로로 지정되어 있는 한 initramfs가 필요하지 않습니다. 물론, 장치 경로는 연결하는 플러그 앤 플레이(예: USB) 장치에 따라 변경되거나 임의의 타이밍 차이에 따라 변경될 수 있습니다. 이것이 바로 거의 모든 사람이 안정성을 위해 uuid 및 initramfs를 사용하는 이유입니다.

답변4

루트 파티션이 MBR 파티션 테이블을 사용하는 디스크에 있고 영구 블록 장치 이름을 매개변수로 커널에 전달하려는 경우 root=initramfs를 사용해야 합니다. /dev/sdX이는 영구적이지 않고 PARTUUID=GPT 전용 기능이며 LABEL=부팅 UUID=초기 단계에서는 커널에 표시되지 않습니다. initramfs는 저장소 및 파일 시스템 드라이버를 로드할 수 LABEL=있으며 UUID=커널에 표시됩니다.

관련 정보