![[注記]](../images/note.png) 
        
          UEFI サポートが有効なシステムにおいて UEFI を使って LFS
          をブートしたい場合は、本ページに示す手順は読み飛ばしてください。 ただし grub.cfg
          の文法を学ぶ場合や、ファイル内にあるパーティションの指定方法を学ぶ場合は確認しておいてください。 そして 
          BLFS ページ に示されている手順に従って、UEFI に対応するように GRUB 設定を行ってください。
        
![[警告]](../images/warning.png) 
          GRUB の設定を誤ってしまうと、CD-ROM や USB 起動ドライブのような他のデバイスからもブートできなくなってしまいます。 読者の LFS システムをブート可能とするためには、本節の内容は必ずしも必要ではありません。 読者が利用している現在のブートローダー、例えば Grub-Legacy, GRUB2, LILO などの設定を修正することが必要かもしれません。
          コンピューターが利用不能に (ブート不能に) なってしまうこともあります。 そんな事態に備えてコンピューターを「復旧
          (resucue)」するブートディスクの生成を必ず行ってください。
          ブートデバイスを用意していない場合は作成してください。 以降に示す手順を実施するために、必要に応じて BLFS ブックを参照し
          
          libisoburn にある xorriso をインストールしてください。
        
cd /tmp grub-mkrescue --output=grub-img.iso xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso
          GRUB ではドライブやパーティションに対して (hdn,m) といった書式の命名法を採用しています。 n はハードドライブ番号、m はパーティション番号を表します。 ハードドライブ番号はゼロから数え始めます。
          一方パーティション番号は、基本パーティションであれば1から(拡張パーティションは5から)数え始めます。
          かつてのバージョンでは共にゼロから数え始めていましたが、今はそうではないので注意してください。 例えば sda1 は GRUB では (hd0,1) と表記され、sdb3 は (hd1,3) と表記されます。 Linux システムでの取り扱いとは違って
          GRUB では CD-ROM ドライブをハードドライブとしては扱いません。 例えば CD が hdb であり、2番めのハードドライブが hdc であった場合、2番めのハードドライブは (hd1) と表記されます。
        
GRUB は、ハードディスク上の最初の物理トラックにデータを書き出します。 この領域は、どのファイルシステムにも属していません。 ここに配置されているプログラムは、ブートパーティションにある GRUB モジュールにアクセスします。 モジュールのデフォルト位置は /boot/grub/ です。
          ブートパーティションをどこにするかは各人に委ねられていて、それによって設定方法が変わります。
          推奨される1つの手順としては、ブートパーティションとして独立した小さな (200MB 程度のサイズの)
          パーティションを設けることです。 こうしておくと、この後に LFS
          であろうが商用ディストリビューションであろうが、システム導入する際に同一のブートファイルを利用することが可能です。
          つまりどのようなブートシステムからでもアクセスが可能となります。 この方法をとるなら、新たなパーティションをマウントした上で、現在
          /boot ディレクトリにある全ファイルを (例えば前節にてビルドした
          Linux カーネルも) 新しいパーティションに移動させる必要があります。 そしていったんパーティションをアンマウントし、再度
          /boot としてマウントしなおすことになります。
          これを行った後は/etc/fstab を適切に書き換えてください。
        
          現時点での LFS パーティションにて /boot
          を残しておいても問題なく動作します。 ただし複数システムを取り扱うための設定は、より複雑になります。
        
          ここまでの情報に基づいて、ルートパーティションの名称を (あるいはブートパーティションを別パーティションとするならそれも含めて)
          決定します。 以下では例として、ルートパーティション (あるいは別立てのブートパーティション) が sda2 であるとします。
        
          以下を実行して GRUB ファイル類を /boot/grub
          にインストールし、ブートトラックを構築します。
        
![[警告]](../images/warning.png) 
          以下に示すコマンドを実行すると、現在のブートローダーを上書きします。 上書きするのが不適当であるならコマンドを実行しないでください。 例えばマスターブートレコード (Master Boot Record; MBR) を管理するサードパーティ製のブートマネージャーソフトウェアを利用している場合などがこれに該当します。
grub-install /dev/sda
![[注記]](../images/note.png) 
          
            システムが UEFI を通じて起動されている時、grub-install は x86_64-efi
            ターゲットに対するファイルをインストールしようとします。 しかしそのようなファイルは 第 8 章 にてインストールしていません。
            その場合は上のコマンドに対して --target i386-pc
            を追加してください。
          
          /boot/grub/grub.cfg ファイルを生成します。
        
