웹사이트 검색

LFCS: GRUB(Grand Unified Bootloader) 구성 및 문제 해결 방법 - 13부


2016년 2월 2일부터 발효되는 LFCS 인증 시험 목표의 최근 변경으로 인해 여기에 게시된 LFCS 시리즈에 필요한 주제를 추가하게 되었습니다. 이 시험을 준비하려면 LFCE 시리즈도 따라하는 것이 좋습니다.

이 기사에서는 GRUB를 소개하고 부트 로더가 필요한 이유와 이것이 시스템에 다양성을 추가하는 방법을 설명합니다.

컴퓨터의 전원 버튼을 누른 시점부터 완전한 기능을 갖춘 시스템을 얻을 때까지의 Linux 부팅 프로세스는 다음과 같은 상위 수준 순서를 따릅니다.

  1. 1. POST(Power-On Self Test)라는 프로세스는 컴퓨터의 하드웨어 구성 요소에 대한 전반적인 검사를 수행합니다.
  2. 2. POST가 완료되면 부트 로더에 제어권이 전달되고, 부트 로더는 initramfs와 함께 메모리에 Linux 커널을 로드합니다. )을 실행하고 있습니다. Linux에서 가장 많이 사용되는 부트 로더는 GRand 통합 부트 로더, 즉 줄여서 GRUB입니다.
  3. 3. 커널은 하드웨어를 확인하고 액세스한 다음 초기 프로세스(주로 일반 이름 "init"로 알려짐)를 실행합니다. 서비스.

이 시리즈의 7부('SysVinit, Upstart 및 Systemd')에서는 최신 Linux 배포판에서 사용되는 서비스 관리 시스템과 도구를 소개했습니다. 계속 진행하기 전에 해당 기사를 검토해 보는 것이 좋습니다.

GRUB 부트로더 소개

두 가지 주요 GRUB 버전(v1은 때로 GRUB 레거시v2라고도 함)이 최신 시스템에서 발견될 수 있습니다. 배포판은 최신 버전에서 기본적으로 v2를 사용합니다. 현재 Red Hat Enterprise Linux 6 및 그 파생 제품만 v1을 계속 사용하고 있습니다.

따라서 이 가이드에서는 주로 v2의 기능에 중점을 둘 것입니다.

GRUB 버전에 관계없이 부트로더를 사용하면 사용자는 다음을 수행할 수 있습니다.

  1. 1). 사용할 다른 커널을 지정하여 시스템 작동 방식을 수정합니다.
  2. 2). 부팅할 대체 운영 체제 중에서 선택하고
  3. 3). 무엇보다도 부팅 옵션을 변경하려면 구성 스탠자를 추가하거나 편집하세요.

현재 GRUBGNU 프로젝트에 의해 유지 관리되며 해당 웹사이트에 잘 문서화되어 있습니다. 이 가이드를 진행하는 동안 GNU 공식 문서를 사용하는 것이 좋습니다.

시스템이 부팅되면 기본 콘솔에 다음 GRUB 화면이 표시됩니다. 처음에는 대체 커널 중에서 선택하라는 메시지가 표시되고(기본적으로 시스템은 최신 커널을 사용하여 부팅됩니다) GRUB 명령줄(c 사용)을 입력할 수 있습니다. 또는 부팅 옵션을 편집합니다(e 키를 눌러).

이전 커널로 부팅하는 것을 고려하는 이유 중 하나는 제대로 작동했고 업그레이드 후 "작동"을 시작한 하드웨어 장치입니다(AskUbuntu에서 이 링크를 참조하세요). 포럼을 참조하세요).

GRUB v2 구성은 부팅 시 /boot/grub/grub.cfg 또는 /boot/grub2/grub.cfg에서 읽혀지는 반면, /boot/grub/grub.conf 또는 /boot/grub/menu.lstv1에서 사용됩니다. 이러한 파일은 직접 편집할 수 없으며 /etc/default/grub의 내용과 /etc/grub.d에 있는 파일을 기반으로 수정됩니다.

CentOS 7에서 시스템을 처음 설치할 때 생성되는 구성 파일은 다음과 같습니다.

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

온라인 문서 외에도 다음과 같이 info를 사용하여 GNU GRUB 매뉴얼을 찾을 수도 있습니다.

info grub

/etc/default/grub에 사용할 수 있는 옵션에 특히 관심이 있는 경우 구성 섹션을 직접 호출할 수 있습니다.

info -f grub -n 'Simple configuration'

위의 명령을 사용하면 GRUB_TIMEOUT이 초기 화면이 나타나는 순간부터 사용자가 방해하지 않는 한 시스템 자동 부팅이 시작되는 순간까지의 시간을 설정한다는 것을 알 수 있습니다. 이 변수를 -1로 설정하면 사용자가 선택할 때까지 부팅이 시작되지 않습니다.

여러 운영 체제 또는 커널이 동일한 시스템에 설치된 경우 GRUB_DEFAULT에는 GRUB 초기 화면에서 기본적으로 부팅하기 위해 선택해야 하는 OS 또는 커널 항목을 나타내는 정수 값이 필요합니다. 항목 목록은 위에 표시된 스플래시 화면뿐만 아니라 다음 명령을 사용하여 볼 수도 있습니다.

CentOS 및 openSUSE의 경우:

awk -F\' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg

우분투에서는:

awk -F\' '$1=="menuentry " {print $2}' /boot/grub/grub.cfg

