Go to main content
Oracle® Solaris 11.3 システムのブートとシャットダウン

印刷ビューの終了

更新: 2016 年 11 月
 
 

x86: GRUB 2 の概要

GRUB 2 は、BIOS または UEFI ファームウェアを搭載したシステム上の Unified Extensible Firmware Interface (UEFI) ファームウェアからのブートや任意のサイズの GUID パーティションテーブル (GPT) でパーティション分割されたディスクからのブートなど、幅広いプラットフォームとファームウェアのタイプをサポートする強力なモジュラーブートローダーです。GRUB 2 は UEFI 指定の GPT パーティション分割スキームもサポートしています。

GRUB Legacy と同様に、GRUB 2 は 2 段階のブートプロセスを使用します。GRUB 2 と GRUB Legacy の主な違いは、GRUB 2 では動的にロードされたモジュールに多くの機能を配置し、これにより、コア GRUB 2 (第 2 段階ブートローダー) のイメージを小さくできるため、ロードが速くなり、柔軟性が高まることです。結果として、ブート時に要求に応じて GRUB 機能がロードされます。

    GRUB 2 には次の主な変更が導入されています。

  • 構成の変更

    GRUB 2 構成は、GRUB Legacy 構成と構文的に異なります。GRUB Legacy によって使用される menu.lst ファイルは、新しい構成ファイル grub.cfg に置き換えられました。menu.lst ファイルと異なり、grub.cfg ファイルはブート管理コマンドによって自動的に再生成されます。そのため、grub.cfg ファイルの再生成時に、すべての編集がただちに破棄されるため、このファイルは直接編集しないでください。GRUB 2 構成の説明を参照してください。

  • パーティションとデバイスの命名の変更

    0 を基準にするインデックスの代わりに、GRUB 2 ではパーティションと変更されたデバイス命名スキームに 1 を基準にするインデックスを使用します。GRUB 2 パーティションおよびデバイス命名スキームを参照してください。

  • ブートローダーと GRUB メニューの管理の変更

    bootadm コマンドによって grub.cfg ファイルを管理します。変更されたサブコマンドと新しいサブコマンドによって、これまで menu.lst ファイルを編集することによって行なっていた管理タスクのほとんどを管理できるようになります。2 つの例として、Oracle Solaris ブートインスタンスのブート属性 (カーネル引数など) の設定とブートローダー設定の管理があります。bootadm コマンドを使用して GRUB 構成を管理するを参照してください。

  • GRUB メニューと画面の変更

    ブート時に GRUB メニューを編集することによって、カーネル引数を追加するなど、さまざまな GRUB メニューやいくつかのタスクがいくぶん異なって動作するようになりました。これらの違いは、このドキュメント内の各種タスクの該当箇所で説明しています。

  • その他のブートローダー関連のコマンドの変更

    installgrub コマンドはこのリリースで非推奨になりました。このコマンドを使用して、GRUB 2 をサポートするシステムにブートローダーをインストールしないでください。システムのブートが妨げられることがあります。代わりに、GRUB 2 をサポートするリリースを実行する場合は、bootadm install-bootloader コマンドを使用してください。このコマンドは、x86 プラットフォームでの installgrub コマンドおよび SPARC プラットフォームでの installboot コマンドの機能に優先されます。bootadm install-bootloader コマンドを使用して GRUB 2 をインストールするを参照してください。

    installgrub コマンドを使用して、システムに GRUB Legacy をインストールすることもできますが、インストールする GRUB Legacy のバージョンが、ルートプールの ZFS プールバージョンをサポートしており、さらにシステムに残りの GRUB 2 ブート環境がないことを確認したあとに限ります。手順については、GRUB 2 がインストールされているシステムに GRUB Legacy をインストールする方法を参照してください。

x86: GRUB 2 構成の説明

GRUB 2 は GRUB Legacy とまったく異なる構成を使用します。GRUB Legacy 構成は menu.lst ファイルから管理しますが、GRUB 2 は menu.lst ファイルを使用しません。代わりに、GRUB 2 は構成ファイル grub.cfg を使用して、同じタイプの情報を格納します。menu.lst ファイルと同様に、grub.cfg ファイルはルートプール /pool-name/boot/grub の ZFS データセットの最上位レベルにあり、たとえば /rpool/boot/grub/grub.cfg などです。

