GRUB?
GRUB에 대한 Wikipedia의 정의를 보면, "GNU 프로젝트의 부트로더이다." 라고 나옵니다.
그럼 먼저 GNU 프로젝트란 무엇일까요?
(1) GNU(GNU's Not Unix)란?
GNU는 GNU's Not Unix!"(GNU는 유닉스가 아니다!)의 약어로, 유닉스를 대체할 Free Software, 즉 무료 소프트웨어 모음집입니다. 여기에는 운영체제 커널도 포함되어 있고, 컴파일러, 문서 편집기 등의 소프트웨어가 포함되어 있습니다. 물론 리눅스도 GNU 프로젝트의 일환인거죠.
다음으로 부트로더입니다.
(2) 부트로더(Bootloader)란?
우리는 흔히들 "컴퓨터를 부팅한다"라고 말합니다. 부트로더는 운영 체제가 시동되기 이전에 미리 실행되면서 커널이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리하고, 최종적으로 운영 체제를 시동시키기 위한 목적을 가진 프로그램을 말한다. (Wikipedia 인용)
자, 이제 GRUB이 무엇인지 아시겠지요?
(3) GRUB(GRand Unified Bootloader)이란?
GNU 프로젝트의 일환으로 개발된 부트로더입니다!
GRUB이 개발되기 이전에는 LILO(LInux LOader)라고 하는 부트로더를 사용했습니다. LILO는 BSD 라이선스라고 해서 Free Software이지만, GNU 프로젝트는 아닙니다. 조금 다르다고 합니다.
아무튼 이제 대부분의 리눅스에서는 부트로더로 GRUB을 사용합니다.
그럼 리눅스에서 부트로더가 어떻게 구성되어 있는지 확인해봅시다.
(4) GRUB 설정파일 (grub.conf)
GRUB의 설정파일은 /boot/grub/grub.conf 파일에 있습니다.
[root@localhost ~]# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda3
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-696.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=2d0d743a-bd30-4b76-9dd6-4dc9195b4061 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-696.el6.x86_64.img
각각이 어떤 의미를 가지고 있는지 확인해봅시다.
1) #boot=/dev/sda
부팅이 되는 하드디스크를 지정하는 파라미터입니다. 시스템에 장착된 하드디스크가 하나인 경우 주석처리됩니다.
2) default=0
전원을 켰을 때, 기본적으로 부팅되는 운영체제를 설정하는 파라미터입니다. title 에 적힌 항목의 순서대로 인데요, 저의 시스템에 경우, CentOS 6 (2.6.32-696.el6.x86_64) 하나 밖에 없는 상태이지만, 여러 개의 title이 있을 경우에는 0부터 순서대로 하나씩 카운트됩니다.
3) timeout=10
GRUB 메뉴 화면에서 대기하는 시간을 설정하는 파라미터입니다. timeout 시간 동안 아무런 입력이 없으면 default에 설정된 값으로 부팅됩니다. 주석처리하거나 항목이 없으면 반드시 엔터 키를 입력해야 부팅이 됩니다.
4) splashimage=(hd0,0)/grub/splash.xpm.gz
GRUB 화면의 배경 이미지를 지정하는 파라미터입니다. 레드햇 계열의 리눅스에서는 xpm 형태의 이미지를 압축한 xpm.gz 파일을 사용합니다.
(hd0,0)의 의미는 첫 번째 하드디스크의 첫 번째 파티션을 의미하며, /dev/sda1 또는 /dev/hda1를 의미합니다. 만약 두 번째 파티션인 /dev/sda2를 사용하고 싶다면, (hd0,1)이 되겠지요? 두 번째 하드디스크의 첫 번째 파티션이라면, (hd1,0) 이겠구요.
5) title CentOS 6 (2.6.32-696.el6.x86_64)
GRUB 메뉴 화면에 표시되는 이름입니다. 원하는 형태로 변경 가능합니다.
- root (hd0,0): /boot의 위치를 나타냅니다.
- kernel /vmlinuz-2.6.32-696.el6.x86_64 ro (생략): 커널의 위치와 커널 파라미터를 설정합니다.
- initrd /initramfs-2.6.32-696.el6.x86_64.img: 초기화에 필요한 이미지 경로를 지정합니다.
이 파라미터를 건드릴 일은 거의 없으나, 간혹 특정 프로그램이나 데이터베이스를 설치하기 위해 kernel 파라미터를 수정하는 경우가 있습니다. 수정하실 때에는 매우매우 주의하시기 바랍니다.
여러 개의 운영체제로 멀티 부팅을 구현하셨다면, title 메뉴가 추가되는 식으로 설정됩니다.
예를 들자면 아래와 같이요.
title CentOS 6 (2.6.32-696.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=2d0d743a-bd30-4b76-9dd6-4dc9195b4061 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-696.el6.x86_64.img
title CentOS 6(2) (2.6.32-696.el6.x86_64)
root (hd2,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro (생략)
initrd /initramfs-2.6.32-696.el6.x86_64.img
#Linux #CentOS #리눅스마스터 #리눅스 #마스터 #GNU #GRUB #LILO #Bootloader #부트로더 #grub.conf
참고자료:
https://blog.naver.com/sunchan683/221458835359
https://ko.wikipedia.org/wiki/GRUB
https://ko.wikipedia.org/wiki/GNU_%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8
https://ko.wikipedia.org/wiki/%EB%B6%80%ED%8C%85
https://ko.wikipedia.org/wiki/LILO
https://ko.wikipedia.org/wiki/BSD_%ED%97%88%EA%B0%80%EC%84%9C
정성재,배유미 공저(2018), "리눅스마스터 1급 정복하기(1차,2차 시험대비) 8판", p62-63