::::::::::::::::::: 넘버원 리눅스에서 부트로더 Grub2 사용법 ::::::::::::
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" |
/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' { |
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 |
시스템을 재시작하여 여러분이 준비한 이미지가 부트 메뉴의 바탕화면으로 나오는지를 확인해 보시기 바랍니다.
<No1.Linux 2016 GRUB2 기본 부트 화면> < GRUB_BACKGROUND 옵션으로 부트 화면의 바탕화면 지정시>
상기 오른쪽 그림과 같이 바탕화면이 변경되었음을 확인할 수 있습니다.
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. 새로운 바탕화면이 적용되었음을 확인할 수 있습니다.
6. grub-customizer를 이용한 부트로더 관리
No1.Linux에서는 GRUB2 설정을 손쉽게 도와주는 그래픽 인터페이스 환경의 설정도구인 grub-customizer를 지원합니다. 이 도구를 이용하면 GRUB2 설정뿐만 아니라 지금까지 살펴보았던 부트 화면의 바탕화면까지 쉽게 설정할 수 있습니다.
step1. apt-get 도구또는 시냅틱(synatic)를 이용하여 grub-customizer를 설치합니다.
[root@no1linux ~]# apt-get install grub-customizer |
step2. grub2-customizer를 실행합니다. [시작메뉴 > 기타 프로그램 > 설정 > Grub2 customizer]
step3. [편집(Edit) > 새로만들기(New)]를 선택합니다.
step4. Type 항목을 Other에서 Linux로 변경합니다.
step5. Linux로 Type를 변경하면 파티션과 램초기 디스크 그리고 커널 이미지를 설정할 수 있습니다. 리눅스가 설치되어 있는 파티션과 initrd.img와 vmlinuz를 설정합니다.
step8. [Source] 탭을 클릭하여 루트 파티션과 커널 이미지와 초기 램디스크 이름을 확인합니다. 수정할 부분이 있으면 수정합니다. 이상이 없으면 [확인(OK)] 버튼을 클릭합니다.
step9. 새로운 부트엔트리가 추가됩니다.
step10. 추가된 부트엔트리를 클릭하여 엔트리명을 변경합니다.
step11. [전역 설정(General settings)] 탭을 클릭하여 엔트리 순서와 시각화, 커널 파라미터 등을 설정합니다.
step12. [모양새(Appearance settings] 탭을 클릭하여 해상도및 바탕화면 이미지를 설정합니다.
step13. [고급설정(Advanced settings)]를 클릭하여 /etc/default/grub 파일에 들어갈 옵션을 선택합니다.
step14. 모든 선택과 설정이 완료되었으면 [저장(Save)] 도구 아이콘을 클릭합니다.
step15. [파일(File]]메뉴를 클릭하여 [MBR에 설치(Install to MBR)]를 선택하고, MBR에 설치 팝업창이 뜨면 첫번째 하드 디스크 장치를 설정한 후에 [확인] 버튼을 클릭합니다.
step16. 부트로더가 성공적으로 설치되었다는 창이 뜨면 [확인] 버튼을 클릭하고나서 시스템을 재시작하여 변경이 적용되었는지를 확인하고 추가한 새 엔트리를 선택하여 정상적으로 부팅이 이뤄지는지를 확인합니다. 만일 오류가 발생된다면 원래의 부트 엔트리로 부팅하여 부트로더 설정을 다시 변경해 줍니다.
7. 윈도 운영체제 추가하기
GRUB2 부트로더를 설치한 후 윈도 운영체제가 부트 화면에 나오지 않을때 윈도 부트 엔트리를 추가하는 방법을 알아보죠.
7.1 os-prober를 이용하는 방법
윈도 운영체제가 설치되어 있는지를 탐색해서 부트로더 메뉴에 추가할 수 있도록 GRUB2에서는 os-prober 스크립트를 지원합니다. 이 스크립트를 이용하여 다른 파티션에 설치되어 있는 윈도 운영체제에 대한 부트 엔트리를 추가할 수 있습니다.GRUB2의 GRUB_DISABLE_OS_PROBE 옵션 값으로 다른 운영체제에 대한 부트 엔트리를 추가할 것인지 말건지를 설정할 수 있는데, 이 값이 true로 설정되면 리눅스 외에는 다른 운영체제를 탐색하지 않으므로 다른 운영체제에 대한 부트 엔트리가 추가되지 않습니다. 반대로 false로 설정되면 지동 탐색하여 다른 운영체제에 대한 부트 엔트리가 추가됩니다. 따라서 윈도 운영체제에 대한 부트 엔트리가 추가되도록 하기 위해선 /etc/default/grub 파일에서 이 옵션값을 다음과 같이 변경해 주어야 합니다.
GRUB_DISABLE_OS_PROBE=false |
그런 다음에 update-grub2 명령을 실행하면 윈도 운영체제를 탐색해서 부트 엔트리를 추가됨을 확인할 수 있습니다..
[root@localhost grub2]# update-grub2 |
재부팅하기 전에 /boot/grub2/grub.cfg 설정 파일에서 ### BEGIN /etc/grub.d/30_os-prober #### 설정 부분에 다음과 같이 윈도7에 대한 부트 엔트리가 추가되었는지를 확인해 보시기 바랍니다.
### BEGIN /etc/grub.d/30_os-prober ### menuentry 'Windows 7 (loader) (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-EE0000D50000A6A5' { insmod part_msdos insmod ntfs set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 EE0000D50000A6A5 else search --no-floppy --fs-uuid --set=root EE0000D50000A6A5 fi parttool ${root} hidden- chainloader +1 } |
윈도 부트 엔트리가 추가되었음을 확인한 후에 시스템을 재시작하여 부트 메뉴에 윈도 운영체제로 부팅될 수 있도록 엔트리가 나오는지 확인하면 됩니다.
7.2 os-prober를 이용하지 않으려면
os-prober를 이용하지 않고 다른 운영체제에 대한 부트 엔트리를 추가하려면 먼저 GRUB_DISABLE_OS_PROBE 옵션값을 true로 설정해야 합니다. 여기서 잠시 "리눅스의 모든 것-리눅스를 알면 안드로이드가 보인다." 책의 트러블 슈팅(363쪽 트러블슈팅4)를 보면 false로 설명되어 있으나, false가 아니라 true로 해야 함이 옮으므로 독자분들은 이 부분을 혼동하지 말기 바랍니다
GRUB_DISABLE_OS_PROBE=false |
그리고나서 /etc/grub.d/ 디렉토리에 다음과 같은 스크립트를 하나 생성하는데, 스크립트명은 '40_스크립트명' 형태로 만들어 줍니다. 예를 들어 40_windows로 만들어 봅니다.
#!/bin/sh set -e echo "#윈도 운영체제에 대한 부트 엔트리를 추가합니다." cat << EOF menuentry "windows7" { set root=(hd0,1) chainloader (hd0,1)+1 } EOF |
상기 설정에서 set root=로 명시해 주는 파티션은 윈도가 설치되어 있는 파티션으로 이를 확인하기 위해서는 df 명령을 다음과 같이 실행해 보면 됩니다.
[root@localhost grub.d]# df -T |egrep "ntfs|fuseblk" | awk '{print $1}' |
40_windows 파일이 실행될 수 있도록 실행 권한을 부여합니다.
[root@localhost grub.d]# chmod 755 40_windows |
그런 다음 update-grub2 명령으로 부트 정보를 업데이트하고나서 /boot/grub2/grub.cfg 파일에서 ### BEGIN /etc/grub.d/40_windows #### 설정 부분에 윈도 부트 엔트리가 추가되었는지를 확인하고나서 시스템을 재시작하였을때 부트 엔트리가 추가되었는지를 확인하면 됩니다.
8. 넘버원 리눅스 라이브 부팅
넘버원 리눅스의 모체인 PCLinuxOS 새버전이나 넘버원 리눅스 다른 버전을 라이브로 부팅하고자 하는 경우에는 /etc/grub.d/11_no1linux 스크립트를 다음과 같이 생성하면 됩니다.
[root@localhost grub.d]# cat > /etc/grub.d/11_no1linux #!/bin/shset -e cat <<EOF menuentry "No1.Linux 2016 LiveCD" { set root=(hd1,1) linux /vmlinuz livecd=livecd root=/dev/rd/3 quiet fromhd vga=791 splash=silent initrd /initrd.gz } EOF |
[참고] 상기 스크립트에서 livecd.sqfs 파일이 있는 파티션을 정확히 지정해 주어야 합니다.
11_no1lnux 스크립트 파일이 실행될 수 있도록 실행 권한을 부여한 후에 update-grub2 명령으로 부트 정보를 업데이트한 후 시스템을 재시작하면 됩니다.
9. 테마 아이콘 적용하기
부트 메뉴 화면에서 부트 엔트리앞에 아이콘이 나오도록 하는 방법을 알아봅니다. 부트 메뉴 화면에서 아이콘 디스플레이는 /boot/grub2/grub.cfg 파일의 부트 엔트리 설정에서 --class로 정의된 단어에 해당되는 아이콘 파일이 /boot/grub2/themes/테마명/icons 디렉토리에 존재해야 합니다. No1.Linux의 경우 --class의 값이 no1_linux로 되어 있다면 테마 경로의 icons 디렉토리에 no1_linux.png 파일이 있어야 부트 메뉴 화면에서 아이콘이 보여집니다. 다른 부트엔트리 마찬가지로 --class로 정의된 문자에 해당되는 아이콘 파일이 보여지게 됩니다.
만일 윈도 부트 엔트리의 아이콘이 나타나도록 하려면 --class로 windows로 정의되었다면 icons 디렉토리에 windows.png 파일이 넣어주면 됩니다. 이 때 png 파일은 36x36또는 38x38의 사이즈로 만들어주면 됩니다.