26.5. GRUB 2 구성 파일 사용자 지정
GRUB 2 스크립트는 사용자의 컴퓨터를 검색하고 스크립트가 찾은 운영 체제에 따라 부팅 메뉴를 빌드합니다. 최신 시스템 부팅 옵션을 반영하기 위해 커널이 업데이트되거나 새 커널이 추가될 때 부팅 메뉴가 자동으로 다시 빌드됩니다.
그러나 사용자는 특정 항목이 포함된 메뉴를 빌드하거나 특정 순서로 항목을 포함할 수 있습니다. GRUB 2를 사용하면 부팅 메뉴의 기본 사용자 지정을 통해 사용자에게 화면에 실제로 표시되는 내용을 제어할 수 있습니다.
GRUB 2는 일련의 스크립트를 사용하여 메뉴를 빌드합니다. /etc/grub.d/
디렉토리에 있습니다. 다음 파일이 포함되어 있습니다.
-
00_header
:/etc/default/grub
파일에서 GRUB 2 설정을 로드합니다. -
01_users
.cfg
파일에서 슈퍼 유저 암호를 읽습니다. Red Hat Enterprise Linux 7.0 및 7.1에서 이 파일은 설치 중에 부팅 암호를 정의한 경우에만 생성되었으며 일반 텍스트에 정의된 암호가 포함되었습니다. -
10_
Linux - Red Hat Enterprise Linux의 기본 파티션에서 커널을 찾습니다. -
30_OS-prober
다른 파티션에 있는 운영 체제에 대한 항목을 빌드합니다. -
40_custom
, 추가 메뉴 항목을 만드는 데 사용할 수 있는 템플릿.
/etc/grub.d/
디렉토리의 스크립트는 알파벳순으로 읽히므로 특정 메뉴 항목의 부팅 순서를 변경하기 위해 이름을 변경할 수 있습니다.
부팅 가능한 커널 목록을 숨기려면 /etc/default/grub
에서 GRUB_TIMEOUT
을 0으로 설정하지 마십시오. 이러한 설정을 사용하면 시스템은 항상 기본 메뉴 항목에서 즉시 부팅되고 기본 커널이 부팅되지 않으면 이전 커널을 부팅할 수 없습니다.
대신, 시스템이 시작될 때 GRUB 2가 부팅 가능한 커널 목록을 표시하지 못하도록하기 위해 /etc/default/grub
파일에서 GRUB_TIMEOUT_STYLE
옵션을 설정합니다.
GRUB_TIMEOUT_STYLE=hidden
목록을 부팅 할 때 목록을 표시하려면 키보드 또는 기타 직렬 콘솔을 사용하여 BIOS 정보가 표시되는 경우 영숫자 키를 누르고 GRUB 2 메뉴가 표시됩니다.
26.5.1. 기본 부팅 항목 변경
기본적으로 /etc/default/grub
파일에 있는 GRUB_DEFAULT
지시문의 키는 저장된
용어입니다. GRUB 2는 /boot/grub2/grubenv
에 있는 GRUB 2 환경 파일에 saved_entry
지시문으로 지정한 커널을 로드하도록 지시합니다. GRUB 2 환경 파일을 업데이트하는 grub2-set-default
명령을 사용하여 다른 GRUB 2 레코드를 기본값으로 설정할 수 있습니다.
기본적으로 saved_entry
값은 패키지 유형 커널의 최신 설치된 커널 이름으로 설정됩니다. 이는 UPDATEDEFAULT
및 DEFAULTKERNEL
지시문으로 /etc/sysconfig/kernel
에 정의되어 있습니다. root
사용자가 다음과 같이 파일을 볼 수 있습니다.
~]# cat /etc/sysconfig/kernel # UPDATEDEFAULT specifies if new-kernel-pkg should make # new kernels the default UPDATEDEFAULT=yes # DEFAULTKERNEL specifies the default kernel package type DEFAULTKERNEL=kernel
DEFAULTKERNEL
지시문은 기본값으로 사용할 패키지 유형을 지정합니다. DEFAULTKERNEL
이 패키지 유형 kernel로 설정되는 동안 kernel-debug 유형의 패키지를 설치하면 기본 커널 이 변경되지 않습니다.
GRUB 2는 saved_entry
지시문의 키로 숫자 값을 사용하여 운영 체제가 로드되는 기본 순서를 변경할 수 있도록 지원합니다. 먼저 로드해야 하는 운영 체제를 지정하려면 해당 번호를 grub2-set-default
명령에 전달합니다. 예를 들면 다음과 같습니다.
~]# grub2-set-default 2
목록의 메뉴 항목의 위치는 0으로 시작하는 숫자로 표시됩니다. 따라서 위 예제에서는 세 번째 항목이 로드됩니다. 이 값은 설치할 다음 커널의 이름으로 덮어씁니다.
시스템에서 항상 특정 메뉴 항목을 사용하도록 하려면 메뉴 항목 이름을 /etc/default/grub
파일의 GRUB_DEFAULT
지시문에 대한 키로 사용합니다. 사용 가능한 메뉴 항목을 나열하려면 root
로 다음 명령을 실행합니다.
~]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
파일 이름 /etc/grub2.cfg
는 architecture에 종속된 grub.cfg
파일에 대한 심볼릭 링크입니다. 안정성의 이유로 이 장의 다른 예에서는 심볼릭 링크가 사용되지 않습니다. 특히 시스템을 복구할 때 절대 경로를 사용하는 것이 좋습니다.
/etc/default/grub
을 변경하려면 다음과 같이 grub.cfg
파일을 다시 빌드해야 합니다.
BIOS 기반 시스템에서
root
로 다음 명령을 실행합니다.~]# grub2-mkconfig -o /boot/grub2/grub.cfg
UEFI 기반 시스템에서
root
로 다음 명령을 실행합니다.~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
26.5.2. 메뉴 항목 편집
다른 매개 변수를 사용하여 새 GRUB 2 파일을 준비해야 하는 경우 /etc/default/grub
파일에서 GRUB_CMDLINE_LINUX
키 값을 편집합니다. GRUB 2 부팅 메뉴에 매개 변수를 추가하는 것과 유사하게 GRUB_CMDLINE_LINUX
키에 대해 여러 매개변수를 지정할 수 있습니다. 예를 들면 다음과 같습니다.
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,9600n8"
여기서 console=tty0
은 첫 번째 가상 터미널이며 console=ttyS0
은 사용할 직렬 터미널입니다.
/etc/default/grub
을 변경하려면 다음과 같이 grub.cfg
파일을 다시 빌드해야 합니다.
BIOS 기반 시스템에서
root
로 다음 명령을 실행합니다.~]# grub2-mkconfig -o /boot/grub2/grub.cfg
UEFI 기반 시스템에서
root
로 다음 명령을 실행합니다.~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
26.5.3. 새 항목을 추가
grub2-mkconfig
명령을 실행할 때 GRUB 2는 /etc/grub.d/
디렉터리에 있는 파일을 기반으로 Linux 커널 및 기타 운영 체제를 검색합니다. /etc/grub.d/10_linux
스크립트는 동일한 파티션에 설치된 Linux 커널을 검색합니다. /etc/grub.d/30_os-prober
스크립트는 다른 운영 체제를 검색합니다. 커널을 업데이트할 때 부팅 메뉴에 메뉴 항목도 자동으로 추가됩니다.
/etc/grub.d/
디렉터리에 있는 40_custom
파일은 사용자 지정 항목의 템플릿이며 다음과 같습니다.
#!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above.
이 파일은 편집하거나 복사할 수 있습니다. 최소한 올바른 메뉴 항목에는 다음을 포함해야 합니다.
menuentry "<Title>"{ <Data> }
26.5.4. 사용자 지정 메뉴 생성
메뉴 항목을 자동으로 업데이트하지 않으려면 사용자 지정 메뉴를 만들 수 있습니다.
진행하기 전에 나중에 변경 사항을 복원해야 하는 경우 /etc/grub.d/
디렉터리의 콘텐츠를 백업합니다.
/etc/default/grub
파일을 수정해도 사용자 지정 메뉴를 만드는 데는 영향을 미치지 않습니다.
-
BIOS 기반 시스템에서
/boot/grub2/grub.cfg
또는 UEFI 머신에서 /boot/grub2/grub.cfg 콘텐츠를 복사하여/boot/efi/EFI/redhat/grub.cfg
.grub.cfg
의 콘텐츠를 기존 헤더 줄 아래의/etc/grub.d/40_custom
파일에 넣습니다.40_custom
스크립트의 실행 가능 부분은 보존해야 합니다. /etc/grub.d/40_custom
파일에 넣은 콘텐츠에서 사용자 지정메뉴를 생성하는 데 메뉴 항목
블록만 필요합니다./boot/grub2/grub.cfg
및/boot/efi/EFI/redhat/grub.cfg
파일에는메뉴 항목
블록 아래에 함수 사양 및 기타 콘텐츠가 포함될 수 있습니다. 이러한 불필요한 줄을 이전 단계에서40_custom
파일에 넣으면 내용을 지우십시오.사용자 지정
40_custom
스크립트의 예입니다.#!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. menuentry 'First custom entry' --class red --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.10.0-67.el7.x86_64-advanced-32782dd0-4b47-4d56-a740-2076ab5e5976' { load_video set gfxpayload=keep insmod gzio insmod part_msdos insmod xfs set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 7885bba1-8aa7-4e5d-a7ad-821f4f52170a else search --no-floppy --fs-uuid --set=root 7885bba1-8aa7-4e5d-a7ad-821f4f52170a fi linux16 /vmlinuz-3.10.0-67.el7.x86_64 root=/dev/mapper/rhel-root ro rd.lvm.lv=rhel/root vconsole.font=latarcyrheb-sun16 rd.lvm.lv=rhel/swap vconsole.keymap=us crashkernel=auto rhgb quiet LANG=en_US.UTF-8 initrd16 /initramfs-3.10.0-67.el7.x86_64.img } menuentry 'Second custom entry' --class red --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-0-rescue-07f43f20a54c4ce8ada8b70d33fd001c-advanced-32782dd0-4b47-4d56-a740-2076ab5e5976' { load_video insmod gzio insmod part_msdos insmod xfs set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 7885bba1-8aa7-4e5d-a7ad-821f4f52170a else search --no-floppy --fs-uuid --set=root 7885bba1-8aa7-4e5d-a7ad-821f4f52170a fi linux16 /vmlinuz-0-rescue-07f43f20a54c4ce8ada8b70d33fd001c root=/dev/mapper/rhel-root ro rd.lvm.lv=rhel/root vconsole.font=latarcyrheb-sun16 rd.lvm.lv=rhel/swap vconsole.keymap=us crashkernel=auto rhgb quiet initrd16 /initramfs-0-rescue-07f43f20a54c4ce8ada8b70d33fd001c.img }
다음을 제외한
/etc/grub.d/
디렉터리에서 모든 파일을 제거합니다.-
00_header
, -
40_custom
, -
01_users
(있는 경우) README
.또는
/etc/grub2.d/
디렉터리에 파일을 유지하려면 EgressIPa-x <file_name>
명령을 실행하여 실행할 수 없도록 설정합니다.
-
-
원하는 대로
40_custom
파일의 메뉴 항목을 편집, 추가 또는 제거합니다. 다음과 같이
grub2-mkconfig -o
명령을 실행하여grub.cfg
파일을 다시 빌드합니다.BIOS 기반 시스템에서
root
로 다음 명령을 실행합니다.~]# grub2-mkconfig -o /boot/grub2/grub.cfg
UEFI 기반 시스템에서
root
로 다음 명령을 실행합니다.~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg