커널 자체에 파일 시스템 드라이버를 포함하고 대신 Initrd/Initramfs를 사용하면 어떨까요?

커널 자체에 파일 시스템 드라이버를 포함하고 대신 Initrd/Initramfs를 사용하면 어떨까요?

Linux 커널에는 대부분의 장치에서 부팅하는 데 필요한 코드가 거의 포함되어 있지 않지만 Initrd/Initramfs를 사용할 필요가 없습니다.
내가 이해한 바로는 Initrd/Initramfs의 임무는 실제로 루트 파일 시스템을 로드하기 위해 파일 시스템 드라이버를 일시적으로 제공하는 것입니다.
그렇다면 필요한 파일 시스템 드라이버를 커널 자체에 추가하는 것이 어떨까요?
우리는 결국 커널과 Initrd/Initramfs를 로드해야 합니다. 따라서 둘 다 동일한 양의 메모리를 차지하므로 하나의 이미지 파일로 통합하는 것은 어떨까요?


******업데이트**********

1. Linux 커널은 실제로 무엇으로 만들어졌습니까? 단지 vmlinuz 이미지(약 5-6MB)입니까, 아니면 로드 가능한 모듈, vmlinuz 이미지, initrd 파일 및 기타 구성 요소의 모음입니까?
2. 커널 이미지 vmlinuz의 크기(약 5-6MB)가 initrd 파일의 크기(약 18MB)보다 작은 이유는 무엇입니까? 파일 시스템 마운트용 코드만 포함된 initrd와 비교하여 커널에는 다른 많은 코드가 포함되어 있습니다.

답변1

우선, 이것은 단순한 파일 시스템 드라이버가 아닙니다. 또한 파일 시스템이 있는 모든 저장 장치의 드라이버이기도 합니다. LVM, 암호화 등을 사용하는 경우 더 많을 수 있습니다.

그럼에도 불구하고 커널에 빌드하는 것은 확실히 가능합니다. 나는 슬랙웨어에 최소한 "huge"라는 커널 옵션이 있다는 것을 알고 있습니다. 이 옵션은 일반적인 PC 하드웨어의 initramfs를 필요로 하지 않습니다.

단점은 이러한 커널에는 누구에게나 필요할 수 있는 모든 것, 즉 루트로 사용될 수 있는 모든 파일 시스템, 해당 파일 시스템을 보유할 수 있는 장치 드라이버 등이 포함되어야 한다는 것입니다. 따라서 사용하지 않는 코드가 많고 메모리가 낭비되는 부풀어 오른 커널이 됩니다.

커널 모듈로만 구축할 수 있는 드라이버도 있다고 생각하지만 이는 실제 기술적인 한계라기보다는 디자인 선택에 가깝습니다.

편집자에게 답장:

  1. 아마도 누구에게, 어떤 상황에서 물어보느냐에 따라 달라질 것입니다. 나에게 그것은 커널 공간에서 실행되는 모든 것이므로 모든 드라이버를 포함합니다. 커널 개발자는 다양한 관점을 가질 수 있으며 다양한 부분에 대해 더 많은 이름을 가질 수 있습니다.

  2. 실제로 커널 코드의 대부분은 로드 가능한 모듈과 드라이버입니다. 그들 중 일부는 꽤 큽니다. 내 시스템에서는 btrfs만 500kB로 압축되었습니다. NFS는 거의 비슷합니다. ext4는 300KB입니다. 또한 지원되는 저장 장치가 많이 있으며, 이들 중 루트 파일 시스템을 구해야 할 수도 있습니다. Linux 시스템을 검색해 보면 /lib/modules/*/kernel/drivers/알 수 있습니다.

답변2

그것은 약간의 닭과 달걀 문제입니다... 커널을 간결하게 유지하고 메모리를 절약하는(모듈이 필요할 때까지) 많은 드라이버 모듈을 만들 수 있습니다(보통 그렇게 해야 합니다). 하지만 당신은하다필요일부커널에 내장된 드라이버 - 부팅하는 모든 장치(예: CD-ROM 드라이브, HDD...), 사용되는 파일 시스템(예: iso9660, ext4...) 및 이를 지원하는 데 필요한 모든 것에 특화되어 있습니다. 예: USB 지원, SCSI 지원...). 만약 너라면아니요, 커널은 추가 드라이버 모듈이 있는 미디어 및 파일 시스템에 액세스할 수 없으므로 해당 모듈을 커널에 로드할 수 없습니다.

가지고 있는 하드웨어(HDD 유형, DVD 드라이브 유형 등)를 미리 알고 시스템에 맞게 사용자 정의 커널을 만드는 경우 이는 문제가 되지 않습니다. 실제로 가지고 있거나 필요하다고 생각하는 드라이버만 필요합니다. 부팅 시 필요한 드라이버를 커널에 포함시키기만 하면 됩니다.

그러나 배포용 설치 디스크를 만드는 경우 다음 드라이버를 포함해야 합니다.모든 것이 가능하다하드웨어 사용자가 발생할 가능성이 높습니다! 이들 모두를 커널에 포함하면 커널이 절망적으로 부풀어 오르고 저가형 시스템에서 너무 많은 RAM을 차지하게 됩니다. 모든 드라이버 모듈을 만드는 것은 로드해야 할 수도 있기 때문에 작동하지 않습니다. 해결책은 initrd!

initrd는 부팅 시 메모리에 로드되는 RAM 디스크의 이미지입니다. 필요할 수 있는 모든 드라이버에는 모듈로 포함되어 있습니다. 커널에 DVD를 읽고, DVD의 파일 시스템을 읽고, RAM 디스크를 읽는 드라이버가 포함되어 있는 한 필요에 따라 initrd에서 드라이버 모듈에 액세스하고 로드할 수 있습니다. 이는 배포판을 만드는 사람들의 문제를 해결하여 커널을 작게 만들고 커널이 실행될 수 있는 모든 하드웨어에 대한 드라이버를 포함하도록 만듭니다.

대부분의 사용자는 하드 드라이브에 Linux를 설치한 후에도 initrd-boot를 계속 사용할 것입니다. 실제로 구입한 하드웨어에 맞게 사용자 정의된 사용자 정의 커널(추가 커널 모듈 포함)을 구축할 수 있으므로 실제로는 필요하지 않습니다. initrd를 먼저 로드하는 2단계 프로세스에는 부팅 프로세스 중에 약간의 추가 시간이 필요합니다.

관련 정보