1. 운영체제에서의 부트로더의 역할
컴퓨터가 운영체제로 부팅하는 과정을 보면 컴퓨터 전원을 넣으면 제일 먼저 바이오스가 동작한후에 운영체제로 부팅이 이뤄집니다. 바이오스가 동작하고나서 운영체제가 부팅될 수 있도록 이끌어 주는 프로그램을 부트로더(BootLoader)라 하며, 하드 디스크의 첫번째 섹터(MBR, Master Boot Record)에 512바이트의 크기로 존재합니다. 바이오스 동작후에 순식간에 바로 운영체제로 넘어가기 때문에 그 사이에 부트로더가 존재한다는 것을 이해하는 사용자는 그리 많지 않습니다. 하지만 윈도를 잘 다루는 사용자라 한다면 윈도의 부트관리자라는 것이 있다는 걸 알고 있을 겁니다. 윈도의 부트관리자가 부트로더이며, 리눅스를 비롯한 모든 운영체제가 자신의 운영체제로 부팅될 수 있도록 부트로더를 지원합니다.
* 각 운영체제의 부트로더
윈도 : 부트 관리자
리눅스 : syslinux, LILO, GRUB Legacy(GRUB 1버전). GRUB2, BURG
예전의 리눅스에서는 LILO라는 부트로더를 지원했다가 현재는 대부분의 리눅스 배포판에서는 GRUB를 지원하는데, GRUB 1버전이 오랫동안 거의 표준 부트로더로 자리매김을 해 오다가 요즘에는 GRUB2 버전으로 대체되고 있습니다. 넘버원 리눅스의 경우는 라이브 부팅시에는 GRUB 1버전을 여전히 지원하고, 하드 디스크로 설치후에는 넘버원리눅스 2016버전부터는 GRUB2 버전을 지원합니다..
2. 기존 GRUB1(Legacy) 버전과 GRUB2 버전의 주요 차이
차이점 | GRUB Legacy | GRUB2 | 비고 |
설정파일 | /boot/grub/menu.lst | /boot/grub2/grub.cfg | grub.cfg는 grub-mkconfig에 의해 자동생성 |
파티션수명명 | 첫번째 파티션은0부터 시작 | 첫번째 파티션은 1부터 시작 | 예) grub1는 (hd0,0), grub2는(hd0,msdos1) |
root 파티션지정방법 | root (hd0,0) | set root=(hd0,msdos1) | set root=다음에 tab키를 사용하여 파티션 |
커널이미지 설정옵션 | kernel=옵션으로 커널이미지 명시 | linux=옵션으로 커널이미지 명시 |
3. Grub2 버전 설치 경로및 파일들
경로및 파일 | 설명 | |
/boot/grub2 | custom.cfg | 사용자 정의파일 |
grub.cfg | grub2의 설정파일, /etc/default/grub 파일과 grub-mkconfig에 의해 자동생성 | |
fonts | 글꼴 위치 | |
themes | GRUB2 배경화면 장식테마 | |
/etc/grub.d | grub.cfg 파일에 부트엔트리를 만들어주는 스크립트 파일을 포함합니다. | |
00_header | /etc/default/grub에 있는 설정을 불러옵니다. | |
10_linux | 설치된 리눅스 운영체제에 대한 메뉴 엔트리를 불러옵니다. | |
30_os-prober | 타운영체제를 탐색하여 부트 메뉴에 추가해 주는 역할을 합니다. | |
40_custom | 사용자 정의로 부트 메뉴에 추가해 주는 템플릿 역할을 합니다. | |
90_persistent | 사용자가 grub.cfg 파일 일부를 직접 수정할 수 있게 해 줍니다. | |
/etc/default/grub | /etc/grub.d에 있는 스크립트들에서 사용할 옵션 설정을 포함합니다. | |
/usr/bin | grub2-menulst2cfg | Grub 레거시 버전의 menu.lst 설정파일을 grub.cfg 파일로 변환해 줍니다. |
grub2-customizer | GRUB2 설정 그래픽 인터페이스 | |
update-grub2 | grub.cfg 파일 업데이트, 이 파일 설정후 적용하기 위해선 반드시 실행 | |
/usr/sbin | grub2-install | grub2 설치 도구 |
grub2-mkconfig | grub.cfg 파일 생성 도구 | |
/usr/lib또는 /usr/lib64/grub | 각종 모듈 위치 |
4. grub2 설정 (/etc/default/grub)
이 설정파일로 /boot/grubgrub2-mkconfig 명령에 의해서 /boot/grub2/grub.cfg 파일이 자동 생성됩니다. 따라서 제일 먼저 grub2 부트로더를 설정하려면 /etc/default/grub2 파일을 설정해야 하므로 이 파일을 설정하는 방법을 알아봅니다.
GRUB_CMDLINE_LINUX_DEFAULT=” nokmsboot splash quiet acpi=on resume=UUID=3b3324c0-2427-4229-935d-78b4fcd11742 vga=791″ GRUB_DEFAULT=saved GRUB_SAVEDEFAULT=true GRUB_GFXPAYLOAD_LINUX=keep GRUB_DISABLE_OS_PROBER=false GRUB_DISABLE_RECOVERY=true GRUB_TIMEOUT=10 GRUB_THEME=/boot/grub2/themes/no1linux/theme.txt GRUB_TERMINAL_OUTPUT=gfxterm GRUB_DISABLE_SUBMENU=y GRUB_DISTRIBUTOR=No1.Linux GRUB_GFXMODE=1024x768x32 |
/etc/default/grub 설정파일은 ‘KEY=값’ 형식으로 설정되는데 KEY값에 공백이 들어가는 경우에는 따옴표를 사용합니다. 여기서 KEY라고 표현하면 좀 이해가 어려울 수 있으므로 KEY 대신에 옵션으로 표현하겠습니다. (‘옵션=값’)
4.1 GRUB_DEFAULT 옵션
이 옵션은 GRUB2의 기본 부트 엔트리를 지정할 때 사용하며, 이 옵션의 값으로는 숫자 또는 메뉴 엔트리 타이틀이나 saved 스트링이 올 수 있습니다. 만일 숫자로 설정하는 경우에는 몇번째 메뉴 엔트리인지를 0부터 표시해 줄 수 있으며(기본값은 0), 메뉴 엔트리의 타이틀로 설정해 줄 수 있습니다. 예를 들어 /boot/grub2/grub,cfg 파일에 다음과 같이 부트 메뉴 엔트리가 설정되어 있다면
menuentry ‘No1.Linux (on /dev/sdb1)’ –class gnu-linux –class gnu –class os $menuentry_id_option ‘osprober-gnulinux-/boot/vmlinuz–60335d3d-0b5f-4e69-81ed-483a09e4bdf1’ { insmod part_msdos insmod ext2 set root=’hd1,msdos1′ if [ x$feature_platform_search_hint = xy ]; then search –no-floppy –fs-uuid –set=root –hint-bios=hd1,msdos1 –hint-efi=hd1,msdos1 –hint-baremetal=ahci1,msdos1 60335d3d-0b5f-4e69-81ed-483a09e4bdf1 else search –no-floppy –fs-uuid –set=root 60335d3d-0b5f-4e69-81ed-483a09e4bdf1 fi linux /boot/vmlinuz BOOT_IMAGE=linux root=UUID=60335d3d-0b5f-4e69-81ed-483a09e4bdf1 quiet nokmsboot acpi=on splash=silent vga=791 initrd /boot/initrd.img } |
GRUB_DEFAULT=”No1.Linux (on /dev/sdb1)”로 설정해 줄 수 있습니다. menuentry에 작은 따옴표로 설정되어 있는 값을 그대로 입력해 주면 됩니다.
그리고 이 옵션값으로 ‘saved’로 명시해 줄 경우에는 이는 기본 메뉴 엔트리가 GRUB_SAVEDEFAULT 옵션이나 grub-set-default 명령으로 저장됨을 의미합니다.
4.2 GRUB_SAVEDEFAULT
GRUB_DEFAULT로 선택한 부트 메뉴엔트리를 기본 엔트리로 저장할 것인가를 설정하는 옵션으로, true 또는 false로 설정합니다. 이 옵션은 앞서 살펴본 옵션과 함께 사용합니다.
4.3 GRUB_TIMEOUT
부트 메뉴에서 키보드 입력이 없을시 기본 부트 엔트리로 부팅될때까지의 대기 시간입니다. 지정된 시간 동안 키보드 입력이 없으면 기본 엔트리로 부팅이 이뤄집니다. 보통 5~10초 정도가 적당하며, 다른 운영채제가 설치되어 있지 않을때에는 ‘0’으로 설정하여 바로 부팅이 이뤄지게 끔 하는 것도 좋습니다. 기본값은 5초입니다. 무한정 대기는 ‘-1’값입니다.
4.4 GRUB_HIDDEN_TIMEOUT
이 옵션은 지정된 시간동안 부트 메뉴가 나타나지 않도록 하거나 건너뛸 수 있도록 해 주는 옵션으로, 주어진 시간동안에 키보드 입력이 없으면 부트 메뉴가 보이지 않고 바로 기본 부트 엔트리로 부팅이 이뤄지게 됩니다. 이 옵션은 GRUB_HIDDDEN_TIMEOUT_QUIET 옵션과 햠께 사용합니다.
4.5 GRUB_HIDDEN_TIMEOUT_QUIET
GRUB_HIDDEN_TIMEOUT 옵션으로 시간을 명시한 경우 지정한 시간 동안 부트 메뉴가 나오지 않을 때 시간 카운트다운 타이머를 켤것인지 끌 것인지를 설정하는 옵션으로, 기본값은 설정되어 있지 않으며, false값으로 설정되면 카운트다운 타이머가 동작하게 되며, true로 설정되면 타이머가 동작하질 않습니다.
4.6 GRUB_CMDLINE_LINUX
커널에 전달할 인자값을 지정하는 옵션으로 커널 메시지가 보이지 않도록 하는 quiet, 부트스플래시 동작모드(verbose,splash), vga해상도 등의 인자값을 설정해 줄 수 있습니다.
4.7 GRUB_CMDLINE_LINUX_DEFAULT
이 옵션은 GRUB_CMDLINE_LINUX 옵션으로 설정한 후 기본 엔트리에 추가할 인자만 설정해 주는 옵션입니다.
4.8 GRUB_GFXMODE
부트화면의 해상도를 설정하는 옵션입니다. 기본값은 ‘auto’이며, 1280x1024x24와 같이 ‘가로x세로x색상수’로 설정해 줍니다.
4.9 GRUB_BACKGROUND
부트 메뉴의 바탕화면에 이미지를 적용할 수 있는데, 지원하는 이미지 포맷으로는 png,tga,jpg등입니다.
4.10 GRUB_THEME
테마를 이용하여 부트 메뉴의 그래픽 환경을 꾸밀 수 있는데, GRUB_BACKGROUND 옵션으로 부트 화면의 이미지를 설정해 줄 수 있지만, 이 옵션을 사용하면 더 나은 기능을 사용할 수 있습니다. 테마를 통하여 애니메이션 효과라든지 원하는 글꼴을 사용할 수 있고, 진행 상태바(progress bar)를 지원하여 부트 과정을 좀 더 화려하고 기능적으로 꾸밀 수 있습니다.
새로운 테마를 추가한 후에는 이 옵션으로 추가한 해당 테마를 지정해 주어야 합니다.
4.11 GRUB_DISTRIBUTOR
부트 엔트리명에 추가할 접두어로 이 옵션을 사용하면 부팅시 부트 엔트리 앞에 이 옵션으로 지정한 단어가 엔트리명 앞에 추가됩니다.
5. GRUB2 부트 메뉴 화면 바꾸기
No1.Linux 2016 스프링 버전에서는 PCLinuxOS의 GRUB2 테마를 변형하여 사용하고 있는데, 다른 리눅스 배포판이나 kde-look.org 또는 gnome-look.org 사이트로부터 테마를 가져와 적용하는 방법을 알아봅니다. 먼저 테마를 적용하기 앞서 예쁜 이미지를 준비하여 그 이미지로 부트 화면에 적용하는 방법을 알아보겠습니다.
5.1 GRUB_BACKGROUND 옵션을 이용한 부트 메뉴 화면 꾸미기
/usr/share/wallpapers 디렉토리에 준비한 이미지를 복사한 다음에 /etc/default/grub 파일의 GRUB_BACKGROUND 옵션으로 다음과 같이 이미지 위치를 변경합니다.이 작업은 시스템 사용자 권한으로 해야 하므로, 현재 일반 사용자 계정을 사용한다면 su 명령으로 루트 권한을 획득한 후에 작업을 하셔야 합니다.
GRUB_BACKGROUND=/usr/share/wallpapers/wildflower.jpg |
그리고 테마 옵션(GRUB_THEME)이 적용되지 않도록 이 옵션 앞에 주석(#)처리를 해 놓습니다.
#GRUB_THEME=/boot/grub2/themes/no1linux/themes.txt |
GRUB2 설정이 변경되면 반드시 적용될 수 있도록 update-grub2 명령을 실행해 주어야 합니다. 이 명령을 실행하지 않으면 설정파일을 변경하더라도 아무런 변화가 없음을 주의하시기 바랍니다. 그러므로 다음과 같이 이 명령을 실행해 줍니다.
[root@localhost ~]# update-grub2 |
시스템을 재시작하여 여러분이 준비한 이미지가 부트 메뉴의 바탕화면으로 나오는지를 확인해 보시기 바랍니다.
5.2 GRUB2 테마로 부트 화면 꾸미기
이번에는 배포판이나 kde-look.org 또는 gnome-look.org 사이트로부터 테마를 구하여 설정하는 방법입니다. 먼저 여러분이 좋아하는 테마를 구합니다. No1.Linux 2016 버전에서 지원하는 no1linux 테마를 변형하여 적용해 보겠습니다.
step1. 먼저 /boot/grub2/themes 경로로 이동합니다.
[root@no1linux ~]# cd /boot/grub2/themes |
step2. no1linux 경로를 no2linux로 복사합니다.
[root@no1linux themes]# cp -r no1linux no2linux |
step3. 앞서 GRUB_BACKGROUND 옵션으로 명시해 주었던 이미지를 사용해서 no2linux 테마의 바탕화면으로 대체해 봅니다. 그러면 no2linux 경로로 이동하여 background.png 파일을 변경합니다.
[root@no1linux themes]# cd no2linux [root@no1linux no2linux]# /bin/cp /usr/share/wallpapers/wildflower.png background.png |
[참고] cp 명령을 실행할 경우 덮어쓰기가 안되는데 이것은 알리어스 기능으로 파일을 복사할 때 물어보기 옵션이 추가되어 있기 때문입니다. cp명령 실행시 알리어스가 동작하지 않도록 절대경로를 사용하여 명령어가 수행될 수 있도록 한 것임을 참고하세요.
step4. /etc/default/grub 파일을 에디터로 열어서 GRUB_THEMES의 값을 no1linux에서 no2linux으로 수정합니다. GRUB_BACKGROUND 옵션을 살펴볼 때 GRUB_THEME 옵션앞에 주석처리해 놓았을때 주석을 꼭 제거해 주어야 합니다. 그리고 GRUB_BACKGROUND 옵션은 동작하지 않도록 주석처리해 줍니다.
GRUB_THEME=/boot/grub2/themes/no2linux/theme.txt#GRUB_BACKGROUND=/usr/share/wallpapers/wildflower.jpg |
step5. update-grub2 명령을 실행하여 GRUB2 부트로더의 설정 변경이 적용될 수 있도록 합니다. 오류없이 적용되었으면 reboot 명령으로 시스템을 재시작합니다.
[root@no1linux no2linux]# update-grub2[root@no1linux no2linux]# reboot |
step6. 새로운 바탕화면이 적용되었음을 확인할 수 있습니다.
출처 : http://no1linux.org/hottips/22876