grub.cfg ファイルの構文は、bash スクリプトに基づいており、次の例に示す menu.lst ファイルで使用されている指令のような言語よりも複雑で強力です。

title title
             bootfs pool-name/ROOT/bootenvironment-name
             kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS
             module$ /platform/i86pc/$ISADIR/boot_archive

比較のために、次のように、同じ構成を grub.cfg ファイルに格納しています。

menuentry "<title>" {
        insmod part_msdos
        insmod part_sunpc
        insmod part_gpt
        insmod zfs
        search --no-floppy --fs-uuid --set=root f3d8ef099730bafa
        zfs-bootfs /ROOT/<BE name>/@/ zfs_bootfs
        set kern=/platform/i86pc/kernel/amd64/unix
        echo -n "Loading ${root}/ROOT/<BE name>/@$kern: "
        $multiboot /ROOT/<BE name>/@/$kern $kern -B $zfs_bootfs
        set gfxpayload="1024x768x32;1024x768x16;800x600x16;640x480x16;640x480x15;640x480x32"
        insmod gzio
        echo -n "Loading ${root}/ROOT/<BE name>/@/platform/i86pc/amd64/boot_archive: "
        $module /ROOT/<BE name>/@/platform/i86pc/amd64/boot_archive
}

grub.cfg ファイルと menu.lst ファイルのほかの大きな違いは、grub.cfg ファイルを編集しないことです。menu.lst ファイルでは、システムによって自動的に生成されるメニューエントリに加えて、ユーザー作成メニューエントリと、グローバル GRUB 構成ファイルの設定および変数の手動の変更をサポートしています。対照的に、grub.cfg ファイルは、各種 bootadm サブコマンドを使用して管理します。それらの多くはこのリリースで新しいものです。各種 bootadm サブコマンドにより、ほとんどのブートローダー管理タスクを管理できます。bootadm コマンドを使用して GRUB 構成を管理するを参照してください。

grub.cfg ファイルの別の機能は、ブートローダー構成を変更するたびに自動生成されることです。ファイルは、特定の操作時および特定のブート管理コマンドが使用されたときにも自動生成されます。必要に応じて、bootadm コマンドと新しい generate-menu サブコマンドを実行して、新しい grub.cfg ファイルを手動で生成できます。このコマンドは、ブート構成が破損した場合にのみgrub.cfg ファイルを作成するために使用します。GRUBメニューを手動で再生成する方法を参照してください。


注 -  grub.cfg ファイルの自動生成メカニズムは、インストールされたシステムのみを対象とします。

    参考のため、GRUB 2 構成は次のファイルに格納されています。

  • grub.cfg – GRUB 2 によって使用されるメインの構成ファイルです。

  • /pool-name /boot/grub/menu.conf - Oracle Solaris によって、最終の grub.cfg 構成ファイルを生成するために使用されるファイルです。

    menu.conf ファイルは、GRUB 2 構成のマシン解析可能な表現を格納する個別の GRUB メタ構成ファイルです。


    注 -  このファイルは編集しないでください
  • /pool-name /boot/grub/custom.cfg - grub.cfg ファイルおよび menu.conf ファイルと同じ場所にある編集可能なファイルです。custom.cfg ファイルは、管理者によって作成されます (デフォルトでシステム上に存在しません)。このファイルは基本 GRUB 構成に複雑な構造 (メニューエントリや他のスクリプト情報) を追加する目的で予約されています。

    custom.cfg ファイルは grub.cfg ファイル内で参照されています。custom.cfg ファイルがシステムに存在する場合、そのファイル内にあるコマンドや指令が grub.cfg ファイルによって処理されます。詳細は、GRUB 構成のカスタマイズを参照してください。

x86: GRUB 2 パーティションおよびデバイス命名スキーム

GRUB Legacy のデバイス命名のしくみに精通している場合、GRUB Legacy の命名スキームと GRUB 2 命名スキームの違いを認識する必要があります。GRUB Legacy はパーティションのインデックスに、0 を基準にする命名スキームを使用しますが、GRUB 2 は、パーティションのインデックスに 1 を基準にする命名スキームを使用します。

GRUB 2 デバイス命名スキームでは、次の形式を使用します。

(hdX, part-typeY, part-typeZ, ...)

パーティションスキームは入れ子にできるため、GRUB のデバイス命名スキームは、任意の入れ子のレベルをサポートするように変更されました。GRUB では、古いスタイルのデバイス命名 (「(hd0,1)」) も、パーティションスキーム名を含む新しいスタイルのデバイス命名のいずれも受け付けます。例:

(hd0, gpt1)

前の例では、先頭のディスクの先頭の GPT パーティションを参照しています。


注 -  GRUB のパーティションの番号付けのみが変更されており、ディスクの番号付けは変更されていません。ディスク番号は 0 基準のままです。

GRUB 2 は、正しいデバイスまたはパーティション名を自動的に検索するために、ファイルシステム UUID (またはラベル) と組み込みの検索コマンドに依存しているため、手動でデバイス名を指定する必要がありません。次の表に、GRUB が使用するパーティションインデックスとデバイス名の例を示します。

表 2  GRUB 2 パーティションおよびデバイス命名スキーム
デバイス名
説明
注意事項
(hd0, msdos1)
先頭のディスク上の先頭の DOS パーティションを指定します。
(hd0, gpt2)
ディスク上の 2番目の GPT パーティションを指定します。
これは、現在のリリースをインストールする典型的なパーティションの例です。
(hd0, msdos1, sunpc1)
先頭のディスク上の先頭の DOS パーティションに格納されている Oracle Solaris パーティション内の先頭の VTOC スライスを指定します。
これは、このリリース以前の Oracle Solaris のバージョンをインストールする典型的なパーティションの例です。

関心のあるパーティションを参照しているパーティション番号を特定する必要がある場合、C キー (メニューエントリを編集している場合は Control-C) を押して、GRUB コマンド行インタプリタにアクセスします。次に、ls コマンドを実行して、次の図のように、GRUB が識別できるすべてのパーティションを一覧表示します。

image:デバイスに関する情報を取得できる GRUB 2 コマンドインタプリタ画面の図。

ls コマンドで –l オプションを使用すれば、次の図のように、ファイルシステムおよびファイルシステム UUID 情報などの各パーティションに関する詳細情報が表示されます。

image:GRUB が識別したデバイスを表示するコマンド出力を示す GRUB 2 コマンドインタプリタ画面の図。

注 -  GRUB はドライブのタイプに関係なく 0 からドライブ番号をカウントし、Integrated Drive Electronics (IDE) デバイスと Small Computer Systems Interface (SCSI) デバイスを区別しません。

x86: GRUB 2 と GRUB Legacy のタスクの比較

GRUB 2 は GRUB Legacy といくつかの特性を共有していますが、GRUB 2 は menu.lst ファイルを使用しないため、多くのブート管理タスクが GRUB 2 をサポートするシステムでは異なって実行されます。たとえば、bootadm コマンドの新しいサブコマンドを使用して、GRUB メニューを管理し、各種ブートローダー管理タスクを実行します。

ほとんどの bootadm サブコマンドで、新しい –P pool 引数を使用できます。このオプションにより、GRUB メニューや特定のルートプールのブートエントリを表示したり、変更したりすることができます。GRUB Legacy をサポートするオペレーティングシステムを実行している場合、これらの bootadm サブコマンドで、–P オプションを使用できない可能性があります。

たとえば、次のように、特定のルートプールの GRUB メニューを表示します。

# bootadm list-menu -P pool-name

次の表は、いくつかの一般的な GRUB 2 タスクおよびコマンドを GRUB Legacy の同等のものと比較しています。詳細な手順については、bootadm(1M) のマニュアルページおよび bootadm コマンドを使用して GRUB 構成を管理するを参照してください。

