GRUB 구성 및 문제 해결하기 위한 LFCS: 파트 13

2016년 2월 2일에 시작하는 LFCS 인증 시험 목표의 최근 변경 사항 때문에, 여기에 发布되어 있는 LFCS 시리즈에 필요한 주제를 추가하고 있습니다. 이 시험 준비를 위해서는 LFCE 시리즈를 멀리 보고 있어야 합니다.

LFCS: Configure and Troubleshoot Grub Boot Loader – Part 13

이 記事で는 GRUB을 소개하고, 引导 loader가 왜 필요하며, 어떻게 시스템에 가능성을 추가하는지 설명해 드리ます.

전자 computer의 전원 버튼을 누르면서 Linux 引导 과정은 이 高层次 순서를 따릅니다:

  1. 1. 전원이 들어가면 자신의 computer의 hardware component을 전반적으로 확인하는 被称为 POST (Power-On Self Test) process가 실행되ます.
  2. 2. POST가 완료되면, 그것이 control를 引导 loader에게 이전하고, Linux kernel을 memory에 로드하고 (initramfs과 함께) 실행합니다. Linux에서 가장 많이 사용하는 boot loader는 GRand Unified Boot loader이며, 짧게 GRUB라고 부릅니다.
  3. 3. 커널은 하드웨어를 확인하고 접근한 다음 초기 프로세스 (일반적으로 “init”으로 알려진)를 실행하여 서비스를 시작하여 시스템 부팅을 완료합니다.

이 시리즈의 제 7 부에서는 현대 리눅스 배포판에서 사용되는 서비스 관리 시스템과 도구를 소개했습니다. 더 진행하기 전에 해당 문서를 확인하십시오.

GRUB 부트 로더 소개

현대 시스템에서는 주로 GRUB 버전 (v1인 경우 GRUB Legacy라고도 함) 두 가지를 찾을 수 있지만 대부분의 배포판은 최신 버전에서 기본적으로 v2를 사용합니다. 오늘날에는 Red Hat Enterprise Linux 6과 해당 파생 배포판만 v1을 사용합니다.

따라서이 안내서에서는 주로 v2의 기능에 초점을 맞출 것입니다.

GRUB 버전에 관계없이 부트 로더를 사용하면 다음과 같은 작업을 수행 할 수 있습니다:

  1. 1). 다른 커널을 지정하여 시스템 동작을 변경,
  2. 2). 대체 운영 체제 사이에서 선택하여 부팅,
  3. 3). 부팅 옵션을 변경하기 위해 구성 스탠자를 추가 또는 편집하는 등의 작업을 수행합니다.

오늘 GRUBGNU 프로젝트에 의해 유지되고 있으며 그들의 웹사이트에서 좋은 문서화가 되어 있습니다. 이 가이드를 통해 이를 사용하는 동안 GNU 공식 문서을 사용하여 도울 수 있습니다.

시스템이 引导되는 동안 주요 콘솔에서 다음과 같은 GRUB 화면이 표시되ます. 초기에 다음과 같은 것을 선택할 수 있습니다: 대신 的内核 (기본적으로 가장 최신内核을 사용하도록 설정되어 있음) 사이에서 그리고 GRUB 명령어 行 (c 를 사용하여) 또는 引导 옵션을 수정하는 것 (e キー를 눌러야 합니다)

GRUB Boot Screen

老旧内核을 사용하는 이유가 하드웨어 장치가 정상적으로 작동했던 것이 升级 한 후 “ acting up” 하게 되었다고 하는 것이 하나의 이유입니다 (this linkAskUbuntu フォーラム에서 예를 보기 위해서 참조하십시오).

引导时 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"

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

# info grub

특히 /etc/default/grub의 가능한 옵션에 관심이 있다면, 다음과 같이 구성 섹션을 직접 호출할 수 있습니다:

# info -f grub -n 'Simple configuration'

위의 명령을 사용하면 GRUB_TIMEOUT이라는 변수가 초기 화면이 나타나고 사용자에 의해 중단되지 않는 한 시스템이 자동 부팅을 시작하는 시간을 설정합니다. 이 변수가 -1로 설정되면 사용자가 선택을 할 때까지 부팅이 시작되지 않습니다.

동일한 컴퓨터에 여러 운영 체제 또는 커널이 설치되어 있는 경우, GRUB_DEFAULT는 GRUB 초기 화면에서 기본적으로 부팅할 운영 체제 또는 커널 항목을 지정하는 정수값이 필요합니다. 항목 목록은 위에 표시된 대로 스플래시 화면뿐만 아니라 다음 명령을 사용하여 볼 수도 있습니다:

CentOS와 openSUSE에서는:

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

Ubuntu에서는:

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

아래 이미지에 표시된 예제에서, 우리가 커널 버전 3.10.0-123.el7.x86_64 (4번째 항목)로 부팅하려면, GRUB_DEFAULT3으로 설정해야 합니다 (항목은 내부적으로 0부터 번호가 매겨집니다). 다음과 같이 설정하면 됩니다:

GRUB_DEFAULT=3
Boot System with Old Kernel Version

마지막으로, 중요한 GRUB 구성 변수는 GRUB_CMDLINE_LINUX 입니다. 이것은 커널에 옵션을 전달하는 용도로 사용됩니다. GRUB를 통해 커널에 전달할 수 있는 옵션은 커널 PARAMETERS 파일man 7 bootparam에 자세히 documented 되어 있습니다.

제 Current CentOS 7 server의 옵션은 다음과 같습니다.

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"

디폴트 커널 PARAMETERS을 변경하거나 extra 옵션을 전달하는 原因은 무엇입니까? 간단하게 말해, 특정 하드웨어 PARAMETERS를 커널에게 알려주거나, 자신만으로 감지할 수 없거나 감지하는 값을 덮어쓰기 위해서는 times 있을 수 있습니다.

이러한 상황이 지난 적이 있습니다. 지난 적이 있습니다. 不久前, 나는 10年前 의 노트북에 Vector Linux (Slackware의 派生), installation 之后에는 내 video card의 correct setting을 감지하지 못했습니다. 그렇게 GRUB를 통해 kernel options을 수정하여 其를 작동시키는 것이 었습니다.

또한, 시스템을 single-user mode로 이동하여 maintenance tasks를 수행하는 경우가 있습니다. 이러한 작업을 수행하기 위해서는 GRUB_CMDLINE_LINUX에 single关键字을 추가하고 reboot하십시오.

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를 editing 한 후, update-grub (Ubuntu) 또는 grub2-mkconfig -o /boot/grub2/grub.cfg (CentOSopenSUSE)을 실행하여 grub.cfg를 update 하십시오. 그렇지 않으면, boot 시 변경사항을 잃게 됩니다.

이 명령어는 앞에 언급된 引导設定 파일을 처리하여 grub.cfg을 갱신할 것입니다.이 방법은 변경사항을 영구적으로 보장하며, GRUB経由で 引导시간에 전달된 옵션은 현재 세션 동안만 유지할 것입니다.

Linux GRUB 문제 수정

두 번째 Operating System을 설치하거나 GRUB 구성 파일이 사용자 오류로 壊疽하는 경우, 시스템을 다시 일어让其引导 할 수 있는 방법이 있습니다.

초기 화면에서 c 를 눌러 GRUB 명령어 行을 얻을 수 있습니다 (기본적인 引导 옵션을 편집할 수 있는 e를 눌러야 합니다). GRUB 프롬프트에서 사용할 수 있는 사용 가능한 명령어를 도와주는 help를 사용하세요.

Fix Grub Configuration Issues in Linux

이전에 ls를 重点을 둡니다, 설치된 장치와 파일 시스템을 列挙하며 그것이 발견한 것을 살펴봅니다. 아래의 그림에서는 4개의 하드 디스크(hd0 rough hd3)가 있는 것을 볼 수 있습니다.

그중 hd0만이 분할되었음을(msdos1msdos2로 나타내고 있으며, 12는 分割 옵션 번호로, msdos은 分区 계획입니다.) 가정합니다.

지금 hd0의 첫 번째 分区(msdos1)를 다시 examination하여 GRUB이 있는지 여부를 ascertain합시다.이러한 접근은 Linux을 引导하고 다른 高层 도구를 사용하여 구성 파일을 수정하거나 GRUB을 전체적으로 재installing하는 것이 필요하면 가능합니다:

# ls (hd0,msdos1)/

하여 주목하는 영역에서 우리는 이 分区에 grub2 디렉터리를 발견했습니다:

Find Grub Configuration

GRUB이 (hd0,msdos1)에 위치하는 것을 확인한 후, GRUB이 구성 파일을 찾을 위치를 알려주고 메뉴를 실행하도록 지시합니다:

set prefix=(hd0,msdos1)/grub2
set root=(hd0,msdos1)
insmod normal
normal
Find and Launch Grub Menu

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

# grub2-install /dev/sdX

더 복잡한 시나리오는 Ubuntu GRUB2 문제 해결 가이드에 문서화되어 있습니다. 거기에서 설명된 개념은 다른 배포판에도 적용됩니다.

요약

이 문서에서는 GRUB을 소개하고 온라인 및 오프라인에서 문서를 찾을 수 있는 위치를 안내하고 부트로더 관련 문제로 인해 시스템이 제대로 부팅되지 않는 경우 어떻게 접근해야 하는지 설명했습니다.

다행히도, GRUB은 가장 잘 문서화된 도구 중 하나이며, 설치된 문서 또는 이 문서에서 공유한 리소스를 사용하여 쉽게 도움을 얻을 수 있습니다.

질문이나 의견이 있으신가요? 아래의 댓글 양식을 사용하여 알려주시기 바랍니다. 의견을 기다리고 있겠습니다!

Source:
https://www.tecmint.com/configure-and-troubleshoot-grub-boot-loader-linux/