아래 이미지에 표시된 예에서 커널 버전 3.10.0-123.el7.x86_64(4번째 항목)으로 부팅하려면 GRUB_DEFAULT 를 설정해야 합니다. 에서 3까지(항목은 내부적으로 0부터 시작하여 번호가 지정됨) 다음과 같습니다.

GRUB_DEFAULT=3

특별히 관심을 끄는 마지막 GRUB 구성 변수 중 하나는 커널에 옵션을 전달하는 데 사용되는 GRUB_CMDLINE_LINUX입니다. GRUB를 통해 커널로 전달할 수 있는 옵션은 커널 매개변수 파일과 man 7 bootparam에 잘 설명되어 있습니다.

CentOS 7 서버의 현재 옵션은 다음과 같습니다.

GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"

기본 커널 매개변수를 수정하거나 추가 옵션을 전달하려는 이유는 무엇입니까? 간단히 말해서, 커널이 자체적으로 결정할 수 없는 특정 하드웨어 매개변수를 커널에 알려야 하거나 커널이 감지하는 값을 무시해야 하는 경우가 있을 수 있습니다.

얼마 전 10년 된 내 노트북에서 Slackware의 파생 버전인 Vector Linux를 사용했을 때 이런 일이 일어났습니다. 설치 후 내 비디오 카드에 대한 올바른 설정을 감지하지 못했기 때문에 작동하려면 GRUB를 통해 전달된 커널 옵션을 수정해야 했습니다.

또 다른 예는 유지 관리 작업을 수행하기 위해 시스템을 단일 사용자 모드로 전환해야 하는 경우입니다. GRUB_CMDLINE_LINUX에 Single이라는 단어를 추가하고 재부팅하면 됩니다.

GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet single"

/etc/defalt/grub를 편집한 후 update-grub(Ubuntu) 또는 grub2-mkconfig -o /boot/grub2/grub을 실행해야 합니다. cfg(CentOSopenSUSE)를 사용하여 나중에 grub.cfg를 업데이트합니다(그렇지 않으면 부팅 시 변경 사항이 손실됩니다).

이 명령은 앞서 언급한 부팅 구성 파일을 처리하여 grub.cfg를 업데이트합니다. 이 방법을 사용하면 변경 사항이 영구적으로 유지되는 반면, 부팅 시 GRUB를 통해 전달된 옵션은 현재 세션 동안에만 지속됩니다.

Linux GRUB 문제 해결

두 번째 운영 체제를 설치하거나 사람의 실수로 인해 GRUB 구성 파일이 손상된 경우 시스템을 다시 정상 상태로 되돌리고 다시 부팅할 수 있는 방법이 있습니다.

초기 화면에서 c를 눌러 GRUB 명령줄을 가져오고(e를 눌러 기본 부팅 옵션을 편집할 수도 있음을 기억하세요) 도움말을 사용하여 사용 가능한 옵션을 가져옵니다. GRUB 프롬프트의 명령:

설치된 장치와 파일 시스템을 나열하는 ls에 중점을 두고 무엇을 발견하는지 조사하겠습니다. 아래 이미지에서는 4개의 하드 드라이브(hd0 ~ hd3)가 있음을 확인할 수 있습니다.

hd0만 분할된 것 같습니다(msdos1msdos2에서 알 수 있듯이, 여기서 12). 은 파티션 번호이고 msdos는 파티션 구성표입니다.

이제 hd0(msdos1)의 첫 번째 파티션을 검사하여 거기에서 GRUB를 찾을 수 있는지 살펴보겠습니다. 이 접근 방식을 사용하면 Linux를 부팅할 수 있으며 다른 고급 도구를 사용하여 구성 파일을 복구하거나 필요한 경우 GRUB를 완전히 다시 설치할 수 있습니다.

ls (hd0,msdos1)/

강조 표시된 영역에서 볼 수 있듯이 이 파티션에서 grub2 디렉터리를 찾았습니다.

GRUB이 (hd0,msdos1)에 있다고 확신하면 GRUB에 구성 파일을 찾을 수 있는 위치를 알려주고 메뉴를 실행하도록 지시해 보겠습니다.

set prefix=(hd0,msdos1)/grub2
set root=(hd0,msdos1)
insmod normal
normal

그런 다음 GRUB 메뉴에서 항목을 선택하고 Enter를 눌러 해당 항목을 사용하여 부팅합니다. 시스템이 부팅되면 grub2-install /dev/sdX 명령을 실행할 수 있습니다(GRUB를 설치하려는 장치로 sdX 변경). 그러면 부팅 정보가 업데이트되고 모든 관련 파일이 복원됩니다.

grub2-install /dev/sdX

기타 더 복잡한 시나리오는 제안된 수정 사항과 함께 Ubuntu GRUB2 문제 해결 가이드에 문서화되어 있습니다. 여기에 설명된 개념은 다른 배포판에도 유효합니다.

요약

이 기사에서는 GRUB에 대해 소개하고 온라인과 오프라인 모두에서 문서를 찾을 수 있는 위치를 알려주었으며 부트로더 관련 문제로 인해 시스템이 제대로 부팅되지 않는 시나리오에 접근하는 방법을 설명했습니다.

다행히 GRUB는 가장 잘 문서화되어 있는 도구 중 하나이며 설치된 문서나 이 기사에서 공유한 리소스를 사용하여 온라인에서 쉽게 도움말을 찾을 수 있습니다.

질문이나 의견이 있으신가요? 아래 의견 양식을 사용하여 주저하지 말고 알려주십시오. 여러분의 의견을 기다리겠습니다!