예를 들어, 디스크에 외부 파일 시스템이 있고 시스템을 로드하려면 루트 파일 시스템을 마운트해야 합니다. 하지만 커널 이미지에 적절한 드라이버가 없기 때문에 그렇게 할 수 없습니다.
kernel
내가 어떻게 이해 했는지 설명하겠습니다 initrd
.
- 커널을 컴파일할 때 커널 이미지에 포함할 다른 모듈(파일)을 선택할 수 있습니다.
- 예를 들어, 내 루트 파일 시스템은 다음과 같 으며 해당 파일 시스템을
reiserfs
포함하지 않도록 커널을 구성했습니다.module
- 이 경우 커널은 그러한 파일 시스템을 마운트하는 방법을 모르므로 도움이 필요합니다. ->
initramfs
메모리에 로드됩니다. - ram fs(lib/modules 등)에서 적절한 모듈을 찾습니다.
- 이 모듈을 커널에 로드
- 이제 커널은
reiserfs
이를 마운트한 다음 점유된 메모리를 마운트 해제(해제) 할 수 있습니다.ramfs
내가 맞나요?
하지만 initramfs
대부분의 특정 드라이버가 이미 커널 이미지(단일 파일)에 있고 우리가 파일 시스템은 커널이 부팅될 때만 필요합니다. 다른 드라이버는 설치 후 파일 시스템에서 로드할 수 있습니다.
그렇다면 이것이 정말로 모든 배포에서 중요한 부분일까요?
PS 가장 일반적으로 사용되는 것은 무엇 initramfs
이며 initrd
그 이유는 무엇입니까?
답변1
모듈을 로딩하는 것 외에 할 수 있는 모든 것에서 힘이 나옵니다. 기본적으로 이는 사용자 공간을 제공하고 할 수 있는 모든 작업을 수행할 수 있는 가능성을 제공합니다.
예: 암호화된 루트 파일 시스템을 갖기 위해 initrd를 사용하는데, 이를 설정하려면 커널에 말도 안되는 코드가 필요합니다.
"기본" 섹션initrd에 관한 Wikipedia 페이지더 많은 예가 있습니다.
initramfs는 동일한 아이디어의 새로운(그러나 여전히 꽤 오래된) 구현이지만 initrd라는 이름은 초기 사용자 공간으로 사용되는 이미지를 참조하는 데 자주 사용됩니다.
방금 나에게 일어난 완전히 다른 이유는 모든 것을 포함하는 커널에 대처할 메모리가 충분하지 않은 내장 장치입니다.
답변2
아래 나열된 것처럼 initramfs를 사용하는 데는 여러 가지 이유가 있습니다.
- 별도의 /usr, /var가 필요한 경우 일부 배포판은 /의 이러한 디렉터리에 따라 달라집니다.
- /를 암호화하고 싶지만 암호화된 /boot를 가질 수 없기 때문에 /boot를 USB 스틱에 저장하려는 경우
- 커널에 무언가를 내장하는 것이 아니라 모듈로서 필요한 것만 로드하고 이것이 초기 사용자 공간에서 수행되는 경우
- /에서 dmraid를 사용하는 경우
- 보다 세부적인 제어가 필요한 경우, 즉 암호화된 원격 서버가 있는 경우/이제 암호를 해독하고 정상적으로 부팅을 계속할 수 있도록 dropbear(작은 ssh 데몬)와 함께 초기 사용자 공간에서 네트워크를 설정하는 데 필요합니다.
initramfs가 필요한 이유를 계속해서 설명할 수 있지만 결국 "switch_root..." 이전에 실행해야 하는 소프트웨어가 있다면 initramfs가 필요할 것입니다.
답변3
나는 그것이 사실이라고 생각한다현대의예를 들어 하드웨어는 50MB 코어를 신경 쓰지 않습니다. 이제 모든 것을 별도의 모듈로 로드하는 것이 그다지 중요하지 않다고 주장할 수도 있습니다.
그러나 초기 RAM 시스템에서는 커널에서 특별한 처리를 요구하지 않고도 가능한 모든 구성을 부팅할 수 있습니다. 커널 코드를 작성하는 것은 큰 일입니다. 원래의 메모리 시스템이 올바른 솔루션이었습니다. systemd
;-) 와 같이 메인 시스템과 유사한 코드를 많이 사용할 수 있습니다 .
암호화된 파일 시스템에서 부팅하는 것이 좋은 예입니다. 커널은 암호를 묻는 메시지를 표시할 필요가 없습니다.
한 가지 예모든최신 설치에서는 UUID(또는 LVM 볼륨 이름)를 사용하여 루트 파일 시스템을 찾습니다. 이는 관련 없는 파티션을 삭제할 때 모두 번호가 다시 매겨지기 때문에 부팅이 중단되기 때문에 유용합니다. 또는 컴퓨터 간에 또는 컴퓨터 간에 디스크를 이동할 때. 또는 디스크가 Live CD인 경우.
왜 램 파일 시스템이 필요한가요? 왜냐하면 우리는 펌웨어/부트로더와 긴밀하게 결합되는 것을 원하지 않기 때문입니다. 데이터를 메모리 블록으로 전달하면 작업이 완료됩니다. 우리는 시작 프로세스를 가능한 한 쉽게 만들고 싶습니다. 출시는 중요하면서도 특별한 경우입니다. 복잡한 인터페이스는 필요하지 않습니다다른특수 상황 소프트웨어. 특히펌웨어 케이스. 펌웨어는 특별한 경우이므로 우리는 나머지 시간에는 신경 쓰지 않을 것이며 아무도 알아차리지 못하는 버그로 가득 차 있을 것입니다. 그리고 펌웨어는 매우 중요하므로 이를 수정하는 것은 매우 위험합니다. 예전에는 ROM이었고 전혀 패치할 수 없었습니다.