부팅시 전체 커널이 메모리에로드됩니까? RAM 디스크의 기능을 설명하는 이

초기 RAM 디스크의 기능을 설명하는 이 유명한 IBM 문서 (웹에서 자주 참조되는 것을 보았습니다)를 읽었습니다 .

나는 이것이 어떻게 작동하는지 개념화하는 데 벽을 쳤다.

문서에서 말한다

GRUB과 같은 부트 로더는로드 될 커널을 식별하고이 커널 이미지와 관련 initrd를 메모리에 복사합니다.

나는 이미 혼란스러워한다 : 그것은 전체 커널을 메모리에 복사합니까 아니면 일부에 복사합니까? 전체 커널이 메모리에 있다면 왜 초기 RAM 디스크가 필요한가?

initrd의 목적은 일반화 된 작은 커널 이미지를 가질 수 있고 커널 이미지가로드되기 전에 initrd가 올바른 모듈을 설치할 것이라고 생각했습니다. 그러나 전체 커널이 이미 메모리에 있다면 왜 initrd가 필요합니까?

그것은 또한 나를 혼란스럽게하는 또 다른 것을 제기합니다-커널에로드 된 모듈은 어디에 있습니까? 모든 커널 모듈이 initrd에 저장되어 있습니까?



답변

전체 커널은 일반적으로 initramfs요즘 과 함께 부팅시 메모리에로드됩니다 . (시스템 없이도 부팅하도록 설정할 수 initramfs있지만 데스크톱 및 서버에서는 드문 경우입니다.)

initramfs의 역할은 “진짜”파일 시스템을 마운트하고 시스템 부팅을 계속하는 데 필요한 기능을 제공하는 것입니다. 여기에는 커널 모듈과 다양한 바이너리가 포함됩니다. 적어도 udev네트워킹 이 필요하고 kmod모듈을로드하는 최소한의 바이너리가 필요 합니다.

부팅하는 것보다 나중에 모듈을 커널에로드 할 수 있으므로에 의해 커널을 특별히 준비 할 필요는 없습니다 initramfs. 그들은 어디에서나 저장할 수 있습니다 다음은 initramfs, /lib/modules실제 파일 시스템에, 당신은 모듈을 개발하는 경우 개발 트리에 …는 initramfs전용 (나머지 포함) 루트 파일 시스템을 마운트하는 데 필요한 모듈을 포함 할 필요가있다.


답변

전체 커널 (모듈은 아님)이 메모리에로드됩니다. 파일 시스템을 사용하기 전에 커널에 필요한 모듈이있는 경우 (일반적으로 파일 시스템 및 해당 장치의 드라이버를 의미 함) 해당 모듈은 initramfs (메모리에 있음)에 있으며 커널은 그 모듈을로드합니다. 다른 모듈은 나중에 파일 시스템에서로드 할 수 있습니다.


답변

최신 Linux 설정의 커널은 모듈 기반으로 구성되어 있습니다. 즉, 커널에 적절한 (부트로 RAM에로드) 커널에는 최소한의 기능 만 포함되어 있으며 나머지는 모두 모듈로 컴파일됩니다 (런타임에로드 가능). 예를 들어 부팅에 필요한 장치 나 파일 시스템이 모듈 인 경우에도이 작업을 수행하려면 initramfs커널과 함께로드됩니다 (이름에서 알 수 있듯이 부팅시 마운트 된 간단한 파일 시스템이있는 RAM 영역 임). 이 임시 파일 시스템은에 마운트되며 /시작 프로그램 및 필수 모듈을 포함합니다. 시작 initramfs이 완료되면 Linux pivot_root(8)는를 실행 하여 실제 /를 마운트하고 initramfs내용을 던집니다 .

이 복잡성의 핵심은 예를 들어 배포가 하나의 커널 (최소 커널 및 전체 모듈 세트)을 컴파일 할 수 있고 커널 설치시 initramfs대상 시스템의 하드웨어 및 설정에 맞게 조정된다는 것입니다. 이 모든 것은 “개인용 컴퓨터”의 다양한 장치 및 구성으로 인해 필요합니다.