
저는 CentOS 7을 사용하고 있으며 여기에 여러 개의 디스크를 연결했습니다. 내 OS, 커널, initramfs 등이 "/dev/sda"에 있고 이것이 부팅 가능한 디스크라는 것을 알고 있습니다. 하지만 grub2는 이를 어떻게 추론합니까? 연결된 모든 디스크를 하나씩 검사하나요?
답변1
기술적으로: Linux는 부팅 가능한 디스크를 찾지 못합니다. Linux가 실행될 때쯤에는 부트로더가 작업을 완료했기 때문입니다. 즉:
- Linux를 파일에서 RAM 어딘가에 복사하십시오.
- 파일의 initramfs를 RAM 어딘가에 복사합니다.
- ARM과 같은 일부 아키텍처에서는 장치 트리나 아키텍처 설명자와 같은 추가 항목을 RAM 어딘가에 복사합니다.
- Linux가 복사된 RAM의 첫 번째 위치로 제어권을 전달하면 이제 부트로더가 더 이상 활성화되지 않습니다.
현대 UEFI 펌웨어 및 U-Boot와 같은 x86이 아닌 플랫폼의 항목에는 펌웨어에 "부팅 항목"이 저장되어 있습니다. 부팅 항목에는 저장 장치와 파일 이름이 포함되어 있으며 펌웨어는 순서대로 이동하여 로드/실행됩니다. 첫 번째로 찾은 파일입니다. UEFI 설정으로 이동하여 변경하거나 OS의 유틸리티를 사용하여 UEFI NVRAM 설정을 변경하여 순서를 변경합니다.
이제 x86의 UEFI에 대한 문제는 RAM에 단일 바이너리를 로드한다는 것입니다. 그러나 일반적으로 Linux도 부팅하려면 최소한 initramfs가 필요합니다(이것이 Linux의 엄격한 요구 사항은 아니지만).
또한 역사적으로 x86에는 단순히 저장 장치의 첫 번째 섹터(BIOS 설정에 따라 결정된 순서)를 로드하고 파일을 찾거나 로드하려고 시도하지 않는 보다 원시적인 펌웨어(BIOS)가 있었습니다.
따라서 대부분의 Linux 시스템에서 UEFI가 실제로 로드하는 것(부팅 순서를 따르거나 부팅 가능한 장치를 검색하는 것)은 GRUB입니다. 이는 실제로 Linux(및 원하는 경우 다른 운영 체제)용 일반적인 부트로더 플랫폼입니다. 부팅 전의 많은 것들~해야 한다펌웨어에 있지만 여러 가지 이유가 없으며 운영 체제가 로드되기 전에 작업을 수행할 수 있는 환경을 제공합니다.
Linux를 설치할 때 설치 프로그램은 GRUB이 접근할 수 있는 구성 파일을 생성하여 GRUB를 구성하고 GRUB에 커널과 initramfs를 로드할 위치를 알려주는 항목을 GRUB 메뉴에 추가합니다. 여러 항목이 가능하고 심지어 일반적입니다. 예를 들어 데비안은 복구 커널을 위한 두 번째 메뉴 항목을 설치합니다. 이는 대략 Windows 안전 모드와 동일합니다. 그러나 이것들은 모두 Linux가 설치될 때 설치 프로그램에 의해 설정되며 UEFI가 작업을 완료한 후에 해당 옵션에 도달하게 됩니다.
(제가 U-Boot에 대해 마음에 들었던 점 중 하나는 커널과 initramfs를 직접 로드하므로 GRUB가 전혀 필요하지 않다는 점이었습니다. 하지만 이는 사용자 정의 가능한 펌웨어가 있는 ARM 장치였습니다.)
winload.exe
Windows 에는 Windows에 필요한 작업을 수행하고 선택적으로 펌웨어가 수행하지 않는 부팅 전 사전 부팅 메뉴 옵션을 제공하는 자체 "GRUB"이 있습니다 . bcdedit
그곳에서 메뉴 옵션을 변경하는 데 사용됩니다 . Vista보다 이전 버전의 Windows에서는 NTLDR을 사용했으며 C:\boot.ini 파일 IIRC를 사용하여 구성할 수 있었습니다.
Linux에는 GRUB가 필요하지 않습니다. 오랫동안 LILO(Linux Loader)라는 간단한 부트로더가 사용되었으며 일부 배포판에서는 여전히 이를 사용하고 있습니다.