하드 드라이브에서 grub 부트로더의 정확한 위치를 알고 싶습니다. grub을 설치하려면 grub-install /dev/sda를 알고 있지만 이는 전체 하드 드라이브에 grub을 설치한다는 의미입니까?
답변1
대답은 다음과 같습니다. 상황에 따라 다릅니다. 기존 MBR 디스크에서는 첫 번째 부분( boot.img
)이 부트 섹터에 기록되고, 다음 부분은 일반적으로 부트 섹터와 첫 번째 파티션 사이의 섹터에 기록됩니다. 일반적으로 첫 번째 파티션 앞에는 사용되지 않은 공간이 최소 63개 섹터 있습니다. GRUB의 나머지 부분은 /boot/grub
GPT(GUID 파티션 테이블) 디스크에 저장되지만, 비 UEFI(=BIOS) 펌웨어를 사용하는 경우 GRUB의 두 번째 부분을 저장하는 데 BIOS 부팅 파티션이 사용됩니다. UEFI 시스템에서 GRUB는 grubx64.efi
ESP(EFI 시스템 파티션)의 펌웨어에 의해 로드됩니다.
답변2
컨텍스트를 설정하기 위해 Linux 부팅 프로세스의 첫 번째 단계를 논의합니다. 궁극적으로 이 단계에서 GRUB는 부팅 파티션을 찾아서 액세스하기 위한 최소한의 작업을 수행한 다음 커널을 로드하고 운영 체제의 중요한 내용이 포함된 초기 램디스크 이미지(initrd)를 가리키도록 시도합니다.
MBR 시스템의 MBR 디스크인 경우(클래식 시나리오) 섹터 0의 처음 440바이트가 부팅 코드 전용입니다. 첫 번째 섹터의 꼬리에는 파티션 테이블과 같은 다른 콘텐츠가 포함되어 있습니다. GRUB에는 작은 코드 섹션이 있지만 기본적으로 더 많은 코드를 얻기 위해 섹터 1 이상으로 점프합니다.
이 영역은 일반적으로 파티션에 포함되지 않습니다. 레거시 이유(CHS 주소 지정, LBA 이전)로 인해 시스템은 일반적으로 첫 번째 파티션을 섹터 63에 배치합니다. 이후 시스템에서는 모든 섹터가 동일하다고 가정하기보다는 기본 미디어에 맞게 파티션을 보다 최적으로 정렬하려고 시도하기 시작했습니다. 처음에는 RAID 어레이용이었고 나중에는 AF HDD 및 SSD의 페이지/블록 크기용이었으므로 일반적으로 1MiB가 되었습니다.
요점은 일반적으로 사용되지 않는 이 영역이 GRUB에서 사용된다는 것입니다. 오늘 디스크에 GRUB의 i386-pc 설치를 수행한다면 가능한 경우 다음 109개 섹터를 사용하여 코드를 저장하게 됩니다. (즉, 섹터 0의 처음 440바이트 + 섹터 1~110 전체) 사용하는 정확한 섹터 수는 GRUB마다 다르며, 거기에서 필요한 모듈(예: 부팅 파티션 등)에 따라 달라집니다. .
EFI 시스템의 GPT 디스크인 경우 GRUB는 섹터 0에 전혀 상주할 필요가 없습니다. 종종 "보호" MBR이 존재하지만 시스템이 점점 더 일반화되는 운영 체제에서 실행되는 경우 시스템은 부팅 중에 이를 사용하지 않습니다. 순수 EFI 모드. 대신 시스템의 BIOS(잘못된 이름이지만 이해하기 쉬움)는 액세스 방법을 알고 있는 모든 디스크를 찾은 다음 GPT 파티션 테이블이 있는지 확인한 다음 파티션에 ESP 플래그가 설정된 디스크를 확인합니다. ESP 파티션은 파일 시스템에서 포맷하여 구문 분석하는 방법을 알고 있습니다. FAT32 지원은 필수이지만 BIOS에 NTFS와 같은 다른 형식에 대한 선택적 드라이버가 포함되는 경우도 있습니다.
읽을 수 있는 ESP 파티션을 찾으면 일부 EFI 부팅 파일이 포함된 하위 폴더를 확인합니다. 존재하는 경우 부팅 순서 목록에서 해당 폴더 이름의 항목을 찾을 수 있습니다. BIOS는 해당 폴더의 부트로더를 실행합니다. 파일 시스템의 파일이기 때문에 미디어에서 부트로더의 물리적 위치에 대한 세부 정보는 더 이상 중요하지 않습니다.