- GRUB은 BIOS/UEFI와 멀티부트를 지원하며 운영체제를 선택하고 로드하는 GNU 부트 관리자입니다.
- GRUB 2에서는 모듈이 추가되고, 파일 시스템 지원이 개선되었으며, UUID 검색 기능과 그래픽 메뉴/터미널이 추가되었습니다.
- 구성은 /etc/default/grub 및 40_custom을 통해 관리되며 update-grub 또는 grub2-mkconfig를 사용하여 재생성됩니다.
- 보안: GRUB에 암호 보호, LUKS 암호화 사용, 강력한 암호 정책이 필요합니다.
컴퓨터에 GNU/Linux를 설치했거나 여러 운영 체제를 사용하는 경우 GRUB에 대해 들어봤을 것입니다. GRUB은 시스템 부팅 직전에 나타나는 작지만 강력한 프로그램으로, 어떤 프로그램을 로드할지 선택할 수 있게 해줍니다. 눈에 잘 띄지 않지만, 운영 체제를 시작 하고 커널로 제어권을 원활하게 넘겨주는 데 매우 중요한 역할을 합니다.
PC 부팅 분야에서 GRUB은 강력한 기능과 유연성 덕분에 사실상의 표준으로 자리 잡았습니다. GNU 프로젝트에서 탄생한 GRUB은 현재 GNU/리눅스에서 가장 널리 사용되는 부트 관리자 로, 다양한 아키텍처와 파일 시스템과 호환되며, 초보자에게도 친숙하고, 부팅 과정의 모든 세부 사항을 세밀하게 조정하려는 사용자에게는 마치 만능 도구와 같습니다.
GNU GRUB이란 무엇이고, 어떤 용도로 사용되나요?
GNU GRUB(GNU GRand Unified Bootloader) 은 멀티 부트 관리자입니다. 컴퓨터 전원이 켜지면 펌웨어(BIOS 또는 UEFI)가 실행되어 운영 체제를 선택하고 로드하는 소프트웨어입니다. 사용자는 GRUB을 통해 메뉴 항목을 선택하고, 커널에 매개변수를 전달하고, 네트워크에서 부팅하고, 콘솔과 상호 작용하여 특정 문제를 해결할 수도 있습니다.
GRUB은 주로 GNU/Linux 배포판에서 사용되지만, x86 기반의 Solaris와 같은 다른 시스템에서도 사용되었습니다. 최신 UEFI 시스템 에서는 펌웨어가 NVRAM에 등록되어 있는 경우 EFI 시스템 파티션(ESP)에 있는 GRUB 실행 파일을 직접 로드합니다 . BIOS/MBR 시스템에서는 GRUB이 디스크의 초기 섹터를 차지하고 거기서부터 로드를 시작합니다.
GRUB은 일반적인 메뉴 외에도 멀티부트 사양을 준수하므로 호환되는 커널을 끊김 없이 부팅 할 수 있습니다 . 커널이 메모리에 로드되면 GRUB은 제어권을 넘겨주고 작업을 완료하는데, 이는 결코 쉬운 일이 아닙니다.

