검색

26.5. GRUB 2 구성 파일 사용자 지정

download PDF

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 값은 패키지 유형 커널의 최신 설치된 커널 이름으로 설정됩니다. 이는 UPDATEDEFAULTDEFAULTKERNEL 지시문으로 /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 파일을 수정해도 사용자 지정 메뉴를 만드는 데는 영향을 미치지 않습니다.

  1. 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 스크립트의 실행 가능 부분은 보존해야 합니다.
  2. /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
    }
  3. 다음을 제외한 /etc/grub.d/ 디렉터리에서 모든 파일을 제거합니다.

    • 00_header,
    • 40_custom,
    • 01_users (있는 경우)
    • README.

      또는 /etc/grub2.d/ 디렉터리에 파일을 유지하려면 EgressIP a-x <file_name> 명령을 실행하여 실행할 수 없도록 설정합니다.

  4. 원하는 대로 40_custom 파일의 메뉴 항목을 편집, 추가 또는 제거합니다.
  5. 다음과 같이 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
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.