GRUB 구성 및 문제 해결 방법

WBOY
풀어 주다: 2024-01-04 11:00:35
앞으로
871명이 탐색했습니다.

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

Linux 부팅 프로세스는 컴퓨터의 전원 버튼을 누를 때부터 시작되어 시스템이 완전히 작동할 때까지 다음과 같은 주요 단계를 따릅니다.

  • 1. POST(Power-On Self-Test)라는 프로세스는 컴퓨터 하드웨어 구성 요소를 포괄적으로 검사합니다.
  • 2. POST가 완료되면 부트로더로 제어권이 전달되고, 부트로더는 Linux 커널(및 initramfs)을 메모리에 로드하고 실행합니다.
  • 3. 커널은 먼저 하드웨어를 확인하고 액세스한 다음 초기화 프로세스(주로 일반 이름 init로 알려짐)를 실행한 다음 초기화 프로세스에서 일부 서비스를 시작하고 마지막으로 시스템 시작 프로세스를 완료합니다.

시리즈의 일곱 번째 강의("SysVinit, Upstart 및 Systemd")에서는 최신 Linux 배포판에서 사용되는 서비스 관리 시스템 및 도구 중 일부를 소개했습니다. 계속하기 전에 해당 강의를 복습해 보세요.

GRUB 부트로더 소개

최신 시스템에서는 GRUB의 두 가지 주요 버전을 찾을 수 있습니다(하나는 GRUB Legacy라고도 하는 v1 버전이고 다른 하나는 v2 버전입니다). 그러나 대부분의 최신 버전은 기본적으로 v2 버전입니다. 현재는 Red Hat Enterprise Linux 6 및 그 파생 버전만 v1 버전을 계속 사용하고 있습니다.

그래서 이 가이드에서는 v2 버전의 기능에 중점을 두겠습니다.

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

  1. 다른 커널 사용을 지정하여 시스템 동작을 수정합니다.
  2. 여러 운영 체제에서 부팅하려면 하나를 선택하세요.
  3. 구성 블록을 추가하거나 편집하여 시작 옵션 등을 변경하세요.

현재 GNU 프로젝트는 GRUB을 유지 관리하고 웹 사이트에서 풍부한 문서를 제공합니다. 이 가이드를 읽는 동안 공식 GNU 문서를 살펴보는 것이 좋습니다.

시스템이 부팅되면 메인 콘솔에 다음과 같은 GRUB 화면이 표시됩니다. 처음에는 프롬프트에 따라 여러 커널 버전 중에서 커널을 선택할 수 있으며(기본적으로 시스템은 최신 커널로 부팅됩니다) GRUB 명령줄 모드로 들어갈 수 있습니다(c 키 사용). 실행 항목을 편집합니다(e 키를 누르세요).

如何配置并排除 GRUB故障

GRUB 스플래시 화면

이전 버전의 커널로 부팅을 고려할 수 있는 이유 중 하나는 이전에 제대로 작동했던 하드웨어 장치가 업그레이드 후에 "작동"하는 경우입니다(예를 들어 AskUbuntu 포럼에서 이 링크를 참조할 수 있음).

GRUB v2의 구성 파일은 시작 중에 /boot/grub/grub.cfg 또는 /boot/grub2/grub.cfg 파일에서 읽혀지는 반면, GRUB v1에서 사용되는 구성 파일은 에서 가져옵니다. /boot/grub/grub.conf 또는 /boot/grub/menu.lst. 이러한 파일은 직접 수동으로 편집해서는 안 되며 /etc/default/grub의 내용과 /etc/grub.d 디렉터리의 파일을 통해 업데이트해야 합니다.

CentOS 7에서 시스템이 처음 설치를 완료하면 다음 구성 파일이 생성됩니다.

으아악

온라인 문서 외에도 다음 명령을 사용하여 GNU 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 的内核(第四个条目),我们需要将 GRUB_DEFAULT 设置为 3(条目从零开始编号),如下所示:

GRUB_DEFAULT=3
로그인 후 복사

如何配置并排除 GRUB故障

使用旧版内核启动系统

最后一个需要特别关注的 GRUB 配置变量是 GRUB_CMDLINE_LINUX,它是用来给内核传递选项的。我们可以在 内核变量文件 和 man 7 bootparam 中找到能够通过 GRUB 传递给内核的选项的详细文档。

我的 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 年的老笔记本上尝试了衍生自 SlackwareVector 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/default/grub 之后,你需要运行 update-grub (在 Ubuntu 上)或者 grub2-mkconfig -o /boot/grub2/grub.cfg (在 CentOS 和 openSUSE 上)命令来更新 grub.cfg 文件(否则,改动会在系统启动时丢失)。

这条命令会处理早先提到的那些启动配置文件来更新 grub.cfg 文件。这种方法可以确保改动持久化,而在启动时刻通过 GRUB 传递的选项仅在当前会话期间有效。

修复 Linux GRUB 问题

如果你安装了第二个操作系统,或者由于人为失误而导致你的 GRUB 配置文件损坏了,依然有一些方法可以让你恢复并能够再次启动系统。

在启动画面中按下 c 键进入 GRUB 命令行模式(记住,你也可以按下 e 键编辑默认启动选项),并可以在 GRUB 提示中输入 help 命令获得可用命令:

如何配置并排除 GRUB故障

修复 Linux 的 Grub 配置问题

我们将会着重关注 ls 命令,它会列出已安装的设备和文件系统,并且我们将会看看它查找到的东西。在下面的图片中,我们可以看到有 4 块硬盘(hd0hd3)。

貌似只有 hd0 已经分区了(msdos1 和 msdos2 可以证明,这里的 1 和 2 是分区号,msdos 则是分区方案)。

现在我们来看看能否在第一个分区 hd0msdos1)上找到 GRUB。这种方法允许我们启动 Linux,并且使用高级工具修复配置文件,或者如果有必要的话,干脆重新安装 GRUB:

# ls (hd0,msdos1)/
로그인 후 복사

从高亮区域可以发现,grub2 目录就在这个分区:

如何配置并排除 GRUB故障

查找 Grub 配置

一旦我们确信了 GRUB 位于 (hd0, msdos1),那就让我们告诉 GRUB 该去哪儿查找它的配置文件并指示它去尝试启动它的菜单:

set prefix=(hd0,msdos1)/grub2
set root=(hd0,msdos1)
insmod normal
normal
로그인 후 복사

如何配置并排除 GRUB故障

查找并启动 Grub 菜单

然后,在 GRUB 菜单中,选择一个条目并按下回车键以使用它启动。一旦系统成功启动后,你就可以运行 grub2-install /dev/sdX 命令修复问题了(将 sdX 改成你想要安装 GRUB 的设备)。然后启动信息将会更新,并且所有相关文件都会得到恢复。

# grub2-install /dev/sdX
로그인 후 복사

其它更加复杂的情景及其修复建议都记录在 Ubuntu GRUB2 故障排除指南 中。该指南中阐述的概念对于其它发行版也是有效的。

总结

本文向你介绍了 GRUB,并指导你可以在何处找到线上和线下的文档,同时说明了如何面对由于引导加载相关的问题而导致系统无法正常启动的情况。

幸运的是,GRUB 是文档支持非常丰富的工具之一,你可以使用我们在文中分享的资源非常轻松地获取已安装的文档或在线文档。

你有什么问题或建议吗?请不要犹豫,使用下面的评论框告诉我们吧。我们期待着来自你的回复!


위 내용은 GRUB 구성 및 문제 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:linuxprobe.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!