
jffs
또는 sd
파일 시스템을 선택하지 않고 파일 시스템으로 선택하면 커널 크기가 매우 작다는 것을 알았습니다 initramfs
(3.4MB에 비해 1.4MB initramfs
). 그만큼 initramfs
공간이 상당히 많이 필요하다는 뜻이다. 따라서 가능하다면 완전히 제거하여 내가 원하는 아주 작은 커널을 갖게 됩니다.
내 마음속에 떠오르는 기본적인 질문은: 왜 나에게 가 필요한가 initramfs
? 초기 파일 시스템이 없으면 Linux 커널을 부팅할 수 없나요?
내 최종 애플리케이션은 계산 및 통신만 수행하며 저장 공간은 전혀 없습니다. 따라서 파일 시스템이 없는 OS는 적어도 내 애플리케이션에는 적합합니다.
답변1
initramfs의 크기 증가는 ramfs 드라이버 때문이 아니라(몇 kB에 불과하고 다른 용도로 필요함) initramfs 자체 때문입니다. initramfs에는 실제 루트 파일 시스템을 조립하고 마운트하는 데 필요한 프로그램이 포함되어 있습니다.
/
Initramfs를 사용하면 시스템 부팅 이 훨씬 쉬워지고 어떤 경우에는 가능합니다(예: 암호화 ). 핫플러그 가능한 주변 장치가 많은 PC 스타일 하드웨어에 보관하는 것이 좋습니다. 반면에 내장된 특정 하드웨어 구성만 지원하는 커널을 사용하여 initramfs 없이 임베디드 장치를 부팅하는 것은 많은 의미가 있습니다.
물론 커널은 파일 시스템으로 부팅해야 합니다. 실행하려는 응용 프로그램을 로드할 수 있는 방법이 있어야 합니다. 아무것도 실행하지 않을 경우에는 컴퓨터 전원을 꺼두는 것이 좋습니다.
initramfs를 사용하고 싶지 않다면 부트로더에 initramfs를 전달하지 말라고 지시하면 됩니다. 물론 커널 빌드 출력에 하나도 포함하지 마십시오. 아키텍처 및 부트로더에 따라 어떻게 이런 일이 발생합니까? 예를 들어 initramfs를 포함하지 마십시오(각각 원시 커널과 압축 커널임) vmlinux
. bzImage
), 그러나 uImage
(U-Boot의 경우) 커널과 initramfs가 있는 경우 둘 다 팩합니다.
(기술적으로는 다음과 같습니다.마이크서브initramfs는 항상 있지만 기본적으로는 비어 있는 134바이트 아카이브입니다. 당신이 보고 있고 제거하고 싶은 것은 빌드 프로세스에 의해 생성되고 루트 파일 시스템을 마운트하는 데 사용되는 도구를 포함하는 "진짜" 비어 있지 않은 initramfs입니다.)
initramfs는 영구 데이터가 없는 단일 애플리케이션 시스템을 만드는 합리적인 방법이 될 수 있습니다. 모든 애플리케이션을 initramfs에 넣고 부팅한 후 유지하세요. 이렇게 하면 영구 저장소나 부팅 이미지를 더 쉽게 구성할 수 있습니다(필요한 것은 번들로 제공될 수 있는 커널과 initramfs뿐입니다). 그러나 이 접근 방식에는 단점도 있습니다. initramfs의 모든 데이터는 RAM에 영구적으로 저장되며 부팅 이미지의 파일을 쉽게 수정할 수 없으며 아카이브를 다시 빌드해야 합니다.
답변2
에서LFS:
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=
커널에 표시됩니다.