LFCS:Grand Unified Bootloader(GRUB)を構成およびトラブルシューティングする方法-パート13


2016年2月2日から有効なLFCS認定試験の目的が最近変更されたため、ここで公開されているLFCSシリーズに必要なトピックを追加します。この試験の準備をするために、LFCEシリーズもフォローすることを強くお勧めします。

この記事では、GRUBを紹介し、ブートローダーが必要な理由と、それがシステムに多様性を追加する方法について説明します。

コンピュータの電源ボタンを押してから完全に機能するシステムが得られるまでのLinuxの起動プロセスは、次の高レベルのシーケンスに従います。

  1. 1. A process known as POST (Power-On Self Test) performs an overall check on the hardware components of your computer.
  2. 2. When POST completes, it passes the control over to the boot loader, which in turn loads the Linux kernel in memory (along with initramfs) and executes it. The most used boot loader in Linux is the GRand Unified Boot loader, or GRUB for short.
  3. 3. The kernel checks and accesses the hardware, and then runs the initial process (mostly known by its generic name “init”) which in turn completes the system boot by starting services.

このシリーズのパート7(「SysVinit、Upstart、およびSystemd」)では、最新のLinuxディストリビューションで使用されるサービス管理システムとツールを紹介しました。先に進む前に、その記事を確認することをお勧めします。

GRUBブートローダーの紹介

最近のシステムには、2つの主要なGRUBバージョン(v1はGRUB Legacyおよびv2と呼ばれることもあります)がありますが、ほとんどのディストリビューションは、最新バージョンではデフォルトでv2を使用しています。現在でも、Red Hat Enterprise Linux6とその派生物のみがv1を使用しています。

したがって、このガイドでは主にv2の機能に焦点を当てます。

GRUBのバージョンに関係なく、ブートローダーを使用するとユーザーは次のことができます。

  1. 1). modify the way the system behaves by specifying different kernels to use,
  2. 2). choose between alternate operating systems to boot, and
  3. 3). add or edit configuration stanzas to change boot options, among other things.

現在、GRUBはGNUプロジェクトによって管理されており、GNUプロジェクトのWebサイトに詳しく記載されています。このガイドを読みながら、GNUの公式ドキュメントを使用することをお勧めします。

システムが起動すると、メインコンソールに次のGRUB画面が表示されます。最初に、代替カーネルから選択するように求められ(デフォルトでは、システムは最新のカーネルを使用して起動します)、GRUBコマンドラインを入力するか( c を使用)、起動オプションを編集することができます( e キーを押します)。

古いカーネルでの起動を検討する理由の1つは、以前は正常に動作し、アップグレード後に「動作」を開始したハードウェアデバイスです(例については、AskUbuntuフォーラムのこのリンクを参照してください)。

GRUB v2構成は、起動時に /boot/grub/grub.cfg または /boot/grub2/grub.cfg から読み取られますが、/boot/grub/grub.conf または /boot/grub/menu.lst はv1で使用されます。これらのファイルは手動で編集することはできませんが、/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"

オンラインドキュメントに加えて、次の情報を使用してGNUGRUBマニュアルを見つけることもできます。

# info grub

/ etc/default/grubで使用可能なオプションに特に関心がある場合は、構成セクションを直接呼び出すことができます。

# info -f grub -n 'Simple configuration'

上記のコマンドを使用すると、 GRUB_TIMEOUT が、ユーザーによって中断されない限り、初期画面が表示されてからシステムの自動起動が開始されるまでの時間を設定することがわかります。この変数が -1 に設定されている場合、ユーザーが選択するまでブートは開始されません。

複数のオペレーティングシステムまたはカーネルが同じマシンにインストールされている場合、 GRUB_DEFAULT には、デフォルトで起動するためにGRUB初期画面のどのOSまたはカーネルエントリを選択するかを示す整数値が必要です。エントリのリストは、上記のスプラッシュ画面だけでなく、次のコマンドを使用して表示することもできます。

# 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 <に設定する必要があります。/code>(エントリはゼロから始まる内部番号が付けられます):

GRUB_DEFAULT=3

特に重要な最後のGRUB構成変数の1つは、カーネルにオプションを渡すために使用される GRUB_CMDLINE_LINUX です。 GRUBを介してカーネルに渡すことができるオプションは、カーネルパラメータファイルとman 7bootparamに詳しく記載されています。

CentOS7サーバーの現在のオプションは次のとおりです。

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"

デフォルトのカーネルパラメータを変更したり、追加のオプションを渡したりするのはなぜですか?簡単に言うと、カーネルに特定のハードウェアパラメータを通知して、それ自体では決定できない場合や、検出する値を上書きする必要がある場合があります。

これは、Slackwareの派生物であるVectorLinuxを10年前のラップトップで試したときのことです。インストール後、ビデオカードの正しい設定が検出されなかったため、GRUBを介して渡されるカーネルオプションを変更して機能させる必要がありました。

もう1つの例は、メンテナンスタスクを実行するためにシステムをシングルユーザーモードにする必要がある場合です。これを行うには、singleという単語を GRUB_CMDLINE_LINUX に追加し、再起動します。

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 (CentOSおよびopenSUSE)を使用して grub.cfg を更新します(そうしないと、起動時に変更が失われます)。

このコマンドは、前述のブート構成ファイルを処理して、 grub.cfg を更新します。この方法により、変更が永続的になり、起動時にGRUBを介して渡されるオプションは、現在のセッション中にのみ持続します。

LinuxGRUBの問題の修正

2番目のオペレーティングシステムをインストールした場合、または人為的エラーのためにGRUB構成ファイルが破損した場合は、システムを元の状態に戻し、再度起動できるようにする方法がいくつかあります。

第一画面で、 c を押してGRUBコマンドラインを取得し( e を押してデフォルトのブートオプションを編集することもできます)、ヘルプを使用して利用可能にしますGRUBプロンプトのコマンド:

インストールされているデバイスとファイルシステムを一覧表示するlsに焦点を当て、それが何を検出するかを調べます。下の画像では、4台のハードドライブ( hd0 から hd3 )があることがわかります。

hd0 のみがパーティション化されているようです(msdos1とmsdos2で証明されています。ここで、1と2はパーティション番号で、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

その他のより複雑なシナリオは、提案された修正とともに、UbuntuGRUB2トラブルシューティングガイドに記載されています。そこで説明されている概念は、他のディストリビューションにも当てはまります。

概要

この記事では、GRUBを紹介し、オンラインとオフラインの両方でドキュメントを見つけることができる場所を示し、ブートローダー関連の問題のためにシステムが適切に起動を停止したシナリオにアプローチする方法を説明しました。

幸い、GRUBは最もよく文書化されているツールの1つであり、インストールされているドキュメントまたはこの記事で共有しているリソースを使用してオンラインで簡単にヘルプを見つけることができます。

質問やコメントはありますか?下記のコメントフォームを使用して、遠慮なくお知らせください。返信お待ちしています!