기술 시트 및 프로젝트 데이터
GRUB은 GNU 생태계의 일부이며 GNU GPL v3 이상 라이선스에 따라 자유 소프트웨어 로 배포됩니다 . 공식 저장소, 버그 추적 시스템, 웹사이트를 갖춘 오픈 소스 개발 환경을 제공하며, 매우 활발한 커뮤니티를 보유하고 있습니다.
이는 주로 C와 어셈블러로 작성되었으며, 여러 플랫폼에서 실행됩니다. IA-32, x86-64 및 PowerPC, 기타 등이 있습니다. 현재 브랜치는 GRUB 2(역사적인 "GRUB Legacy"를 재구현한 버전)입니다. 출시된 최신 안정 버전은 다음과 같습니다. 2.12 (2023년 12월 20일). 로컬 버전을 확인하려면 다음을 실행하세요. grub-install --version 그러면 해당 체인이 보일 겁니다.
역사와 진화에 대한 약간의 설명
GRUB은 GNU Hurd와 Mach 마이크로커널 개발 과정에서 에리히 스테판 볼레인 이 제안한 프로젝트였습니다 . 부팅 방식의 차이를 해결하기 위해 부트로더와 커널이 "같은 언어"를 사용하도록 하는 멀티부트 사양이 만들어졌습니다. 1999년 고든 매치지카이트와 요시노리 오쿠지는 GRUB을 GNU 프로젝트의 공식 패키지로 채택하는 데 앞장섰습니다.
2002년경, 일본 연구진들은 GRUB을 더욱 견고하고 모듈화된 형태로 재작성하기 위한 목표로 PUPA(Preliminary Universal Programming Architecture) 프로젝트를 시작했습니다. 이 프로젝트의 결과물로 GRUB 2가 탄생했고 , 이전 버전은 "GRUB Legacy"로 알려지게 되었습니다(버전 0.97은 2005년에 마지막으로 업데이트되었습니다). 2007년부터 여러 배포판들이 GRUB 2로 전환하기 시작했고, 2009년 말에는 대다수의 배포판에 GRUB 2가 기본적으로 포함되었습니다.
GRUB(BIOS 및 UEFI)로 컴퓨터를 부팅하는 방법
PC를 켜면 펌웨어가 자체 검사(RAM, 클럭, 장치, 부팅 순서)를 실행하고 부트로더를 찾습니다. BIOS/MBR이 있는 시스템에서는 제어권이 다음 위치로 넘어갑니다. 마스터 부트 레코드(MBR), 디스크의 초기 512바이트GRUB은 1단계(MBR에 최소한의 코드 포함), 1.5단계(나중 섹터에서 파일 시스템 이해를 위한 연결), 2단계(메뉴 및 고급 기능)로 나뉘었습니다. GRUB 2에서는 "1.5"라는 단어가 더 이상 존재하지 않습니다. 이제 다음과 같은 특정 이미지가 있습니다. boot.img, core.img 그리고 설치에 따라 결합되는 모듈(*.mod)이 있습니다.
UEFI에서는 과정이 더 직접적입니다. 펌웨어는 GRUB EFI 바이너리가 EFI 파티션에 올바르게 설치 및 등록되어 있는 경우 이를 실행합니다. 두 경우 모두 GRUB는 메뉴 또는 콘솔을 표시하고 선택한 커널을 로드한 다음 실행 권한을 해당 커널로 넘깁니다.
멀티부트 사양 및 호환성
GRUB은 멀티부팅을 구현하여 특별한 "꼼수" 없이 호환되는 커널을 부팅할 수 있도록 합니다. 또한, 멀티부팅을 지원하지 않는 시스템(예: Windows 또는 DOS )의 경우, 부트로더가 있는 파티션의 첫 번째 섹터를 대상으로 하는 체인 로딩 기능을 제공합니다.
이 소프트웨어는 Btrfs, ext2/3/4, FAT12/16/32, exFAT, HFS/HFS+, ISO9660, Nilfs2, NTFS, ReiserFS, ZFS, ROMFS, JFS, XFS 등 다양한 파일 시스템과 호환됩니다 . 또한 LVM 볼륨과 RAID 어레이에서도 읽을 수 있어 스토리지 구조가 복잡한 경우에 큰 장점이 됩니다.
주요 특징 및 기능
- 메뉴 인터페이스 Tab 자동 완성 및 Bash 스타일 단축키를 갖춘 구성 가능하고 매우 유연한 대화형 터미널입니다.
- 지원 LBA(논리 블록 주소 지정) 고전적인 BIOS 한계를 극복하고 1024개 이상의 실린더를 읽습니다.
- 수용 능력 네트워크 부팅 (PXE/TFTP) 및 원격 터미널은 중앙 관리 시나리오에 유용합니다.
- 다양한 실행 파일의 자동 압축 해제 및 인식.
- 변수의 영구 저장 저장_환경/로드_환경 y
grub-editenv(플랫폼이 허용하는 경우). - 모든 RAM 감지, 디스크 기하학 독립성 및 레이블 및 UUID별 검색 메커니즘.
- 메뉴 및 배경에 대한 그래픽 지원 및 유지 관리가 가능한 모듈형 디자인 코어.img 작고 필요에 따라 모듈을 장착할 수 있습니다.
주요 용어: 장치, 파티션 및 경로
GRUB은 자체 방식으로 디스크와 파티션의 이름을 지정합니다. 첫 번째 디스크는 일반적으로 (HD0), 첫 번째 파티션 (HD0,1) GRUB 2에서는 (참고: GRUB 2에서는 번호가 1부터 시작하지만, 레거시에서는 0부터 시작합니다.) 전체 디스크를 참조하려면 파티션을 생략합니다. (hd0).
파일을 나타내기 위해 장치는 경로와 결합됩니다. (hd0,1)/ruta/al/archivo. 또한 지원합니다 차단 목록 (블록 목록) 예를 들어 파일 시스템에서 그 자체로 표시되지 않는 파일의 디스크에서의 정확한 위치를 표시해야 할 때 (hd0,1)+1 파티션의 첫 번째 섹터의 경우 유용합니다. chainloader +1.
GRUB의 "루트 파일 시스템"은 Linux의 "/"와 같은 것이 아닙니다. 단순히 GRUB이 파일을 읽어오는 루트 파티션 일 뿐입니다 . Linux 커널이 제어권을 가져오면 자체적인 실제 루트를 정의하게 되므로 GRUB의 다른 모든 설정은 무의미해집니다.
GRUB 인터페이스
GRUB은 세 가지 주요 보기 방식을 제공합니다. 가장 익숙한 것은 미리 구성된 항목이 있는 메뉴 입니다 . 화살표 키로 탐색하고, Enter 키로 부팅하고, "e" 키로 항목을 편집하고, "c" 키로 콘솔을 열 수 있습니다.
입력 편집기를 사용하면 "o/O" 키로 줄을 추가하고, "e" 키로 편집하고, "d" 키로 삭제하는 등 실시간으로 코드를 수정할 수 있으며, 모든 것이 올바르면 "b" 키로 부팅할 수 있습니다. 파일을 건드리지 않고 커널 매개변수를 테스트하는 데 이상적입니다.
콘솔 모드는 가장 강력한 모드로, 상황별 자동 완성, 바로가기 편집, 디스크 찾기, 커널/initrd 로드, 체인 로딩 등 GRUB의 모든 내부 명령어를 지원합니다 . 구성 파일이 없거나 손상된 경우, GRUB은 콘솔 모드로 이동하여 사용자가 직접 문제를 해결할 수 있도록 합니다.
일반적인 오류 메시지
오류는 초기 단계(비교적 간략함) 또는 메뉴 및 모듈 로딩 시(더 자세한 설명)에 나타날 수 있습니다. 아래는 GRUB에서 표시될 수 있는 대표적인 오류 코드들을 이해하기 쉽게 정리한 것입니다.
- 1: 유효하지 않거나 절대 경로가 아닙니다. 2: 유효하지 않은 파일 유형(일반 파일이 아닙니다.) 3–4: 압축 해제 중 데이터/헤더가 손상되었습니다. 5: 손상된 파티션 테이블 또는 무효.
- 6: Stage1/Stage2 비호환성; 7: 1MB 미만 로딩은 지원되지 않습니다; 8: 커널을 로딩하지 않고 부팅을 시도했습니다; 9: 알 수 없는 부팅 실패.
- 10: 멀티부팅 기능이 지원되지 않습니다. 11: 장치를 인식할 수 없습니다. 12: 잘못된 장치입니다. 13: 지원되지 않는 실행 파일 형식입니다.
- 14: 파일 시스템이 전체 파일을 읽는 것을 방지합니다. 15: 파일을 찾을 수 없습니다; 16: 파일 시스템 구조가 일관되지 않습니다.
- 17: 선택한 파티션을 마운트할 수 없습니다. 18: 실린더가 BIOS에서 지원하는 범위를 벗어났습니다(이전 드라이브에서 일반적). 19: 커널보다 먼저 Initrd가 실행되었습니다.
- 20: 멀티부트 커널 이전의 모듈; 21: 선택한 디스크가 존재하지 않습니다; 22: 존재하지 않는 파티션; 23: 숫자를 해석하는 중 오류가 발생했습니다.
- 24: 파티션 외부의 블록에 접근했습니다. 25: 디스크 읽기 오류입니다. 26: 심볼릭 링크가 너무 많습니다. 27: 알 수 없는 명령입니다.
- 28: 항목이 메모리에 맞지 않습니다. 29: 디스크 쓰기 오류입니다. 30: 잘못된 인수입니다. 31: 파일이 섹터에 정렬되지 않았습니다(ReiserFS, 사용 노테일).
- 32: 인증이 필요합니다. 33: 직렬 장치가 구성되지 않았습니다. 34: MBR 이후 1.5단계에 사용할 수 있는 여유 섹터가 없습니다(EZ-BIOS와 충돌하거나 파티션이 너무 일찍 시작됩니다).
기본 GRUB 명령
콘솔에서는 매우 유용한 대화형 명령을 실행할 수 있습니다. 예를 들어, boot 마지막으로 로드된(커널 또는 체인로더)를 시작합니다. chainloader <archivo> 체인에서 섹터나 파일을 로드합니다. Windows의 일반적인 단축키는 다음과 같습니다. chainloader +1.
displaymem BIOS에 따라 메모리 사용량을 표시하므로 감지된 RAM이 확실하지 않은 경우 유용합니다. initrd <archivo> 커널에 필요한 초기 RAM 디스크 이미지를 지정합니다.
GRUB 레거시 콘솔에서 MBR에 설치하려면 다음을 사용했습니다. install 경로로 stage1, stage2 그리고 선택적으로 구성 파일에도 적용됩니다. 오늘날 GRUB 2에서는 시스템에서 다음을 사용하는 것이 일반적입니다. grub-install 그리고 메뉴를 다시 생성합니다. update-grub/grub2-mkconfig.
명령 kernel 커널 바이너리와 매개변수를 지정합니다. 예: kernel /vmlinuz root=/dev/sda5일반적으로 다음에 선행됩니다. root (hdX,Y) o rootnoverify GRUB이 읽을 파티션을 설정합니다.
구성 파일 및 지시문
GRUB 레거시에서는 메뉴가 다음 위치에 있었습니다. /boot/grub/menu.lst o grub.conf, 다음과 같은 지시사항이 있습니다. color, default, fallback, hiddenmenu, password, timeout, splashimage 및 블록 title 각 시스템에 대한 주문과 함께.
고전적인 예(의역)에는 Linux 섹션이 포함됩니다. root (hd0,2), kernel 그와 루트 매개변수=/…, 그리고 boot; 그리고 Windows용 또 다른 것 rootnoverify (hd0,1) y chainloader +1.
GRUB 2에서는 자동으로 생성된 파일은 다음과 같습니다. /boot/grub/grub.cfg. 수동으로 편집하는 것은 권장하지 않습니다. 대신 조정합니다. /etc/default/grub (예: 값 GRUB_TIMEOUT, GRUB_DEFAULT등) 및 사용자 정의 항목이 추가됩니다. /etc/grub.d/40_custom. 그런 다음 실행됩니다. update-grub o grub2-mkconfig 메뉴를 다시 생성합니다.
GRUB Legacy와 GRUB 2의 주요 차이점
- 구성 파일은 다음에서 시작되었습니다.
menu.lst/grub.confagrub.cfg, 갱신된 구문 및 명령과 자동 생성을 통해grub-mkconfig. - 파티션 번호 매기기 1 년 시작 GRUB 2에서는 (레거시에서는 0에서 시작)
- 변수의 지속성
save_env/load_env일부 구성에서는. - 더 나은 경로 감지 및 UUID/태그로 검색; 더 많은 파일 시스템이 지원됩니다.
- 직접 읽기 LVM과 RAID.
- 터미널과 메뉴 그래픽, 재구성된 이미지: 1.5단계가 사라졌습니다.
boot.img,core.img및 동적 모듈(*.mod).
GRUB를 통한 보안 및 강화
보안이 취약한 부트 관리자는 체와 같습니다. 물리적 접근 권한이 있는 사람이 커널 매개변수를 수정하거나 다른 부팅 항목을 실행할 수 있다면, 사실상 보안 조치가 무력화됩니다 . 따라서 GRUB을 암호로 보호하고 모범 사례를 구현하는 것이 좋습니다.
하나를 설정 강력한 암호 항목 수정이나 콘솔 액세스를 제한합니다. GRUB 2에서는 사용자 이름과 비밀번호를 다음과 같이 사용합니다. grub-mkpasswd-pbkdf2 그리고 스크립트에서 해당 규칙을 구성합니다. /etc/grub.d/.
이 시스템은 LUKS를 사용한 디스크 암호화를 포함하고 있어 누군가 컴퓨터를 훔치더라도 데이터를 읽을 수 없습니다. 또한 무차별 대입 공격을 줄이기 위해 시스템의 암호 정책을 엄격하게 적용합니다.
로그 기록을 현명하게 관리하세요 . 공격자에게 단서를 제공하는 로그는 최소화하거나 접근 제어를 통해 중앙 집중식으로 관리해야 합니다. 악의적인 시도를 감사하는 데 도움이 되는 로그는 안전한 위치에 모아서 분석해야 합니다.
다른 설치된 시스템을 감지하고 항목을 자동으로 생성하려면 다음을 설치하세요. os-prober이렇게 하면 메뉴를 다시 만들 때 시간을 절약하고 오류를 방지할 수 있습니다.
설치 및 유지 보수
배포판 설치 중에 GRUB를 설치하지 않았다면 나중에 설치할 수 있습니다. GRUB 2의 시스템에서 다음을 실행하세요. sudo grub-install /dev/sdX (디스크를 교체하세요) 그리고 sudo update-grub o sudo grub2-mkconfig -o /boot/grub/grub.cfg다음 부팅 시 메뉴가 표시됩니다.
GRUB 레거시 콘솔에서 기존 절차는 루트를 지정하고 설치를 실행하는 것입니다. root (hd1,0) 뒤이어 setup (hd1,0) 두 번째 디스크의 첫 번째 파티션의 경우 또는 setup (hd1) 두 번째 디스크의 MBR을 가리키면 됩니다.
직접 편집 /boot/grub/grub.cfg 기술적으로 가능하더라도 GRUB 2에서는 좋은 아이디어가 아닙니다. 추천 경로 바꾸는 것이다 /etc/default/grub, 사용하다 /etc/grub.d/40_custom 자체 콘텐츠와 재생성을 위해.
실용적인 질문과 유용한 단축키
/dev/sda에 있는 부트 파티션이 어느 것인지 어떻게 알 수 있나요? BIOS/MBR 시스템에서: sudo fdisk -l /dev/sda (별표는 "부팅"을 나타냅니다.) GPT/UEFI의 경우: lsblk -o NAME,FSTYPE,PARTTYPE,PARTFLAGS,MOUNTPOINT 그리고 EFI 파티션(FAT32, 특히 EF00/flags 유형)을 찾으세요. 또한 sudo efibootmgr -v 기록된 부팅 항목을 표시합니다.
파티션의 UUID를 어떻게 얻을 수 있나요? 와 blkid o lsblk -f. 예 : sudo blkid /dev/sda2 그것의 반환 UUID 및 기타 메타데이터.
GRUB 2에서 기본 항목을 입력하기 전에 10초간 기다리게 하려면 어떻게 해야 하나요? 조정 /etc/default/grub 와 GRUB_TIMEOUT=10 (그리고 해당되는 경우, GRUB_TIMEOUT_STYLE=menu)하고 실행합니다 sudo update-grub o grub2-mkconfig.
두 번째 디스크의 첫 번째 파티션에 GRUB 레거시 명령을 설치하려면 어떻게 해야 하나요? 콘솔을 열고 다음을 실행합니다. root (hd1,0) 다음 setup (hd1,0). MBR을 원했다면 다음과 같습니다. setup (hd1).
GRUB 2 구성을 변경하는 단계는 무엇입니까? 1) 편집 /etc/default/grub (예: GRUB_DEFAULT, GRUB_TIMEOUT), 2) 항목 추가 /etc/grub.d/40_custom 필요하다면 3) 재생성하세요 update-grub/grub2-mkconfig, 4) 재부팅하고 테스트합니다.
GRUB 2에서 사용자 정의 메뉴를 어디에 넣어야 하나요? En /etc/grub.d/40_custom (또는 자신의 파일 /etc/grub.d/ 적절한 권한이 있어야 합니다.) 절대로 수동으로 편집하지 마십시오. /boot/grub/grub.cfg 비상 상황을 제외하고는.
GRUB Legacy에서는 항목이 어디에 저장되어 있나요? En /boot/grub/menu.lst o grub.conf, 분포에 따라.
메뉴에서 GRUB 콘솔에 어떻게 접근하나요? GRUB 2 또는 레거시 버전에서는 "c" 키를 누르세요. 특정 항목을 편집하려면 "e" 키를 누르세요. 이 두 단축키는 문제를 즉시 진단 해야 할 때 매우 유용합니다.
일반적인 옵션의 예
기본 부팅 선택: GRUB_DEFAULT=0 첫 번째 이닝이 시작됩니다. GRUB_DEFAULT=saved 마지막으로 사용된 구성을 기억합니다. 변경 후 구성을 다시 생성하세요.
대기 시간: GRUB_TIMEOUT=4 메뉴 지연을 조정합니다. 0 일시 정지 없이 시작합니다. 일부 시나리오에서는 메뉴를 숨길 수 있습니다. GRUB_TIMEOUT_STYLE=hidden 더 깔끔한 시작을 위해.
메뉴 업데이트: Debian/Ubuntu 및 파생 버전에서 sudo update-grub; 다른 사람들에서는, sudo grub2-mkconfig -o /boot/grub/grub.cfg. 당신이 가지고 있는지 확인하십시오 os-prober 다른 시스템을 자동으로 감지하려면 설치하세요.
GRUB은 GNU/Linux 외의 환경에서도 사용되지만, 지원 서비스는 아니라는 점을 기억하십시오. 문제가 Windows와 관련된 것이라면 해당 시스템 전용 포럼 에서 구체적인 도움을 받는 것이 가장 좋습니다.
GRUB은 단순한 부팅 메뉴에서 발전하여 여러 운영 체제를 부팅하고, 복잡한 디스크를 관리하며, 몇 가지 명령만으로 시스템을 복구할 수 있는 진정한 사전 시스템 환경으로 진화했습니다. 적절한 구성과 보안 강화 (GRUB 암호, LUKS 암호화, 잘 관리된 키 정책 및 로그)를 통해 강력하고 유연하며 무엇보다 제어 가능한 부팅 프로세스를 구축할 수 있습니다.
