저는 Linux 부팅 프로세스를 이해하려고 노력하고 있는데 많은 문서를 읽은 후에도 여전히 이해하지 못하는 것이 하나 있습니다.
기본적으로 BIOS -> Grub MBR -> Grub CONF -> 커널...
grubconf는 다음과 같습니다
title CentOS (2.6.32-358.2.1.el6.i686)
root (hd0,0)
kernel /vmlinuz-2.6.32-358.2.1.el6.i686 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-358.2.1.el6.i686.img
따라서 문서와 내가 읽은 게시물에 대한 나의 이해를 바탕으로 커널은 루트 파일 시스템으로 initramfs와 함께 로드되고 마운트됩니다. 그런 다음 init가 실행되어 시스템을 시작하고 실행하기 위한 일련의 다양한 작업을 수행합니다.
내 질문은: 커널은 어떻게 로드됩니까?
내 말은, 커널이 /boot/vmlinuz-2.6.32-358.2.1.el6.i686
내 장치(hd0,0)에 있기 때문에 액세스할 수 있도록 먼저 파일 시스템을 마운트해야 한다는 것입니다.
(내 생각으로는) Grub이 hd0,0 파티션을 마운트하는 경우 먼저 initramfs를 사용하여 Pivot_root를 수행한 다음 커널 매개변수로 지정된 실제 root=fs를 사용하여 또 다른 Pivot_root를 수행합니까?
이 모든 것이 어떻게 함께 작동하는지 더 잘 이해하는 데 도움이 될 수 있는 모든 설명/링크를 환영합니다.
답변1
Grub에는 자체 파일 시스템 드라이버가 있습니다. 리눅스를 사용하지 않습니다. Grub은 다음 명령에 따라 커널과 initrd를 메모리에 로드합니다.Linux 커널 부팅 프로토콜. 커널의 일부는 미리 정의된 주소에 로드되며 Grub은 커널이 나머지를 찾을 수 있는 위치를 알 수 있도록 일부 매개변수를 설정합니다.
커널이 부팅되면 자체 드라이버를 사용하여 루트 파티션을 설치합니다(현재 모듈이 없기 때문에 드라이버는 모듈이 될 수 없습니다). 루트 파티션은 다음과 같습니다.initrd,initramfs또는 (initramfs 또는 initrd가 없는 경우) root
명령줄 인수( root
또는 인수가 없는 경우 컴파일된 기본값)로 표시된 블록 장치입니다.
답변2
grub이 하는 일은 액세스 /boot
(읽기 전용이면 충분하며 grub은 여기에서 전체 파일 시스템 처리가 필요하지 않음)에서 관련 파일을 가져오는 것뿐입니다. 커널과 initramfs를 메모리에 로드하고 새로 로드된 커널에 제어권을 넘겨줍니다.
새로 로드된 커널은 init
initramfs에서 실행되고 결국 pivot_root
완료됩니다 /
.