表 3  GRUB Legacy タスクと比較した GRUB 2 タスク
タスクまたはコマンド
GRUB 2 の方法
GRUB Legacy の方法
GRUB メニューの現在のブートエントリを一覧表示します。
bootadm list-menu
エントリ番号ごとまたはタイトルごとに個々のエントリを表示することもできます。タイトルごとにエントリを表示するには:
bootadm list-menu entry-title
タイトルにスペースが含まれる場合、タイトルが複数の引数として解釈されないように、引用符を使用する必要があります。例:
bootadm list-menu `This is a menu entry with a title'
エントリ番号ごとにエントリを表示するには:
bootadm list-menu –i entry-number
bootadm list-menu
デフォルトのブートローダー設定と、システム上の各ルートプールの Oracle Solaris ブート環境ごとに 1 つのメニューエントリを格納する新しい GRUB 構成ファイル (grub.cfg) を生成します。
bootadm generate-menu
システムに既存の grub.cfg ファイルがある場合、generate-menu サブコマンドに –f オプションを付けて使用します。この構文は既存の GRUB 2 構成を破棄し、新しい構成で置き換えます。
–P オプションを使用して、システム上の特定のルートプールの新しい GRUB 2 構成ファイルを生成する場合、生成された grub.cfg ファイルがそのルートプールの最上位 ZFS データセットに格納されることに注意してください。
menu.lst ファイルを手動で編集して、新しい情報を追加します。
GRUB メニューに新しいエントリを追加します。
エントリ番号を指定してエントリを追加するには:
bootadm add-entry –i entry-number
タイトルを指定してエントリを追加するには:
bootadm add-entry entry-title
menu.lst ファイルに手動でエントリを追加します。
GRUB メニューのエントリを変更します。
エントリ番号を指定してエントリを変更するには:
bootadm change-entry –i entry-numberkey=value
タイトルを指定してエントリを変更するには:
bootadm change-entry entry-title key=value
タイトルにスペースが含まれる場合、タイトルが複数の引数として解釈されないように、引用符を使用する必要があります。
このサブコマンドは、Oracle Solaris コンソールデバイスをカーネル引数として指定するなど、個々のブートエントリを変更するために使用します。エントリのタイトルが複数のメニューエントリと一致する場合、最初のエントリのみが変更されます。
ブートエントリの変更は、以前のリリースで、GRUB Legacy エントリで実行していたように、ブート時に GRUB メニューを編集することによって実行することもできます。
持続的な変更をするには、menu.lst ファイルを手動で編集します。
または、ブート時に GRUB メニューを編集して、システムが次回にブートするときまでにだけ持続するブートエントリの変更を行ないます。
GRUB メニューからエントリを削除します。
エントリ番号を指定してエントリを削除するには:
bootadm remove-entry –i entry-number
タイトルを指定してエントリを削除するには:
bootadm remove-entry entry-title
タイトルを指定すると、そのタイトルのすべてのエントリが削除されます。
menu.lst ファイルから手動でエントリを削除します。
GRUB メニューを管理します。たとえば、ブート元となるデフォルトの GRUB メニューエントリを設定します。
bootadm set-menu key=value
bootadm set-menu
Linux エントリなどのカスタムメニューエントリを GRUB メニューに追加します。
custom.cfg ファイルにエントリを追加し、正しい GRUB 2 構成ファイル構文を使用していることを確認してください。GRUB 構成のカスタマイズを参照してください。

注 -  まずこのファイルを作成する必要があります。

Oracle Solaris のインストール後に menu.lst ファイルに情報を追加します。
ブート引数を追加するには、ブート時に GRUB メニューを編集します。
1. ブートプロセスに割り込むには、矢印キーを使用して、目的のメニューエントリを選択してから、e と入力します。
2. 指定したブートエントリの $multiboot 行の末尾にブート引数を追加します。
3. Control-X を押して、変更したエントリからブートします。システムコンソールがシリアルデバイス上にある場合、UEFI システムで、F10 キーが正しく認識されないことがあります。その場合、Ctrl-X を使用します。

注 -  メニューエントリの編集中に Escape キーを押すとメニューエントリリストに戻り、すべての編集内容が廃棄されます。

1. ブートプロセスに割り込むには、e と入力します。
2. 指定したブートエントリの kernel$ 行の末尾にブート引数を追加します。
3. Return キーを押してから b を入力してシステムをブートします。
ブートローダープログラムをインストールします。
bootadm install-bootloader
このコマンドは、ミラー化ルートプールのすべてのデバイスに自動的にブートローダーをインストールします。
x86 ベースのシステムの場合 installgrub、および SPARC ベースのシステムの場合 installboot
UEFI または BIOS ファームウェアのブートパーティションを作成します。
zpool create コマンドの新しい –B オプションを使用して、ファームウェアに適切なブートパーティションと新しい ZFS プールが格納される ZFS データパーティションを同時に自動的に作成します。
ルートプールにディスクを接続すると、適切なブートパーティションが自動的に作成され、そのディスクにブートローダーがインストールされます。Oracle Solaris 11.3 での ZFS ファイルシステムの管理 の 第 6 章, ZFS ルートプールの管理を参照してください。
GRUB Legacy は BIOS ファームウェアを搭載するシステムのみをサポートするため、個別のブートパーティションは必要ありません。