cat > /boot/grub/grub.cfg << "EOF"
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5
insmod part_gpt
insmod ext2
set root=(hd0,2)
set gfxpayload=1024x768x32
menuentry "GNU/Linux, Linux 6.16.1-lfs-12.4-systemd" {
        linux   /boot/vmlinuz-6.16.1-lfs-12.4-systemd root=/dev/sda2 ro
}
EOF
        
          insmod コマンドは
          GRUB モジュールである part_gpt と ext2
          をロードします。 そしてその名前こそ ext2
          となっていますが、このモジュールは実際には ext2,
          ext3, ext4 の各ファイルシステムをサポートしています。 grub-install
          コマンドによっていくつかのモジュールは、メインの(MBR または GRUB BIOS
          パーティションにインストールされる)GRUB
          イメージ内に埋め込まれており、鶏が先か卵が先かという問題を生じさせることなく、そこから(/boot/grub/i386-pc にある)他モジュールへのアクセスを可能としています。
          したがってごく普通の設定を行っていれば、上述の 2 つのもジュールはすでに埋め込まれていることとなり、insmod コマンドは何も行わないことになります。
          そうなったとしても何も問題はありませんが、特殊な設定を行った際には必要となるかもしれません。
        
set gfxpayload=1024x768x32 コマンドは VESA フレームバッファーの解像度と色の深さを設定するものであり、これがカーネルに受け渡されます。 VESA フレームバッファー向けにカーネルの SimpleDRM ドライバーを用いる場合にこの指定が必要になります。 モニター画面に最適な解像度や色深さを選んでください。
![[注記]](../images/note.png) 
          GRUB にとってカーネルファイル群は、配置されるパーティションからの相対位置となります。 したがって /boot パーティションを別に作成している場合は、上記の linux の行から /boot の記述を取り除いてください。 また set root 行でのブートパーティションの指定も、正しく設定する必要があります。
![[注記]](../images/note.png) 
          
            GRUB のパーティション指示子は、(USB
            サムデバイスといったリムーバルディスクを含め)ディスクの加除によって変わることがあります。
            その加除が原因で起動に失敗することがありますが、それは grub.cfg において「古い」指示子を用いているからです。
            こういった問題を避けようとおもったら、パーティション指定にあたって GRUB 指定子を用いずに、パーティションやファイルシステムの
            UUID を用いることが考えられます。 lsblk -o
            UUID,PARTUUID,PATH,MOUNTPOINT を実行してください。
            ファイルシステムの UUID が UUID 列に示されます。
            またパーティションは PARTUUID 列に示されます。 そうしたら
            set root=(hdx,y) の記述を search --set=root --fs-uuid  に書き換え、同様に <カーネルがインストールされているファイルシステムの
            UUID>root=/dev/sda2 を root=PARTUUID= に書き換えます。
          <LFS
            がビルドされたパーティションの UUID>
            パーティションの UUID と、そのパーティション内のファイルシステムの UUID は全く異なります。
            オンラインから得られる情報において、root=PARTUUID= ではなく
            <パーティション UUID>root=UUID=
            を用いるように説明している場合があります。 これを行うには initramfs が必要であり、これは LFS
            の範囲を超えるものです。
          <ファイルシステム UUID>
            /dev
            内のパーティションに対するデバイスノード名も変わります(GRUB 指定子が変更される可能性よりは低いです)。
            /etc/fstab
            において記述するデバイスノードへのパスは、たとえば /dev/sda1
            を PARTUUID=
            に置き換えることができます。 これによりデバイスノード名が変更になった場合の、潜在的な起動エラーを回避することができます。
          <パーティション UUID>
GRUB は大変強力なプログラムであり、ブート処理に際しての非常に多くのオプションを提供しています。 これにより、各種デバイス、オペレーティングシステム、パーティションタイプに幅広く対応しています。 さらにカスタマイズのためのオプションも多く提供されていて、グラフィカルなスプラッシュ画面、サウンド、マウス入力などについてカスタマイズが可能です。 オプションの細かな説明は、ここでの手順説明の範囲を超えるため割愛します。
![[注意]](../images/caution.png) 
          grub-mkconfig というコマンドは、設定ファイルを自動的に生成するものです。 このコマンドは /etc/grub.d/ にある一連のスクリプトを利用しており、それまでに設定していた内容は失われることになります。 その一連のスクリプトは、ソースコードを提供しない Linux ディストリビューションにて用いられるのが主であるため、LFS では推奨されません。 商用 Linux ディストリビューションをインストールする場合には、それらのスクリプトを実行する、ちょうど良い機会となるはずです。 こういった状況ですから、grub.cfg のバックアップは忘れずに行うようにしてください。