Linux の 101 試験対策: ブート・マネージャーのインストール

GRUB、GRUB 2、LILO の紹介

Linux システムのブート・マネージャーを選択する方法、そして選択したブート・マネージャーを構成する方法を学んでください。このチュートリアルの内容は、Linux システム管理者認定用の LPI 101 試験に備えて勉強するために利用することも、楽しんで学習するために利用することもできます。

Ian Shields, Linux Author, Freelance

Ian ShieldsIan Shields は、Linux のフリー・ライターです。ノースカロライナ州 Research Triangle Park にある IBM を退職した彼が、オーストラリアのキャンベラにある IBM にシステム・エンジニアとして入社したのが 1973年であり、それ以降、カナダのモントリオールやノースカロナイナ州 Research Triangle Park でシステム・エンジニアリングとソフトウェア開発の両方に携わってきました。1990年代後半からは、Linux を使用して Linux 上で開発を行うとともに、Linux に関する執筆も行ってきました。彼は、オーストラリア国立大学で純粋数学および哲学の学士号を取得し、ノースカロライナ州立大学でコンピューター・サイエンスの修士号と博士号を取得しています。普段はオリエンテーリングを楽しんでおり、旅行に行くのも好きです。



2015年 12月 17日 (初版 2010年 4月 13日)

より詳しく学び、さらなる開発を行い、より多くの人とつながる

新たに登場した developerWorks Premium メンバーシップ・プログラムでは、メンバーになると、強力な開発ツールのほか、Safari Books Online を通じて提供される最もホットな 500 タイトルの技術書 (Java 開発者向けのものが大量にあります) を含む各種のリソースをすべて自由に利用できるようになります。さらに、主要な開発者向けイベントの登録料の大幅な割引や、最新の O'Reilly カンファレンスの全容を閲覧できる再生動画など、その他にもさまざまな特典が提供されます。

概要

このチュートリアルでは、Linux システムのブート・マネージャーを選択し、インストールして構成する方法を学びます。このチュートリアルで説明する内容は以下のとおりです。

  • 代替となるブート・ロケーションを提供し、ブートのオプションをバックアップする方法
  • GRUB Legacy などのブート・ローダーをインストールして構成する方法
  • GRUB 2 用に基本的な構成の変更を行う方法
  • ブート・ローダーを操作する方法

ブート・マネージャー

「ブート・マネージャー」あるいは「ブート・ローダー」は、システムのハードウェアやファームウェアがオペレーティング・システムを自動的にロードできるようにするための、コードの介在部分です。このチュートリアルでは、PC のブート・プロセスと、MBR (Master Boot Record: マスター・ブート・レコード) 形式でフォーマットされたディスクを使用した場合に Linux で使用される主な 3 つのブート・ローダー、すなわち GRUB、GRUB 2、LILO を話題に取り上げます。GRUB は、今では GRUB Legacy と呼ばれていて、もはやアクティブな開発は行われておらず、大方がより新しい GRUB 2 で置き換えられています。Red Hat Enterprise Linux や SUSE Linux Enterprise Server などの商用ディストリビューションでさえも、2014年に GRUB 2 への切り替えを行いました。LILO の開発も 2015年末には終了する予定になっています。

この連載について

この連載は Linux システム管理タスクの学習に役立つだけでなく、Linux Professional Institute の LPIC-1: Linux Server Professional Certification 試験に備えるための教材にもなります。

連載の各チュートリアルに関する説明とリンクについては、developerWorks の「Linux の 101 試験対策: LPIC-1 のロードマップ」を参照してください。現在進行中のこのロードマップは、2015年 4月 15日に更新された LPIC-1 試験の項目のバージョン 4.0 を反映しています。完成したチュートリアルは、その都度ロードマップに追加されていきます。

このチュートリアルは、LPIC-1: Linux Server Professional Certification 101 試験における主題 102 の項目 102.2 に備える上で役に立ちます。この項目は、重要度が 2 とされています。LILO に関する知識は、LPIC-1 では要求されなくなりましたが、このチュートリアルでは LILO を取り上げているので、LILO に関する何らかの知識が得られるはずです。

このチュートリアルで中心として取り上げるのは、昔ながらの BIOS と MBR 形式でフォーマットされたディスクを使用した場合のブート処理です。さらに、UEFI (Unified Extensible Firmware Interface) とそれに関連する GPT (GUID パーティション・テーブル) についての基本情報の一部や、これらを使用したときに (特に、単一システム上で Windows 8 と Linux の両方をブートする必要がある場合に) 出くわす可能性があるブート処理の問題についても取り上げます。

前提条件

この連載のチュートリアルを最大限に活用するには、Linux の基礎知識と、記載されたコマンドを演習できる実際の Linux システムが必要です。また、チュートリアル「Linux の 101 試験対策: ハード・ディスクのレイアウト」で説明しているハード・ディスク・ドライブのレイアウトについて、十分に理解している必要もあります。プログラムのバージョンによって出力のフォーマットに違いが出てくる場合もあるため、コマンドの実行結果は必ずしもここに記載するリストや図とまったく同じであるとは限りません。

注: このチュートリアルに掲載する画像は、ブート・プロセスの初期段階で撮ったスクリーン・キャプチャーです。スクリーン・リーダーを使ってこのチュートリアルを読んでいる場合は、対応する構成ファイルを参照用に準備しておくと役立ちます。参照用の構成ファイルは、チュートリアルの終わりの「ダウンロード」セクションからダウンロードすることができます。


ブート・プロセスの概要

個々のブート・ローダーの詳細に入る前に、従来の PC が起動 (つまり、ブート) する仕組みを復習しておきましょう。ROM、EEPROM、あるいはフラッシュ・メモリーなどの不揮発性メモリーには、BIOS (Basic Input Output Service) と呼ばれるコードが格納されています。このコードは、PCの電源を入れたとき、あるいは PC をリブートすると実行されます。通常、BIOS は電源投入時自己診断テスト (Power-On Self Test、略称 POST) を行ってマシンをチェックします。そして最後に、ブート・ドライブ上のマスター・ブート・レコード (Master Boot Record、略称 MBR) から先頭のセクターをロードします。

チュートリアル「Linux の 101 試験対策: ハード・ディスクのレイアウト」で説明したように、MBR にはパーティション・テーブルも含まれているため、MBR 内に格納される実行可能コードのサイズは 512 バイト未満と、それほど大きくありません。すべてのディスク (フロッピー・ディスクも含む) の実行可能コードは MBR に格納されます。実行可能コードが「Non-bootable disk in drive A: (ドライブ A のディスクはブート可能なディスクではありません)」のようなメッセージを出力することしかできないほどのサイズであっても、このことに変わりはありません。BIOS が先頭のセクターからロードするこのコードは、「第 1 ステージ・ブート・ローダー」、あるいは「ステージ 1 ブート・ローダー」と呼ばれます。

MS-DOS、PC DOS、そして Windows オペレーティング・システムが使用する標準的なハード・ディスク・ドライブの MBR は、パーティション・テーブルを調べて、アクティブとしてマークが付けられたブート・ドライブのプライマリー・パーティションを見つけます。そしてそのパーティションから先頭のセクターをロードし、ロードしたコードの先頭に制御を渡します。この新しいコードは、「パーティション・ブート・レコード」としても知られています。パーティション・ブート・レコードは、実際にはもう 1 つのステージ 1 ブート・ローダーですが、これにはパーティションからブロック一式をロードするだけのインテリジェンスしかありません。この新しいブロック一式に格納されているコードは、「ステージ 2 ブート・ローダー」と呼ばれます。ステージ 2 ブート・ローダーは MS-DOS および PC DOS で使用されることから、そのまま直接、オペレーティング・システムの残りの部分をロードします。これが、オペレーティング・システムが自ら起動して、稼働状態になる仕組みです。

上記のプロセスは、オペレーティング・システムが 1 つしかないシステムには問題なく上手くいきますが、複数のオペレーティング・システムを使用するとしたらどうなるでしょうか。例えば、OS/2、Windows XP、そして 3 つの異なる Linux ディストリビューションを使用する場合を考えてみてください。この場合、何らかのプログラム (DOS FDISK プログラムなど) を使用してアクティブ・パーティションを変更し、リブートするという方法もありますが、それでは厄介です。さらに、ディスク上に作成できるプライマリー・パーティションは 4 つまでです。その上、標準的な MBR が管理できるアクティブなプライマリー・パーティションは 1 つだけで、論理パーティションからのブートには対応することができません。けれども、この仮説の例で引用しているオペレーティング・システムは 5 つあり、そのそれぞれにパーティションが必要です。

この問題を解決するには、特殊なコードを使用して、ブート対象のオペレーティング・システムをユーザーが選択できるようにします。特殊なコードとは、例えば以下のプログラムのことです。

Loadlin
実行中の DOS システムから Linux パーティションをブートするために呼び出される DOS 実行可能プログラム。マルチブート・システムのセットアップが複雑で危険なプロセスであった頃に、よく使われていました。
OS/2 Boot Manager
小さなサイズの専用パーティションにインストールするプログラム。このプログラムがインストールされたパーティションにはアクティブのマークが付けられ、標準的な MBR ブート・プロセスが OS/2 Boot Manager を起動すると、ブートするオペレーティング・システムを選択できるメニューが表示されます。
スマート・ブート・ローダー
オペレーティング・システムのパーティションに常駐可能なプログラムで、アクティブ・パーティションのパーティション・ブート・レコード、またはマスター・ブート・レコードのいずれかから呼び出されます。スマート・ブート・ローダーの例には以下のものがあります。
  • BootMagic: Norton PartitionMagic に含まれています
  • LILO, the LInux LOader
  • GRUB (GRand Unified Boot loader): 現在 GRUB Legacy と呼ばれています
  • GRUB 2: 一般的なディストリビューションの多くで現在使用されている、より新しいブート・ローダー
  • Syslinux: 各種ファイルシステムを対象とした軽量のブート・ローダーの集まりで、MS-DOS FAT ファイルシステム向けのもの (SYSLINUX)、ネットワーク・ブート処理用のもの (PXELINUX)、El Torito 準拠のブート可能な CD-ROM 用のもの (ISOLINUX)、Linux ext2/ext3/ext4 または btrfs を対象としたもの (EXTLINUX) などがあります。

システムの制御を 512 バイトより大きなコードのプログラムに渡すことができれば、論理パーティションから、あるいはブート・ドライブ上にはないパーティションからブートするのも不可能な話でないのは明らかです。上記のソリューションはいずれも、そうしたことが可能です。そのような形でのブートが実現可能なのは、これらのソリューションが任意のパーティションからブート・レコードをロードできるため、あるいはブート・プロセスを開始するためにロードするファイルを理解できるためです。

チェーン・ロード

ブート・マネージャーが制御を受け取ったときに、別のブート・マネージャーをロードする可能性もあります。ブート・マネージャーが別のブート・マネージャーをロードすることを、チェーン・ロードと呼びます。チェーン・ロードが最もよく行われるのは、マスター・ブート・レコード (MBR) に位置するブート・マネージャーが、パーティション・ブート・レコードにあるブート・ローダーをロードする場合です。Linux ブート・ローダーが Windows または DOS のパーティションをブートするように指示されると、ほぼ必ずと言ってよいほどチェーン・ロードが行われます。また、ある Linux システム (例えば、Fedora など) の Linux ブート・ローダーが別の Linux システム (例えば、Ubuntu など) のブート・ローダーをロードするように構成されているときにチェーン・ロードが行われることもあります。例えば、あるパーティションの GRUB を使用して、別のパーティションの Linux システムを起動するために、そのパーティションのブート・レコードにある GRUB ブート・ローダーを起動する場合などです。こうしたことは一般的ではありませんが、チェーン・ロードの可能性を示す 1 つの例です。

Linux のブート・ローダー

このチュートリアルでは、GRUB、GRUB 2、LILO に話題を絞ります。というのも、これらのブート・ローダーは、ほとんどの Linux ディストリビューションに付属しているブート・ローダーであるからです。LILO は登場してからしばらく時間が経っており、GRUB はその後に登場しました。当初の GRUB は、現在は GRUB Legacy と呼ばれるようになっています。これは、GRUB 2 の開発が (Free Software Foundation の主導の下で) 進められるようになったためです (詳細は「参考文献」を参照)。このチュートリアルでは、始めに GRUB について説明してから、GRUB 2 を取り上げます。そうすることで、GRUB と GRUB 2 の主な違いと、どのようにすれば GRUB と GRUB 2 が共存できるかを、ある程度理解できるようにします。このチュートリアルでは以降、明確に GRUB 2 を意味するコンテキストを除き、GRUB と表記する場合は GRUB Legacy を表していることを前提とします。LILO でもまた、ELILO という新しいバージョンが使用できるようになっています (ELILO は、BIOS ではなく Intel の EFI (Extensible Firmware Interface) を使用するシステムのブート用に設計されています)。ELILO についての詳細は、「参考文献」を参照してください。

前述のように、GRUB Legacy は、もはやアクティブな開発は行われておらず、LILO の開発も 2015年末には終了する予定になっています。2015年リリースのほとんどの Linux システムには、デフォルトのブート・ローダーとして、場合によっては唯一のブート・ローダーとして、GRUB 2 が付属しています。

ディストリビューションのインストール・プロセスでは、どのブート・ローダーをセットアップするかを選択できる場合があります。GRUB、GRUB 2、LILO はいずれも最近のほとんどのディスクで動作しますが、Fedora をはじめ、一部のディストリビューションには LILO や GRUB Legacy は付属しなくなっています。ディスク技術は急速に進歩していることを念頭に置いて、選択するブート・ローダー、選択する Linux ディストリビューション (またはその他のオペレーティング・システム)、さらには使用しているシステム BIOS が最新のディスクで動作することを必ず確認してください。この確認を怠ると、データを失うことになりかねません。同様に、新しいディストリビューションを既存のシステムに追加する場合には、MBR の LILO、GRUB、GRUB 2 が最新のものであることを確認した方がよいかもしれません。さらに、LVM または RAID ディスクからブートすることを予定しているとしたら、かなり新しいバージョンのブート・ローダーが必要です。

LILO と GRUB で使用されているステージ 2 ローダーでは、ロードする対象を複数のオペレーティング・システムまたはバージョンから選択することができます。ただし、LILO と GRUB は、システムに対する変更を行う際の操作に大きな違いがあります。LILO の場合、カーネルのアップグレードなどといったシステムに対する特定の変更を行うときには、常にコマンドを使用して LILO ブート・セットアップを作成し直さなければなりません。一方、GRUB では構成ファイルのテキストを編集することで、システムに対する変更を行います。また、GRUB 2 でもシステムに対する変更を行うには、構成ファイル (通常 /etc に格納されています) に変更を加えた後、GRUB 2 を再作成する必要があります。


GRUB

GRUB (GRand Unified Boot loader) は長いこと、最もよく使われている Linux ブート・ローダーの 1 つでした。GRUB のインストール先として可能なのは、ブート可能なハード・ディスク・ドライブの MBR やパーティションのパーティション・ブート・レコード、あるいはフロッピー・ディスク、CD、USB キーなどのリムーバブル・デバイスです。GRUB を使い慣れていない方は、フロッピー・ディスクや USB キーで練習するのが得策です。このチュートリアルの例では、その方法を紹介します。

注: このチュートリアルで取り上げる GRUB の例では、そのほとんどが CentOS 6 を使用しています。

Linux のインストール時には、通常、ブート・マネージャーを選んで指定します。LILO を選択した場合には、おそらく GRUB はインストールされません。そのため、ご使用のディストリビューションに付属の GRUB がインストールされていない場合には、GRUB のパッケージをインストールする必要があります。このチュートリアルでは、GRUB パッケージがすでにインストールされていることを前提とします。パッケージ管理についてのヘルプが必要な場合には、連載のロードマップでパッケージ管理に関するチュートリアルを調べてください。

通常、GRUB (Legacy) の構成ファイルは /boot/grub/grub.conf です。ファイルシステムがシンボリック・リンクをサポートしている場合 (ほとんどの Linux ファイルシステムではサポートしています)、/boot/grub/grub.conf へのシンボリック・リンクとして、/boot/grub/menu.lst が使われているはずです。

grub コマンド (一般には /sbin/grub、システムによっては /usr/sbin/grub) は、GRUB のインストール、システムのブート、構成ファイルの検索および表示、といったようなタスクを行うための複数のコマンドをサポートする、小さいながらも強力なシェルです。このシェルの大部分のコードは第 2 ステージの GRUB ブート・ローダーのコードと共通するため、このシェルから、第 2 ステージの GRUB 環境をブートすることなく GRUB について学ぶことができて便利です。GRUB のステージ 2 は、メニュー・モードまたはコマンド・モードのいずれかで実行されます。メニュー・モードではユーザーがメニューからオペレーティング・システムを選択できる一方、コマンド・モードでは個々のコマンドを指定してシステムをロードします。その他のコマンドとしては、grub シェルを使用して GRUB のインストールなどのタスクを自動化できるようにする grub-install などがあります。

リスト 1 に、GRUB のかなり複雑な構成ファイルを示します。このコードに目を通す際には、重要な 1 つの注意事項があります。それは、GRUB (少なくとも GRUB Legacy) は、ドライブやパーティションなど、カウントする必要があるものを 1 からではなく 0 からカウントすることです。CentOS の 2 番目のエントリーには非常に長いカーネル行があるので、リスト 1 では見やすくするために改行を挿入しており、その箇所を示すバックスラッシュ (\) を挿入してあります。

GRUB の構成ファイル /boot/grub/menu.lst の例
# grub.conf generated by anaconda
#
# You do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,5)
#          kernel /boot/vmlinuz-version ro root=/dev/hda6
#          initrd /boot/initrd-version.img
#boot=/dev/hda
default=0
timeout=60
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
#password --md5 $1$y.uQRs1W$Sqs30hDB3GtE957PoiDWO.

title Fedora 22 64-bit (sda5)
	root (hd0,4)
        kernel /boot/grub2/i386-pc/core.img

title Fedora 18 64-bit (sda7)
	root (hd0,6)
        kernel /boot/grub2/i386-pc/core.img

title CentOS 6 64-bit (sda11)
        root (hd0,10)
        configfile /boot/grub/menu.lst

title CentOS (2.6.32-504.23.4.el6.x86_64)
	root (hd0,10)
	kernel /boot/vmlinuz-2.6.32-504.23.4.el6.x86_64 ro \
           root=UUID=2f60a3b4-ef6c-4d4c-9ef4-50d7f75124a2 rd_NO_LUKS rd_NO_LVM \
           LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M \
           KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
	initrd /boot/initramfs-2.6.32-504.23.4.el6.x86_64.img

title Fedora 20 64-bit (sda10)
	root (hd0,9)
        configfile /boot/grub/menu.lst

title Ubuntu 12.04-LTS 64-bit (sda9)
	root (hd0,8)
        kernel /boot/grub/core.img

title Ubuntu 14.04 32-bit (sda12)
	root (hd0,11)
        kernel /boot/grub/core.img

title Slackware 13.37 64-bit (sda6)
	root (hd0,5)
        chainloader +1
        boot
	
title Open SUSE 11.4 64-bit (sda8)
	root (hd0,7)
        configfile /boot/grub/menu.lst

title Windows Example
	rootnoverify (hd0,0)
	chainloader +1
#####

GRUB の動作を制御するのは、リスト 1 に示されている最初のオプションのセットです。GRUB では、これらのオプションはメニュー・コマンドと呼ばれ、他のコマンドより前に置かれていなければなりません。残りのセクションにあるのは、GRUB でブートできるようにしたいオペレーティング・システムのイメージごとのオプションです。「title」はメニュー・コマンドと見なされます。title の各インスタンスの後には、1 つ以上の一般コマンドまたはメニュー・エントリー・コマンドが続きます。

リスト 1 の他のすべてのセクションに適用されるメニュー・コマンドは以下のとおりです。

#
# で始まる行はコメントなので、GRUB はこの行を無視します。上記の構成ファイルは、元々 Red Hat インストーラーの anaconda によって生成されました。Linux のインストール時に GRUB をインストールすると、GRUB の構成ファイルにコメントが追加されるはずです。これらのコメントは多くの場合、システム・アップグレード・プログラムの助けとなり、アップグレードされたカーネルで GRUB 構成を最新状態に維持するのに役立ちます。構成ファイルを自分で編集する際には、この目的で残されているマーカーに注意してください。
default
タイムアウトになるまでにユーザーが選択を行わなかった場合にロードするシステムを指定します。リスト 1 では default=0 と指定されており、先頭のエントリーがロードされます。前述したように、GRUB は 1 からではなく、0 からカウントするためです。値を指定しない場合、デフォルトで先頭のエントリー (エントリー番号 0) がブートされます。
timeout
デフォルト・エントリーをブートするまでのタイムアウトの秒数を指定します。LILO ではタイムアウトの単位として 10分の1 秒を使用しますが、GRUB では 1 秒単位でタイムアウトを指定することに注意してください。
splashimage
ブート・メニューで表示される背景 (スプラッシュ) 画像を指定します。GRUB Legacy は 1 番目のハード・ディスク・ドライブを (hd0) として参照し、そのドライブの 1 番目のパーティションを (hd0,0) として参照します。したがって、例えば splashimage=(hd0,0)/boot/grub/splash.xpm.gz と指定すると、1 番目のハード・ディスク・ドライブのパーティション 1 にある /boot/grub/splash.xpm.gz ファイルが使用されます。カウントは 0 から始まることを思い出してください。イメージは gzip で圧縮された XPM ファイルになっています。splashimage のサポートはパッチになっており、ディストリビューションに組み込まれている場合もあれば、組み込まれていない場合もあります。
password
ユーザーがメニューのロックを解除するために入力しなければならないパスワードを指定し、このパスワードを入力しなければ、ユーザーが構成行を編集したり、GRUB コマンドを入力したりできないようにします。パスワードは平文にすることができますが、GRUB では、リスト 1 でコメント・アウトした例に示されているように、パスワードを MD5 ダイジェストとして保管することもできます。パスワードを設定したほうがセキュアであるため、ほとんどの管理者はパスワードを設定します。パスワードを設定しない場合、ユーザーは GRUB コマンドラインにフル・アクセスできることになります。

リスト 1 には、/dev/sda11 (hd0,10) 上の CentOS カーネル (/boot/vmlinuz-2.6.32-504.23.4.el6.x86_64) とチェーン・ロードするように構成された、いくつかのシステムが示してあります。さらにリスト 1 には、/boot/grub2/i386-pc/core.img を介して GRUB 2 をロードする複数の例と、Windows XP をチェーン・ロードする標準的なエントリーの例 (ただし、実際にはこのシステムには Windows はインストールされていません) も示してあります。これらのセクションで使用されているコマンドには、以下のものがあります。

title
GRUB のブート時にメニュー項目として表示される説明的なタイトルです。タイトル・リストを上下に移動するには矢印キーを使用し、特定のエントリーを選択するには Enter を押します。
root
ブートするパーティションを指定します。splashimage の場合と同じく、カウントは 0 から始まるため、root (hd0,6) として指定された最初の Red Hat システムは、実際には 1 番目のハード・ディスク・ドライブのパーティション 7 (この例では /dev/hda7) に位置し、root (hd1,10) として指定された最初の Ubuntu システムは 2 番目のハード・ディスク・ドライブ (/dev/hdb11) に位置します。GRUB はこのコマンドで指定されたパーティションのマウントを試行してチェックを行い、場合によっては、ブートされたオペレーティング・システムに値を提供します。
kernel
ロードするカーネル・イメージと、必要なカーネル・パラメーターを指定します。例えば、カーネル・イメージとして /boot/grub2/i386-pc/core.img のような値が指定された場合は、通常、指定された root パーティションから GRUB 2 ブート・ローダーをロードすることを意味します。
initrd
初期 RAM ディスクの名前です。ここに、ファイルシステムがマウントされる前にカーネルに必要となるモジュールが含まれています。
savedefault
この例では使用されていませんが、メニュー・コマンド default=saved が指定されていて、オペレーティング・システムに savedefault コマンドが指定されている場合、そのオペレーティング・システムをブートすると、savedefault が指定された別のオペレーティング・システムがブートされるまで、そのオペレーティング・システムがデフォルトとなります。リスト 1 の例では default=0 の指定が、保存されているどのデフォルトよりも優先されます。
boot
GRUB に対し、選択したオペレーティング・システムをブートするように指示するオプション・パラメーターです。オペレーティング・システムのブートは、選択項目に対するコマンドがすべて処理された時点でのデフォルト・アクションです。
lock
リスト 1 の例では使用されていませんが、このコマンドを使用すると、パスワードが入力されるまでは指定されたエントリーがブートされません。このコマンドを使用する場合には、初期オプションにパスワードを指定してください。パスワードを指定しないと、ユーザーがロック・オプションを編集してシステムをブートしたり、別のエントリーのいずれかに「single」を追加したりする可能性があります。必要であれば、個々のエントリーに異なるパスワードを指定することもできます。
rootnoverify
root と同様ですが、このコマンドの場合、GRUB はファイルシステムのマウントを試行しません。また、ファイルシステムのパラメーターを検証することもしません。このコマンドは通常、GRUB でサポートされていないファイルシステム (NTFS など) に使用されます。また (例えば、異なる構成ファイルにアクセスしたり、前のブート・ローダーをリロードしたりするために) GRUB にハード・ディスク・ドライブ上のマスター・ブート・レコードをロードさせたい場合にも、このコマンドを使用することがあります。
chainloader
ステージ 1 のファイルとしてロードする別のファイルを指定します。値「+1」は「0+1」に相当します。これは、セクター 0 から、1 つのセクターをロードすることを意味します。つまり、root または rootnoverify で指定されたデバイスから先頭のセクターをロードするということです。
configfile
実行される GRUB の構成ファイルを、指定した場所からロードした構成ファイルで置き換えることを指定します。この動作が正常に行われるようにするには、新しい configfile をロードする GRUB のバージョンとして、そのファイルをビルドした GRUB のバージョンと同じものを使用するのが賢明です。

これで、典型的な /boot/grub/grub.conf (または /boot/grub/menu.lst) ファイルの内容について理解できたはずです。上記の他にも、GRUB にはブート・プロセスを詳細に制御するコマンドや、GRUB のインストールや他のタスクを支援するコマンドが多数あります。これらのコマンドについての詳細を学ぶには、GRUB マニュアルを参照してください。このマニュアルをシステムで開くには、info grub コマンドを使用します。

GRUB の非常に大きい構成ファイルを扱う方法を学ぶ前に、ちょっと寄り道して、より小さくてより単純な例に戻りましょう。私が使用するのは、CentOS 6 を /dev/sda11 にインストールしたときに作成されたファイルです。このファイルをリスト 2 に示します。ここでも、長いカーネル行を見やすくするために改行を挿入しており、その箇所を示すバックスラッシュ (\) を挿入してあります。

CentOS 6 によって作成された基本的な (GRUB の) 構成ファイル
# grub.conf generated by anaconda
#
# You do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,10)
#          kernel /boot/vmlinuz-version ro root=/dev/sdd11
#          initrd /boot/initrd-[generic-]version.img
#boot=/dev/sdd11
default=0
timeout=5
splashimage=(hd0,10)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-504.23.4.el6.x86_64)
	root (hd0,10)
	kernel /boot/vmlinuz-2.6.32-504.23.4.el6.x86_64 ro \
           root=UUID=2f60a3b4-ef6c-4d4c-9ef4-50d7f75124a2 rd_NO_LUKS rd_NO_LVM \
           LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M \
           KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
	initrd /boot/initramfs-2.6.32-504.23.4.el6.x86_64.img
title CentOS 6 (2.6.32-504.el6.x86_64)
	root (hd0,10)
	kernel /boot/vmlinuz-2.6.32-504.el6.x86_64 ro \
           root=UUID=2f60a3b4-ef6c-4d4c-9ef4-50d7f75124a2 rd_NO_LUKS rd_NO_LVM \
           LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M \
           KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
	initrd /boot/initramfs-2.6.32-504.el6.x86_64.img
title Other
	rootnoverify (hd0,0)
	chainloader +1

先ほどはなかったコマンド hiddenmenu に注目してください。このコマンドによって、GRUB はメニューを表示しなくなり、タイムアウトが発生するとすぐにデフォルト・エントリーをブートするようになります。上記リストの場合、最初のエントリー (default=0) は 5 秒 (timeout=5) でブートされるはずです。この 5 秒の間に Enter を押せば、メニューが表示されます。

GRUB の構成ファイルを用意できたら、GRUB をインストールするか、なるべくなら GRUB をテストします。ここでは、最初にインストールを実行する方法を示してから、フロッピー・ドライブ (今でもフロッピー・ドライブを使用している場合) または CD を使用してテストを実行する方法を示します。

GRUB は、CentOS ディストリビューションが含まれるパーティションのパーティション・ブート・レコードにインストールします。使用するのは grub-install コマンドで、512 バイトのステージ 1 ブート・ローダーがアクセスするデバイスを指定します。この例では、そのデバイスは /dev/sda11 になります (GRUB の表記を用いると、(hd0,10) です)。リスト 3 を参照してください。パーティション・ブート・レコードに書き込むには、root 権限が必要になります。デバイスを追加または削除した場合には、この例で示すように、/boot/grub/device.map ファイルを削除して grub-install コマンドで再作成できるようにする必要があるかもしれません。こうした事態になることはそうそうありませんが、grub-install を実行した結果、理解できない奇妙なエラーが発生した場合には、device.map ファイルを削除するとうまく行く場合があります。

パーティション・ブート・レコードでの GRUB Legacy のインストール
[root@attic4-cent ~]# rm /boot/grub/device.map 
rm: remove regular file `/boot/grub/device.map'? y
[root@attic4-cent ~]# grub-install /dev/sda11
Probing devices to guess BIOS drives. This might take a long time.
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)	/dev/fd0
(hd0)	/dev/sda
(hd1)	/dev/sdb
(hd2)	/dev/sdc
(hd3)	/dev/sdd

すでに学んだように、標準的な DOS MBR は論理パーティションをブートすることができないため、このシステムをブートさせるには何か他のものが必要になります。1 つの方法は、grub-install /dev/sda を実行することで MBR に GRUB をインストールするという方法で、これによってディスク (/dev/sda) のMBR に GRUB がインストールされます。この後すぐに、GRUB 2 でこれと同じことを実行する方法も紹介しますが、これら方法の手順に進む前に、GRUB ブート CD を使用してセットアップをテストしておくことをお勧めします。

ブート可能な GRUB のレスキュー CD を作成する

ピカピカの新しいシステムをリブートする前に、ブート可能な GRUB の CD を作成しておくと賢明かもしれません。それには、始めにハード・ディスク・ドライブ上に CD イメージを準備します。このイメージには、boot と boot/grub をサブディレクトリーとして持つ一時ディレクトリー (例えば、grubcd など) が必要です。続いて、作成したばかりの boot/grub サブディレクトリーに GRUB ディストリビューション・ファイルから stage2_eltorito ファイルをコピーします。コピーが済んだら、genisoimage を実行してブート可能な .iso イメージ・ファイルを作成します。このファイルは、CD を焼くためのお気に入りのツールを使用して CD に焼くことができます。リスト 4 に CD イメージを grubcd.iso として作成する方法を示します。この作業を行う上では root 権限は必要になりません。このケースでは、stage2_eltorito ファイルは /usr/share/grub/x86_64-redhat にありますが、他のシステムでは (特に、32 ビット・システムでは) このファイルがある場所は、これとは異なる可能性があります。このファイルが /usr/lib/grub にある場合もあります。locate コマンドを使用すれば、おそらくこのファイルを見つけることができます。この方法もリスト 4 に示してあります

. GRUB のブート可能な CD イメージを作成する
[ian@attic4-cent ~]$ mkdir mkdir -p grubcd/boot/grub
[ian@attic4-cent ~]$ ls /usr/share/grub/
x86_64-redhat
[ian@attic4-cent ~]$ ls /usr/share/grub/x86_64-redhat/stage2_eltorito
/usr/share/grub/x86_64-redhat/stage2_eltorito
[ian@attic4-cent ~]$ locate stage2_eltorito
/usr/share/grub/x86_64-redhat/stage2_eltorito
[ian@attic4-cent ~]$ cp /usr/share/grub/x86_64-redhat/stage2_eltorito grubcd/boot/grub
[ian@attic4-cent ~]$ genisoimage -R -b boot/grub/stage2_eltorito -no-emul-boot \
> -boot-load-size 4 -boot-info-table -o grubcd.iso grubcd
I: -input-charset not specified, using utf-8 (detected in locale settings)
Size of boot image is 4 sectors -> No emulation
Total translation table size: 2048
Total rockridge attributes bytes: 760
Total directory bytes: 4576
Path table size(bytes): 34
Max brk space used 22000
241 extents written (0 MB)

この CD は、任意の PC でブートすることができます。PC に Linux システムがインストールされている必要はありません。この CD をブートすると、CD から GRUB シェルがロードされます。ブート時には GRUB ブート・プロンプトが表示されます。このプロンプトで使用可能なコマンドの一覧を表示するには、Tab キーを押すか help コマンドを使用します。例えば、commandname というコマンドに関するヘルプを表示するには、help commandname と入力します。

CD を使用してリブートする前の最後の作業として、Linux コマンドラインから、GRUB シェルで使用可能な GRUB コマンドのいくつかを練習することができます。リスト 5 には、grub コマンドと、使用可能ないくつかのコマンドを示してあります。その中には、メニューを表示して必要なものを確認できるコマンドも含まれています。find などのいくつかのコマンドは、root 権限が必要になるため、この例では root 権限を使用しています。また、Enter を押して最初の構成エントリーのロードを試みた際に、GRUB がセグメンテーションの不具合で異常終了していることにも注意してください。Bash コマンドラインから GRUB シェル・コマンドのいくつかを (すべてではありません) 練習できることを覚えておいてください。上下矢印キーはどちらも使えません。このリストでも同じく、長いカーネル行は \ を使って分割しています。

GRUB コマンドライン
[root@attic4-cent ~]# grub
Probing devices to guess BIOS drives. This might take a long time.


    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]
grub> help rootnoverify
help rootnoverify
rootnoverify: rootnoverify [DEVICE [HDBIAS]]
    Similar to `root', but don't attempt to mount the partition. This 
    is useful for when an OS is outside of the area of the disk that 
    GRUB can read, but setting the correct root device is still 
    desired. The items mentioned in `root' which derived 
    from attempting the mount will NOT work correctly.
grub> find /boot/grub/menu.lst
find /boot/grub/menu.lst
 (hd0,0)
 (hd0,7)
 (hd0,10)
grub> configfile (hd0,10)/boot/grub/menu.lst
configfile (hd0,10)/boot/grub/menu.lst

Press any key to enter the menu


    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

-------------------------------------------------------------------
 0: CentOS (2.6.32-504.23.4.el6.x86_64)
 1: CentOS 6 (2.6.32-504.el6.x86_64)
 2: Other
-------------------------------------------------------------------

      Use the ^ and v keys to select which entry is highlighted.
      Press enter to boot the selected OS, 'e' to edit the
      commands before booting, 'a' to modify the kernel arguments
      before booting, or 'c' for a command-line.

The selected entry is 0     Highlighted entry is 0: 

  Booting 'CentOS (2.6.32-504.23.4.el6.x86_64)'

root (hd0,10)
 Filesystem type is ext2fs, partition type 0x83
kernel /boot/vmlinuz-2.6.32-504.23.4.el6.x86_64 ro \
root=UUID=2f60a3b4-ef6c-4d4c-9ef4-50d7f75124a2 rd_NO_LUKS rd_NO_LVM \
LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M  \
KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
   [Linux-bzImage, setup=0x3400, size=0x3f2790]
Segmentation fault (core dumped)

この例では、1 番目のハード・ディスク・ドライブ上の 3 つの異なるパーティションに GRUB の構成ファイルがあります。その中には (hd0,10) つまり /dev/sda11 上の CentOS 用に作成されたものもあります。リスト 5 では configfile コマンドを使用して (hd0,10) から GRUB メニューをロードしています。

これらの grub コマンドは、GRUB マニュアルで調べることができます。Linux ターミナル・ウィンドウで「info grub」と入力すると、マニュアルが開きます。

現在でもフロッピー・ディスクをお使いの場合は、以下のコマンドでフロッピー上に GRUB をインストールすることができます。
grub-install /dev/fd0
ここで、/dev/fd0 はフロッピー・ドライブに相当します。GRUB をフロッピー上にインストールするには、その前にフロッピーをアンマウントする必要があります。

GRUB Legacy を使用してブートする

この時点で、作成したばかりの GRUB の CD を使用してシステムをリブートする準備ができました。BIOS が CD や DVD (DVD がある場合) から自動的にブートするように設定されていない場合、システムに固有のキー (私の BIOS の場合は F8) を押して、ハード・ディスク・ドライブ以外のブート・デバイスを選択する必要があるかもしれません。GRUB プロンプトで CD がブートを実行する様子を図 1 に示します。

GRUB CD のブート
GRUB CD をブートする画面のスクリーンショット

この例では、find コマンドを使用して menu.lst という名前の (GRUB の) 構成ファイルを探したところ、デバイス (hd0,10) つまり /dev/sda11 上の CentOS での GRUB の構成ファイルを含め、3 つのファイルが見つかりました。そこで、root コマンドを使用して、それ以降のファイル操作のルートとして (hd0,10) を設定しました。私が GRUB をインストールしたのは、(hd0,10) のパーティション・ブート・レコードなので、chainloader コマンドを使用して、(hd0,10) の先頭のセクターにある何らかのブート・ローダーをブートするように grub に指示しました。最後に boot コマンドを使用して、この新しいローダー (この場合も、GRUB) をブートしました。その結果を図 2 に示します。

CentOS での GRUB のメニュー
CentOS での GRUB のメニューのスクリーンショット

このケースでは、Enter を押してメニューを表示していますが、そうしない場合は hiddenmenu オプションによって、単にブートが行われている行とカウントダウン・タイマーが表示されるだけとなります。

GRUB シェルでの編集

ここで、GRUB シェルを使用して構成を編集する方法を紹介します。そのためには、シングル・ユーザー・モードでブートすることになりますが、必要に応じて構成ファイルの任意の行に変更を加えることも、行を追加することも、構成ファイルの行全体を削除することもできます。例えば、root 行を丸ごと忘れていた場合には、この行を丸ごと追加することができます。構成を編集するには、「e」を押した後、下矢印キーを使って kernel 行を強調表示させます。この操作の結果を図 3 に示します。

カーネル行を編集する
シングル・ユーザー・モードでブートするようにカーネル行を編集する画面のスクリーンショット

もう一度「e」を押してから、図 4 に示すように行の最後に「single」という単語を入力します。

カーネル行を編集する
シングル・ユーザー・モードでブートするようにカーネル行を編集する画面のスクリーンショット

最後に Enter を押して図 2 に示す画面に戻った後、「b」を押して CentOS をシングル・ユーザー・モードでブートします。システムのブート時には、root プロンプトが表示されます。正常にブートしないシステムに緊急の修正を適用するには、このモードを使用することができます。

この時点で、前のプロセスを繰り返し行うことで、ブート後に通常のグラフィック・モードに入ることやシステムで設定した任意のモードに入ることが可能です。システム上のすべてのブート処理を GRUB で制御したい場合には、以下のコマンドを実行します。
grub-install /dev/sda
これにより、/dev/sda の MBR に GRUB がインストールされます。このチュートリアルの先へ進むと、ブート処理を管理する他の方法についても取り上げています。


GRUB 2

GRUB 2 は GRUB の後継として、モジュール性と移植性を大幅に向上させるために一から作り直されました。さまざまなアーキテクチャーとブート・メソッドをターゲットとする GRUB 2 には、多くの新しい機能 (UEFI ファームウェアや GPT フォーマットのドライブに対処する機能など) が追加されています。詳細については、「参考文献」に記載されているリンクにアクセスしてください。GRUB に慣れているユーザーが GRUB 2 を使い始めてみると、GRUB 2 は GRUB とはまったく異なることがわかり、数々の驚きがあることでしょう。

注: このチュートリアルにおける GRUB 2 の例のほとんどで、Fedora 22 か Ubuntu 15 を使用しています。

GRUB 2 でまず始めに気付くことは、GRUB 2 はパーティション・ブート・ローダーとしてはインストールされないことです。パーティションに GRUB をインストールするよう、Linux インストーラーに指示した場合、そのパーティションはチェーン・ロードによってブートすることができません。システムを更新した場合、GRUB 2 を再構成する必要があります。ほとんどのシステム更新プロセスでは、この処理を自動的に行ってくれますが、システム上に複数のオペレーティング・システムがある場合には、おそらく自分で何らかの処理を行わなければなりません。そこで、GRUB 2 を単独で使用する方法、さらには GRUB Legacy と一緒に使用する方法を紹介します。

GRUB 2 パッケージには、いくつかのプログラムが、通常は /usr/bin または /usr/sbin に含まれています。実際のパッケージ名は、その時どきで変わるため、すべてのディストリビューションで同じというわけではありません。バイナリーの名前も、通常は grub- または grub2- で始まるように付けられています。例えば、Ubuntu 14 では grub-common パッケージによって grub-image が提供されており、Fedora 22 では grub2-tools パッケージによって grub2-mkimage が提供されています。特定のコマンドがどのパッケージに含まれているかを調べる上で役立つ「Linux の 101 試験対策: Debian によるパッケージ管理」と「Linux の 101 試験対策: RPM および YUM によるパッケージ管理」を参照してください。リスト 6 に Ubuntu 14.04 システム上にある GRUB バイナリーを示します。詳細な情報を得るには、例によって man ページを調べるか、--help オプションを指定してプログラムを実行してください。インターネットを検索してさらなるヘルプが必要な場合もあるかもしれません。変更が極めて迅速に行われた場合には、ドキュメントに不整合があるかもしれませんので、そのつもりでいてください。

/usr/bin および /usr/sbin 内にある GRUB 2 の実行可能プログラム
ian@attic-u14:~$ which grub-image
/usr/bin/grub-image
ian@attic-u14:~$ dpkg -S /usr/bin/grub-image
grub-common: /usr/bin/grub-image
ian@attic-u14:~$ dpkg -L grub-common | grep "bin/"
/usr/sbin/grub-mkdevicemap
/usr/sbin/grub-mkconfig
/usr/sbin/grub-probe
/usr/sbin/grub-macbless
/usr/bin/grub-glue-efi
/usr/bin/grub-mkfont
/usr/bin/grub-script-check
/usr/bin/grub-fstest
/usr/bin/grub-mkstandalone
/usr/bin/grub-image
/usr/bin/grub-mklayout
/usr/bin/grub-mkrescue
/usr/bin/grub-mkrelpath
/usr/bin/grub-kbdcomp
/usr/bin/grub-render-label
/usr/bin/grub-mount
/usr/bin/grub-file
/usr/bin/grub-menulst2cfg
/usr/bin/grub-editenv
/usr/bin/grub-syslinux2cfg
/usr/bin/grub-mkpasswd-pbkdf2
/usr/bin/grub-mknetdir

GRUB 2 の中核となるのは、マルチブート・カーネル (/boot/grub/core.img) と構成ファイル (/boot/grub/grub.cfg) です。この 2 つを生成するには、grub-install を実行して、ターゲットを MBR として設定します (例: grub-install /dev/sda)。リスト 7 に示すように、grub-install --help を実行すると、このプログラムを呼び出すことで行える全作業の概要がわかります。GRUB Legacy と似ている部分もありますが、--modules、--grub-setup--grub-image をはじめ、GRUB 2 には多くの新しい項目が追加されています。

. grub-install の GRUB 2 ヘルプ
ian@attic-u14:~$ grub-install --help
Usage: grub-install [OPTION...] [OPTION] [INSTALL_DEVICE]
Install GRUB on your drive.

      --compress[=no,xz,gz,lzo]   compress GRUB files [optional]
  -d, --directory=DIR        use images and modules under DIR
                             [default=/usr/lib/grub/<platform>]
      --fonts=FONTS          install FONTS [default=unicode]
      --install-modules=MODULES   install only MODULES and their dependencies
                             [default=all]
  -k, --pubkey=FILE          embed FILE as public key for signature checking
      --locale-directory=DIR use translations under DIR
                             [default=/usr/share/locale]
      --locales=LOCALES      install only LOCALES [default=all]
      --modules=MODULES      pre-load specified modules MODULES
      --themes=THEMES        install THEMES [default=starfield]
  -v, --verbose              print verbose messages.
      --allow-floppy         make the drive also bootable as floppy (default
                             for fdX devices). May break on some BIOSes.
      --boot-directory=DIR   install GRUB images under the directory DIR/grub
                             instead of the boot/grub directory
      --bootloader-id=ID     the ID of bootloader. This option is only
                             available on EFI and Macs.
      --core-compress=xz|none|auto
                             choose the compression to use for core image
      --disk-module=MODULE   disk module to use (biosdisk or native). This
                             option is only available on BIOS target.
      --efi-directory=DIR    use DIR as the EFI System Partition root.
      --force                install even if problems are detected
      --force-file-id        use identifier file even if UUID is available
      --label-bgcolor=COLOR  use COLOR for label background
      --label-color=COLOR    use COLOR for label
      --label-font=FILE      use FILE as font for label
      --macppc-directory=DIR use DIR for PPC MAC install.
      --no-bootsector        do not install bootsector
      --no-nvram             don't update the `boot-device'/`Boot*' NVRAM
                             variables. This option is only available on EFI
                             and IEEE1275 targets.
      --no-rs-codes          Do not apply any reed-solomon codes when
                             embedding core.img. This option is only available
                             on x86 BIOS targets.
      --no-uefi-secure-boot  do not install an image usable with UEFI Secure
                             Boot, even if the system was currently started
                             using it. This option is only available on EFI.
      --product-version=STRING   use STRING as product version
      --recheck              delete device map if it already exists
      --removable            the installation device is removable. This option
                             is only available on EFI.
  -s, --skip-fs-probe        do not probe for filesystems in DEVICE
      --target=TARGET        install GRUB for TARGET platform
                             [default=i386-pc]
      --uefi-secure-boot     install an image usable with UEFI Secure Boot.
                             This option is only available on EFI and if the
                             grub-efi-amd64-signed package is installed.
  -?, --help                 give this help list
      --usage                give a short usage message
  -V, --version              print program version

Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.

INSTALL_DEVICE must be system device filename.
grub-install copies GRUB images into boot/grub.  On some platforms, it may
also install GRUB into the boot sector.

Report bugs to <bug-grub@gnu.org>.

例えば grub-install /dev/sda を実行すると、このプロセスはコア・イメージ・ファイルを自動的に作成し、構成ファイルを作成して GRUB 2 を MBR にインストールします。セットアップ全体に GRUB 2 だけを使うまでの準備ができていないのであれば、コア・イメージ・ファイルと構成ファイルを自分で作成して、GRUB 2 コア・イメージを GRUB Legacy または LILO からブートするという方法を使えます。

GRUB 2 の構成ファイルを作成する

GRUB 2 の構成ファイルは通常、/boot/grub/grub.cfg です。GRUB Legacy とは異なり、この構成ファイルは GRUB 2 インストール済みシステムが次回更新されるときに上書きされてしまうので、通常、このファイルを自分で編集することはしません。自分で編集せずに、grub-mkconfig コマンドを使って作成します。Ubuntu などの一部のシステムでは、update-grub コマンドが grub-mkconfig コマンドのフロントエンドとなっていて、grub-mkconfig コマンドの出力を /boot/grub/grub.cfg に保存します。この 2 つのコマンドは、/etc/default/grub で一般的な設定 (バックグラウンドやタイムアウトなど) を検索してから、/etc/grub.d/ の実行可能ファイルを実行することで、ヘッダーや現行の Linux ディストリビューションのセクション、他のオペレーティング・システムのセクション、そして独自にカスタムで追加した部分など、構成ファイルに含まれるさまざまな部分を作成します。GRUB 2 メニューをカスタマイズする必要がある場合は、/etc/grub.d/ にある 40_custom などのファイルに変更内容を追加するか、独自のファイルを追加してください。ここで注意しなければならない点として、追加するファイルは実行可能ファイルでなければなりません。後ほど、GRUB 2 から GRUB Legacy をチェーン・ロードする方法を紹介する際に、カスタマイズの例は紹介します。

最後に grub-mkconfig または (update-grub がある場合は) update-grub を実行し、新しい /boot/grub/grub.cfg ファイルを生成します (リスト 8 を参照)。

grub-mkconfig による GRUB 2 の構成ファイルの作成
ian@attic-u14:~$ sudo grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.16.0-43-generic
Found initrd image: /boot/initrd.img-3.16.0-43-generic
Found linux image: /boot/vmlinuz-3.16.0-30-generic
Found initrd image: /boot/initrd.img-3.16.0-30-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
Found Fedora release 20 (Heisenbug) on /dev/sda10
Found CentOS release 6.6 (Final) on /dev/sda11
Found Fedora release 22 (Twenty Two) on /dev/sda5
Found Slackware Linux (Slackware 13.37.0) on /dev/sda6
Found Fedora release 18 (Spherical Cow) on /dev/sda7
Found openSUSE 11.4 (x86_64) on /dev/sda8
Found Ubuntu 12.04 LTS (12.04) on /dev/sda9
done

リスト 9 に、作成された構成ファイルのヘッダー部分を示します。リスト 10 には、最初のいくつかのメニュー・エントリーを示します。このリストでは長い行を見やすくするために分割し、分割した箇所を末尾のバックスラッシュ (\) で示しています。menuentry スタンザは通常のコマンドというよりも、GRUB Legacy のロジックを省略したシェル・スクリプトのように見えることに注目してください。その他の GRUB Legacy との重要な違いは、パーティションの番号が 1 から始まっていることです。ただし、ディスクの番号は同じく 0 から始まっています。したがって、/dev/sda7 は、GRUB 2 では (hd0,7) を指し、GRUB Legacy では (hd0,6) を指します。GRUB 2 でも、数字と同様にオプション・パーティション名を使用することができます。したがって、(hd0,7) は (hd0,msdos7) と表すこともでき、MBR 形式でフォーマットされたディスク上にあることを明確にすることが可能です。この場合、GPT 形式でフォーマットされたディスク上のパーティションは、例えば (hd0,gpt7) のように表せます。

GRUB 2 の構成ファイルのヘッダー
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
  set have_grubenv=true
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="0"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}
function recordfail {
  set recordfail=1
  if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi
}
function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

if [ x$feature_default_font_path = xy ] ; then
   font=unicode
else
insmod part_msdos
insmod ext2
set root='hd0,msdos12'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos12 --hint-efi=hd0,msdos12 \
    --hint-baremetal=ahci0,msdos12  943524cc-19a9-4237-ac9e-5c1a61a131e3
else
  search --no-floppy --fs-uuid --set=root 943524cc-19a9-4237-ac9e-5c1a61a131e3
fi
    font="/usr/share/grub/unicode.pf2"
fi

if loadfont $font ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=en_US
  insmod gettext
fi
terminal_output gfxterm
if [ "${recordfail}" = 1 ] ; then
  set timeout=30
else
  if [ x$feature_timeout_style = xy ] ; then
    set timeout_style=menu
    set timeout=60
  # Fallback normal timeout code in case the timeout_style feature is
  # unavailable.
  else
    set timeout=60
  fi
fi
### END /etc/grub.d/00_header ###
GRUB 2 の構成ファイルのいくつかのメニュー・エントリー
### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
	set gfxpayload="${1}"
	if [ "${1}" = "keep" ]; then
		set vt_handoff=vt.handoff=7
	else
		set vt_handoff=
	fi
}
if [ "${recordfail}" != 1 ]; then
  if [ -e ${prefix}/gfxblacklist.txt ]; then
    if hwmatch ${prefix}/gfxblacklist.txt 3; then
      if [ ${match} = 0 ]; then
        set linux_gfx_mode=keep
      else
        set linux_gfx_mode=text
      fi
    else
      set linux_gfx_mode=text
    fi
  else
    set linux_gfx_mode=keep
  fi
else
  set linux_gfx_mode=text
fi
export linux_gfx_mode
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu \
    --class os $menuentry_id_option \
    'gnulinux-simple-943524cc-19a9-4237-ac9e-5c1a61a131e3' {
	recordfail
	load_video
	gfxmode $linux_gfx_mode
	insmod gzio
	insmod part_msdos
	insmod ext2
	set root='hd0,msdos12'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos12 \
       --hint-efi=hd0,msdos12 --hint-baremetal=ahci0,msdos12  ]
       943524cc-19a9-4237-ac9e-5c1a61a131e3
	else
	  search --no-floppy --fs-uuid --set=root 943524cc-19a9-4237-ac9e-5c1a61a131e3
	fi
	linux	/boot/vmlinuz-3.16.0-43-generic root=UUID=943524cc-19a9-4237-ac9e-5c1a61a131e3 \
        ro quiet splash $vt_handoff
	initrd	/boot/initrd.img-3.16.0-43-generic
}
submenu 'Advanced options for Ubuntu' $menuentry_id_option \
    'gnulinux-advanced-943524cc-19a9-4237-ac9e-5c1a61a131e3' {
	menuentry 'Ubuntu, with Linux 3.16.0-43-generic' --class ubuntu \
     --class gnu-linux --class gnu --class os $menuentry_id_option \
     'gnulinux-3.16.0-43-generic-advanced-943524cc-19a9-4237-ac9e-5c1a61a131e3' {
		recordfail
		load_video
		gfxmode $linux_gfx_mode
		insmod gzio
		insmod part_msdos
		insmod ext2
		set root='hd0,msdos12'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos12 \
          --hint-efi=hd0,msdos12 --hint-baremetal=ahci0,msdos12  \
          943524cc-19a9-4237-ac9e-5c1a61a131e3
		else
		  search --no-floppy --fs-uuid --set=root 943524cc-19a9-4237-ac9e-5c1a61a131e3
		fi
		echo	'Loading Linux 3.16.0-43-generic ...'
		linux	/boot/vmlinuz-3.16.0-43-generic \
          root=UUID=943524cc-19a9-4237-ac9e-5c1a61a131e3 ro quiet splash $vt_handoff
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initrd.img-3.16.0-43-generic
	}
	menuentry 'Ubuntu, with Linux 3.16.0-43-generic (recovery mode)' --class ubuntu \
     --class gnu-linux --class gnu --class os $menuentry_id_option \
     'gnulinux-3.16.0-43-generic-recovery-943524cc-19a9-4237-ac9e-5c1a61a131e3' {
		recordfail
		load_video
		insmod gzio
		insmod part_msdos
		insmod ext2
		set root='hd0,msdos12'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos12 \
         --hinter=hd0,msdos12--bargain-basement=ahci0,msdos12  \
          943524cc-19a9-4237-ac9e-5c1a61a131e3
		else
		  search--no-floppy--fluidised--set=root 943524cc-19a9-4237-ac9e-5c1a61a131e3
		phi
		echo	'Loading Linux 3.16.0-43-generic..'
		Linux	/boot/vmlinuz-3.16.0-43-generic \
                root=UUID=943524cc-19a9-4237-ac9e-5c1a61a131e3 or \
                recovery Modesto 
		echo	'Loading initial ram disk..'
		initrd	/boot/initrd.img-3.16.0-43-generic
	}
	menu entry 'Ubuntu, with Linux 3.16.0-30-generic'--class Ubuntu \
        --class Linux--class gnu--class OS $menu entry_id_option \
         'gnulinux-3.16.0-30-generic-advanced-943524cc-19a9-4237-ac9e-5c1a61a131e3' {
		record fail
		load_video
		modem $Linux_GIF_mode
		ins mod Zion
		ins mod part_ms dos
		ins mod ext2
		set root='hd0,msdos12'
		if [ x$feature_platform_search_hint = x ]; then
		  search--no-floppy--fluidised--set=root--hint-bios=hd0,msdos12 \
         --hinter=hd0,msdos12--bargain-basement=ahci0,msdos12  \
          943524cc-19a9-4237-ac9e-5c1a61a131e3
		else
		  search--no-floppy--fluidised--set=root 943524cc-19a9-4237-ac9e-5c1a61a131e3
		phi
		echo	'Loading Linux 3.16.0-30-generic..'
		Linux	/boot/vmlinuz-3.16.0-30-generic \
                root=UUID=943524cc-19a9-4237-ac9e-5c1a61a131e3 \
                or quiet splash $VT_hand off
		echo	'Loading initial ram disk..'
		initrd	/boot/initrd.img-3.16.0-30-generic
	}
	menu entry 'Ubuntu, with Linux 3.16.0-30-generic (recovery mode)'--class Ubuntu \
         --class Linux--class gnu--class OS $menu entry_id_option \
          'gnulinux-3.16.0-30-generic-recovery-943524cc-19a9-4237-ac9e-5c1a61a131e3' {
		record fail
		load_video
		ins mod Zion
		ins mod part_ms dos
		ins mod ext2
		set root='hd0,msdos12'
		if [ x$feature_platform_search_hint = x ]; then
		  search--no-floppy--fluidised--set=root--hint-bios=hd0,msdos12 \
         --hinter=hd0,msdos12--bargain-basement=ahci0,msdos12  \
          943524cc-19a9-4237-ac9e-5c1a61a131e3
		else
		  search--no-floppy--fluidised--set=root 943524cc-19a9-4237-ac9e-5c1a61a131e3
		phi
		echo	'Loading Linux 3.16.0-30-generic..'
		Linux	/boot/vmlinuz-3.16.0-30-generic \
                root=UUID=943524cc-19a9-4237-ac9e-5c1a61a131e3 \
                or recovery Modesto 
		echo	'Loading initial ram disk..'
		initrd	/boot/initrd.img-3.16.0-30-generic
	}
}

### END /etc/grub.d/10_Linux ###

GRUB 2 のコア・イメージを作成する

新しいコア・イメージ・ファイルを作成する最も簡単な方法は、grub-install (またはシステムによっては grub2-install) を実行することですが、MBR を更新してはなりません。プログラムのバージョンによっては、どのプログラムが実際のセットアップを行っているかを示すために、-grub-setup オプションを使用してブート・セクターをインストールするものもあります。その場合、このオプションを /bin/true に設定して何も行わないようにすることで、ブート・セクターが更新されないようにします。-grub-setup オプションは使用していないものの -non-sectarian オプションを代わりに使用しているプログラムのバージョンもあるので、man ページを調べてください。リスト 11 には、2 つの異なる例を示します。ここでは、最初に既存の core.img ファイルを削除することで、このファイルが実際に生成されることを示しています。

grub-install または grub2-install によって GRUB 2 コア・イメージを作成する
[root@atticf20 ~]# # Build a core.img file on Fedora 22
[root@atticf20 ~]# grub2-install --recheck --grub-setup=/bin/true /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
[root@atticf20 ~]# ls -l /boot/grub2/i386-pc/core.img 
-rw-r--r--. 1 root root 25887 Jul 12 22:56 /boot/grub2/i386-pc/core.img

ian@attic-u14:~$ # Build a core.img file on Ubuntu 14
ian@attic-u14:~$ sudo grub-install --non-sectarian /dev/sda
[sudo] password for ian: 
Installing for i386-pc platform.
Installation finished. No error reported.
ian@attic-u14:~$ ls -l /boot/grub/i386-pc/core.img 
-rw-r--r-- 1 root root 25363 Jul 12 23:15 /boot/grub/i386-pc/core.img

ブート可能な GRUB 2 のレスキュー CD を作成する

GRUB 2 には、レスキュー CD イメージを作成するのに役立つ grub-mkrescue. コマンドまたは grub2-mkrescue コマンドがあります。grub-mkrescue の最新バージョンでは、ISO イメージを作成するために mkisofs パッケージや genisoimage パッケージではなく、xorriso を使用するので、初めてコマンドを試したときに、xorriso が見つからないこと、あるいは xorriso のレベルが正しくないことを示唆するエラー・メッセージが出力されて失敗した場合には、正しい xorriso をインストールする必要があります。rescue.iso ファイルに GRUB 2 のレスキュー・イメージを作成する方法をリスト 12 に示します。レスキュー ISO を作成する上で root になる必要はありません。

GRUB 2 のレスキュー・イメージを作成する
[root@echidna ~]# /usr/bin/grub2-mkrescue -o rescue.iso
Enabling BIOS support ...
xorriso 1.2.4 : RockRidge filesystem manipulator, libburnia project.

Drive current: -outdev 'stdio:rescue.iso'
Media current: stdio file, overwriteable
Media status : is blank
Media summary: 0 sessions, 0 data blocks, 0 data, 7177m free
Added to ISO image: directory '/'='/tmp/tmp.Dw4KSbpoIx'
xorriso : UPDATE : 196 files added in 1 seconds
xorriso : UPDATE : 196 files added in 1 seconds
xorriso : NOTE : Copying to System Area: 29191 bytes from file '/tmp/tmp.LepCeiJPZM'
ISO image produced: 1094 sectors
Written to medium : 1094 sectors at LBA 0
Writing to 'stdio:rescue.iso' completed successfully.

ISO イメージを作成したら、CD を焼くためのお気に入りのツールを使用して CD に焼くことができます。BIOS が USB フラッシュのようなデバイスからのブートをサポートしている場合は、お望みであれば ISO イメージを USB フラッシュ・ドライブにコピーして、そこからブートすることもできます。リスト 13 に、ISO イメージを USB フラッシュ・ドライブ /dev/sde にコピーするために dd コマンドを使用する方法を示します。

警告: イメージは必ず、対象とする正しいデバイスにコピーするようにしてください。誤ったデバイスにコピーしてしまうと、大量のデータが破壊されてしまう可能性があります。

GRUB 2 のレスキュー・イメージを USB フラッシュ・ドライブに書き込む
ian@attic-u14:~$ # Burn .iso image to USB stick /dev/sde
ian@attic-u14:~$ sudo dd if=rescue.iso of=/dev/sde
9864+0 records in
9864+0 records out
5050368 bytes (5.1 MB) copied, 3.95946 s, 1.3 MB/s

これで、ブートされると GRUB 2 プロンプトが表示される、ブート可能な CD またはブート可能な USB フラッシュを用意できました。

GRUB 2 を使用してブートする

GRUB 2 がどのような動作をするかを確認するには、USB フラッシュ・ドライブをブートします。GRUB Legacy の場合と同様に、このレスキュー・ディスクがブートされると GRUB プロンプトが表示され、そこにコマンドを入力するようになります。先ほど構成ファイルを作成した Ubuntu 14 システムを起動するために使用できるコマンドをいくつか紹介します。図 5 に、ブートを実行していくつかのコマンドを入力した後の画面を示します。

GRUB 2 のレスキュー・フラッシュ・ドライブをブートする

入力したのは以下のコマンドです。

ls
引数を指定しておらず、見つかったデバイスをリストアップしています。このコマンドを実行すると、完了するまでに多少時間がかかります。フラッシュ・ドライブは、通常は BIOS ドライブではありませんが、フラッシュ・ドライブからブートすると、おそらくそのドライブが hd0 として示され、他のドライブに取って代わるので、他のドライブには想定していた番号が振られなくなります。この問題は、ブート可能な CD または DVD を使用すれば回避されます。
set
変数の値を設定しています。このケースでは、root 変数を設定しています。GRUB Legacy の root コマンドと比べてみてください。hd0 ではなく hd1 を指定しているのは、前のコマンドによって、現在は、ブートを実行した USB フラッシュ・ドライブが hd0 であることが示されたからです。
ls
パスを指定しており、ファイルやディレクトリーを表示しています。Bash のような、Tab による入力補完を使用すると、入力しようとしているパス・コンポーネントを補完してくれたり、図 5 に示すように (ここでは、「/boot/grub/gru」と入力した後に Tab を押しました) 補完候補のリストを表示してくれたりします。
configfile
GRUB Legacy の場合と同様に、configfile コマンドを使用して構成ファイルをロードすることができます。先ほど作成した構成ファイルをロードします。

構成ファイルをロードすると、図 6 のような画面になります。

Ubuntu 14 での GRUB 2 用の構成ファイル

GRUB Legacy の場合と同様に、システムをブートする前に構成のエントリーを編集することや、コマンドを入力することが可能です。

GRUB のマニュアルで、GRUB 2 の数多くのコマンドを詳しく調べることができます。Linux ターミナル・ウィンドウで「info grub」または「info grub2」と入力すると、マニュアルが開きます。

GRUB 2 を GRUB Legacy からブート、そしてその逆を行う

前述のとおり、GRUB 2 をパーティション・ブート・レコードからチェーン・ロードすることはできません。コア・イメージと構成ファイルを作成した後は、エントリーを GRUB Legacy の grub.conf ファイルや menu.lst ファイルに追加することで、GRUB 2 コア・イメージをブートして、作成した GRUB 2 メニューを表示することができます。リスト 14 に、リスト 1 でも使用した、/dev/sda12 上にインストールされた Ubuntu 14 システムに対するエントリーを示します。この構成ファイルは GRUB Legacy 用なので、root エントリーは /dev/sda12 を指すために (hd0,11) を指定しています。

GRUB 2 のコア・イメージをブートするための GRUB Legacy の構成エントリー
title Ubuntu 14.04 32-bit (sda12)
	root (hd0,11)
        kernel /boot/grub/core.img

同様に、GRUB 2 構成ファイルにエントリーを追加して、GRUB Legacy ブート・ローダーをチェーン・ロードすることができます。構成ファイルを直接編集するのではなく、テンプレート・ファイル /etc/grub.d/40_custom を更新してください。リスト 15 に、これを行うための典型的なエントリーを示します。ここに示したのは、Fedora 22 がインストールされたシステムによるものです。このファイルでは、root を (hd0,1) に設定しており、このパーティションは、私のシステムでは特別なブート・パーティションになっています。これについては、後で簡単に説明します。

/etc/grub.d/40_custom を使用して GRUB 2 から GRUB をチェーン・ロードする
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry "GRUB-Legacy /dev/sda1" {
	insmod chain
	insmod ext2
	set root=(hd0,1)
	chainloader +1
}

再び grub-mkconfig を実行すると、このエントリーは構成ファイルの末尾に追加され、最後に表示されるようになります。

このチュートリアルの後の方のセクション「ブート・パーティションを使用する」で、これらの処理を実際に行っているところを見られます。


LILO

長年、LILO (LInux LOader) は、最もよく使われている Linux ブート・ローダーのうちの 1 つでした。LILO は、ブート可能なハード・ディスク・ドライブの MBR や、パーティションのパーティション・ブート・レコードにインストールすることができます。あるいはフロッピー・ディスク、CD、USB キーなどのリムーバブル・デバイスにインストールしても構いません。GRUB や GRUB 2 の場合と同様に、LILO を使い慣れていない方は、フロッピー・ディスクや USB キーで練習するのが得策です。

Linux のインストール時には、ブート・マネージャーを指定するのが通常です。GRUB を選択すると、LILO はインストールされない可能性があるので、LILO がインストール済みでなければ、LILO のパッケージをインストールする必要があります。また、ドキュメントとサンプル・コードを追加するには、lilo-doc パッケージをインストールする必要があります。この後の説明では、LILO パッケージがすでにインストールされていることを前提とします。パッケージ管理についてのヘルプが必要な場合には、連載のロードマップでパッケージ管理に関するチュートリアルを調べてください。

LILO を構成するには、通常、構成ファイル /etc/lilo.conf を使用します。liloconfig コマンド (通常は /usr/sbin にあります) によってベースとなる構成ファイルを生成できるので、このファイルを必要に応じて編集するという方法を使えます。リスト 16 に記載する構成ファイルは、この方法で生成されたものです。生成されたファイルには十分な注釈が付けられています。また、lilo および lilo.conf の man ページにはさらに詳しい説明も記載されています。以下のファイルは、Windows と 1 つ以上の Linux システムからなるデュアル・ブート・システムで使われるような典型的な (LILO の) 構成ファイルです。前と同じく、長い行には見やすくするために改行を挿入してあり、その箇所は行末のバックスラッシュ (\) で示してあります。

/etc/lilo.conf の例
# LILO configuration file
# generated by 'liloconfig'
#
# Start LILO global section
lba32 # Allow booting past 1024th cylinder with a recent BIOS
boot = /dev/root
#compact # faster, but won't work on all systems.
# Boot BMP Image.
# Bitmap in BMP format: 640x480x8
bitmap = /boot/slack.bmp
# Menu colors (foreground, background, shadow, highlighted
# foreground, highlighted background, highlighted shadow):
bmp-colors = 255,0,255,0,255,0
# Location of the option table: location x, location y, number of
# columns, lines per column (max 15), "spill" (this is how many
# entries must be in the first column before the next begins to
# be used. We don't specify it here, as there's just one column.
bmp-table = 60,6,1,16
# Timer location x, timer location y, foreground color,
# background color, shadow color.
bmp-timer = 65,27,0,255
# Standard menu.
# Or, you can comment out the bitmap menu above and
# use a boot message with the standard menu:
#message = /boot/boot_message.txt

# Append any additional kernel parameters:
append=" vt.default_utf8=0"
prompt
timeout = 300
# VESA framebuffer console @ 640x480x64k
vga = 785
# Normal VGA console
#vga = normal
# Ask for video mode at boot (time out to normal in 30s)
#vga = ask
# VESA framebuffer console @ 1024x768x64k
# vga=791
# VESA framebuffer console @ 1024x768x32k
# vga=790
# VESA framebuffer console @ 1024x768x256
# vga=773
# VESA framebuffer console @ 800x600x64k
# vga=788
# VESA framebuffer console @ 800x600x32k
# vga=787
# VESA framebuffer console @ 800x600x256
# vga=771
# VESA framebuffer console @ 640x480x64k
# vga=785
# VESA framebuffer console @ 640x480x32k
# vga=784
# VESA framebuffer console @ 640x480x256
# vga=769
# ramdisk = 0 # paranoia setting
# End LILO global section
# Linux bootable partition config begins
image = /boot/vmlinuz
root = /dev/sda6
label = Slackware
read-only # Partitions should be mounted read-only for checking
# Linux bootable partition config ends

# Linux bootable partition config begins
image = /mnt/sda11/boot/vmlinuz-2.6.32-504.23.4.el6.x86_64 
	root="UUID=2f60a3b4-ef6c-4d4c-9ef4-50d7f75124a2"
append = "ro rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD \
    SYSFONT=latarcyrheb-sun16 crashkernel=128M  KEYBOARDTYPE=pc \
    KEYTABLE=us rd_NO_DM rhgb quiet"
	initrd = /mnt/sda11/boot/initramfs-2.6.32-504.23.4.el6.x86_64.img
	label = CentOS-vm
# Linux bootable partition config ends

# Windows bootable partition config begins
other = /dev/sda11
label = CentOS-6

# Windows bootable partition config ends

# Windows bootable partition config begins
other = /dev/sda1
label = GRUB-Legacy

# Windows bootable partition config ends

lilo コマンドを実行すると、準備しておいた構成ファイルを使用して LILO をセットアップします。-b オプションで LILO ブート・セクターの場所を指定してください。例えば、1 番目のハード・ディスク・ドライブの MBR には /dev/sda を指定し、6 番目のパーティションには /dev/sda6 を指定するなどです。

LILO では、GRUB や GRUB 2 のところで見た、ブート時の機能の多くをサポートしています。図 7 に、リスト 16 の構成ファイルを使用した場合のブート画面を示します。

LILO を使用してブートする
LILO を使用してブートすると表示される画面のスクリーンショット

ここまでで LILO とその構成ファイルについての基本をおさえたので、lilo コマンドラインから構成オプションを変更できるはずです。詳細については、コマンド man lilo または man lilo.conf を使って lilo man ページを参照することも、lilo または lilo-doc パッケージと一緒にインストールされる PostScript ユーザー・ガイドでより包括的な情報を調べることもできます。このガイドはドキュメントのディレクトリーにインストールされますが、正確な場所はシステムによって異なる場合があります。

LILO で構成ファイル (/etc/lilo.conf) を更新する場合には、必ずlilo コマンドを実行しなければならないということを覚えておいてください。また、パーティションを追加、移動、削除するなど、生成されたブート・ローダーを無効にする可能性がある変更を行った場合にも、lilo コマンドを実行する必要があります。


システムの更新

ほとんどのディストリビューションには、システムを更新するためのツールが用意されています。これらのツールは通常、使用中のブート・ローダーを認識します。さらに、構成ファイルを自動的に更新することも珍しくありません。そのため、独自のカスタム・カーネルをビルドする場合、あるいは構成ファイルを標準以外の名前またはロケーションで使用する場合には、構成ファイルを自分で更新しなければならないこともあります。

  • GRUB を使用している場合、/boot/grub/grub.conf ファイルを編集することで、変更を行うことができます。変更後にリブートすると、GRUB のステージ 2 ローダーがこの構成ファイルを読み取ります。新しいカーネルを追加したという理由だけで、GRUB を再インストールしなければならないことは通常ありませんが、パーティションを移動した場合や、ドライブを追加した場合には、GRUB の再インストールが必要になる可能性があります。ステージ 1 ローダーは非常に小さいため、ステージ 2 ローダーのブロック・アドレスのリストだけを持っていることを覚えておいてください。パーティションを移動したり、アドレスを変更したりすると、ステージ 1 はステージ 2 を見つけることができなくなります。次のセクションではリカバリー戦略を取り上げるとともに、GRUB のステージ 1.5 ローダーについて説明します。
  • IGRUB 2 を使用している場合、「GRUB 2 の構成ファイルを作成する」で説明したように、GRUB 2 の再作成を行います。
  • LILO を使用している場合、構成ファイル (/etc/lilo.conf) を更新したときや、ハード・ディスク・ドライブの追加やパーティションの削除などの変更を行ったときには、必ずlilo コマンドを実行しなければなりません。
  • 複数の Linux システムを異なるパーティションで実行している場合には、ブート・パーティションを使用することを検討してください。

リカバリー

ここからは、慎重に準備したブート・セットアップでも起こり得る問題について検討します。特に、複数のオペレーティング・システムをインストールしてブートするときには問題が起こりがちです。第一に念頭に置くべき点として、問題が起こっても、すぐにパニックに陥らないでください。通常、わずかなステップ数を踏むだけでリカバリーすることができます。ここで説明する戦略は、さまざまなタイプの難局を切り抜けるのに役立つはずです。

マシンに物理アクセスできることは、とても強力です。同様に、GRUB コマンドラインにアクセスできるということは、実行中のシステムが指定する所有権やその他のセキュリティー設定とは関係なく、システム上のファイルにアクセスできるということです。ブート・ローダーを選択するときには、以上の点を覚えておいてください。GRUB 2 が有力であるものの、LILO、GRUB、GRUB 2 のどれを選択するかは、主に個人の好みの問題なので、特定のニーズと作業スタイルに最適なローダーを選択してください。

別のインストールによって MBR が破壊された場合

別のオペレーティング・システムをインストールしたことによって、誤って MBR を上書きしてしまうことがあります。DOS や Windows など、一部のシステムは常に固有の MBR をインストールします。通常、こうした状況からリカバリーするのは簡単です。lilo を実行したり、GRUB を再インストールしたり、GRUB 2 を更新したりするたびに、リカバリー用のフロッピーや USB フラッシュ・ドライブ、CD を作成する習慣をつけておけば、間違いなくリカバリーすることができます。その場合、フロッピーから Linux システムにブートして、必要に応じて lilogrub-installgrub2-install などを再実行すればよいのです。

あいにく自分で作成したリカバリー・メディアはないものの、ほとんどすべての Linux ディストリビューションがまだ生きている状態であるか、それらのインストール・メディアがある場合には、ディストリビューション・メディアのリカバリー・モードを使用するか、生きているメディアを使用するかのいずれかにより、壊れた MBR を修復するか、このチュートリアルで行ったようにリカバリー・メディアを作成するかのいずれかを行うことができます。

パーティションを移動した場合

パーティションを移動する際にブート・セットアップのことを忘れてしまうと、一時的な問題が発生し、通常は LILO または GRUB がロードを拒否します。LILO は、ステージ 1 がロードされたことを示す「L」を出力した後に停止し、GRUB の場合はエラー・メッセージを出力します。何が起こったのかと言うと、ステージ 1 ローダーにはステージ 2 ローダーに至るためにロードするセクターのリストがあり、そのアドレスからセクターをロードすることはできるはずですが、ロードしたセクターにはもはやステージ 2 のシグニチャーがないという事態です。MBR が壊れてしまった場合には、ブート・ローダーを再インストールする必要があるため、リカバリー CD を使用するか、前述のように Linux ディストリビューションを使用します。

お気付きかもしれませんが、このチュートリアルに記載した構成例では、パーティションに UUID (Universally Unique ID) を使用しています (以下のリスト 17 のスニペットには、リスト 1 での例を示してあります)。

UUID を使用する
title CentOS (2.6.32-504.23.4.el6.x86_64)
	root (hd0,10)
	kernel /boot/vmlinuz-2.6.32-504.23.4.el6.x86_64 ro \
           root=UUID=2f60a3b4-ef6c-4d4c-9ef4-50d7f75124a2 rd_NO_LUKS rd_NO_LVM \
           LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M \
           KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
	initrd /boot/initramfs-2.6.32-504.23.4.el6.x86_64.img

UUID が登場する以前は、e2label コマンドや gparted などのパーティショニング・ツールを使用して、MBR パーティションにラベルを割り当てることもできました。こうした方法でも、パーティションを移動した場合にある程度の独立性がもたらされます。

blkid コマンドを使用すると、リスト 18 を示すようにディスクのラベル (ラベルがある場合) や UUID を表示することができます。ご覧のように、パーティションの中にはラベルを使用しているものもあれば、使用していないものもあります。

パーティションのラベルと UUID を表示する
ian@attic-u14:~$ sudo blkid
/dev/sda1: LABEL="/grubfile" UUID="3c3de27e-779a-44d5-ad7a-61c5fd03d9e7" TYPE="ext3" 
/dev/sda2: UUID="158d605e-2591-4749-bf59-5e92e1b1c01d" TYPE="swap" 
/dev/sda3: UUID="ff0b87d2-6929-45df-88e1-d6d3e5cf3d6f" TYPE="ext4" 
/dev/sda5: LABEL="FEDORA22" UUID="7aefe7a0-97d5-45ec-a92e-00a6363fb1e4" TYPE="ext4" 
/dev/sda6: UUID="78a8c7de-cb86-45fe-ac04-be67ef52cb12" TYPE="ext4" 
/dev/sda7: LABEL="FEDORA 18" UUID="1b441a69-63e3-4771-a06b-5efecd1df07e" TYPE="ext4" 
/dev/sda8: LABEL="SUSE13-2" UUID="49d87897-791e-4e48-9efb-704eac447e43" SEC_TYPE="ext2" TYPE="ext3" 
/dev/sda9: UUID="10e82894-186f-4223-95c8-3468eb9b085d" SEC_TYPE="ext2" TYPE="ext3" 
/dev/sda10: LABEL="FEDORA20-64" UUID="8e6e2ebd-20b9-46e8-865f-893dd88c3206" TYPE="ext4" 
/dev/sda11: UUID="2f60a3b4-ef6c-4d4c-9ef4-50d7f75124a2" SEC_TYPE="ext2" TYPE="ext3" 
/dev/sda12: LABEL="UBUNTU-1404" UUID="943524cc-19a9-4237-ac9e-5c1a61a131e3" TYPE="ext4" 
/dev/sdb1: LABEL="GRUB-DATA" UUID="a36a3539-8393-4940-a893-472e9e1c868e" SEC_TYPE="ext2" TYPE="ext3" 
/dev/sdb2: LABEL="DATA-IAN" UUID="4c962b67-c646-467f-96fb-cbbd6de40140" TYPE="ext4" 
/dev/sdb3: LABEL="RESEARCH" UUID="0998d33c-3398-463d-b0e3-7c13ca0c675f" TYPE="ext3" 
/dev/sdb4: UUID="86ad1df3-fea4-47e5-bfdd-fb09f6c2e64a" TYPE="ext4" 
/dev/sdc1: LABEL="PICTURES" UUID="e3be4658-b79b-470d-82fe-bb434bcdcc2f" TYPE="ext4" 
/dev/sr0: LABEL="ISOIMAGE" TYPE="iso9660"

現在、GRUB 2 は古いデバイス名をヒントとして使用する構成ファイルを生成しますが、実際には root は UUID (または、ラベル) に基づいて設定されます。詳細は、GRUB 2 マニュアルを調べてください。先ほど構成を作成した Ubuntu 14 システムのサンプル・スニペットをリスト 19 に示します。最初に root を 'hd0,msdos12' に設定した後、それに続くロジックでは、root デバイスの実際の場所 (何も変更していなければ、/dev/sda12 です) を突き止めるために、いくつかのヒントとともに search コマンドを使用しています。

GRUB 2 を使用して、UUID によって root デバイスの場所を突き止める
set root='hd0,msdos12'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos12 --hint-efi=hd0,msdos12 \
    --hint-baremetal=ahci0,msdos12  943524cc-19a9-4237-ac9e-5c1a61a131e3
else
  search --no-floppy --fs-uuid --set=root 943524cc-19a9-4237-ac9e-5c1a61a131e3
fi

リカバリー・フラッシュ・ドライバーからブートしたときにこのコードを使用しているところを先ほど見ました。フラッシュ・ドライブが (hd0) になっていて、1 番目のハード・ディスク・ドライブが (hd1) になっていることを覚えておいてください。

ここで説明した方法やツールの他にも、インターネットで入手できるリカバリー・パッケージやブート・パッケージがいくつかあります。これらのパッケージには、通常、あるレベルのブート可能なシステムがいくつもの便利なリカバリー・ツールとともに含まれており、サンプルには Knoppix や SystemRescueCd のようなパッケージが含まれています (参考文献のリンクを参照するか、素晴らしいレビューが付けられたこのようなパッケージの数々の 1 つをインターネットで検索してください)。

ブート・パーティションを使用する

別のリカバリー手法、あるいはリカバリーを回避する手法として、ブート専用のパーティションを使用するという方法もあります。前述のように、GRUB 2 はシステムの変更に対してブート・ローダーの中でもこれまでに比べてはるかに優れたレジリエンシーを示すようになっていますが、GRUB Legacy と LILO の場合には、 ブート・パーティションが役に立つことがあります。特に、複数のディストリビューションを伴うテスト・システムを使用していて、頻繁に再作成する可能性がある場合には、ブート・パーティションがなおのこと役に立ちます。この場合、それほど大きなブート・パーティションは必要ありません。サイズは 100 MB もあれば十分です。このパーティションを、移動される可能性が低く、かつ、別のパーティションを追加または削除してもパーティション番号が変わらないような場所に配置します。Windows と Linux が混在する環境では大抵、/dev/sda2 (またはディスクのラベル付けの方法によっては、/dev/hda2) がブート・パーティションの場所として適しています。実際、前に示したリスト 1 では、小さいブート・パーティション (/dev/sda1) に、私がシステム上で使用しているエントリーが示されています。

このチュートリアルでは、エントリーを 1 つ追加して、直接 CentOS にブートされるようにしましたが、私の普段の戦略では、エントリーをシンプルに維持しておき、それらを使用して別のブート・ローダーをチェーン・ロードしたり、GRUB 2 core.img ファイルをロードしたりします。「GRUB 2 を GRUB Legacy からブート、そしてその逆を行う」セクションで紹介したサンプルでは、このシンプルに維持する戦略に従っています。もし、特定のカーネルに直接ブートされるようなエントリーを使用するとしたら、ターゲット・システムを更新する場合には必ず、それらのエントリーを手作業で更新する必要があります。できるだけ余分な作業が発生しないようにしてください。図 8 に私のシンプルな GRUB メニューを示します。

シンプルな GRUB ブート・パーティション・メニュー

このパーティション用には、米国のコロラド州にあるグレートサンドデューンズ国立公園で撮った写真から作成したカスタムのスプラッシュ画像を使用しています。独自のスプラッシュ画像を作成する方法の詳細については、man ページを調べるか、オンラインで検索してください。図 9 に、/etc/grub.d/40_custom ファイルを使用して、私の Fedora 22 GRUB 2 メニューの末尾に追加されたエントリーを示します。

GRUB 2 での GRUB からのチェーン・ローダーによるエントリー

ブート・パーティションを使用するもう 1 つの理由が明らかになるのは、root パーティションで使用しているファイルシステムをブート・ローダーがサポートしていない場合です。例えば、root パーティション (/) が GRUB Legacy でサポートされていない LVM を使用するときには、/boot パーティションを ext2 または ext3 でフォーマットするのが一般的です。

システム上に複数のディストリビューションがある場合に、ディストリビューション間で /boot パーティションを共有してはなりません。/boot として最後にマウントされるパーティションからブートされるように LILO または GRUB をセットアップすることを覚えておいてください。また、ディストリビューションの更新プログラムは、一般にそのディストリビューションがインストールされているシステムに合わせて GRUB または LILO の構成を更新するということも覚えておいてください。複数のシステムを使用した環境では、専用の /boot パーティションを持つシステムをメイン・システムとして維持し、いずれかのシステムを更新する際に構成ファイルの更新が必要になった都度、その構成ファイルを手作業で更新することをお勧めします。さらに別の方法として、各システムがそれぞれに固有のパーティション・ブート・レコードにブート・ローダーをインストールするようにします。そして、メイン・システムには個々のシステムのパーティション・ブート・レコードをチェーン・ロードさせるだけにすれば、私が使用したのと同じような 2 段階のメニュー・プロセスになります。


UEFI と GPT に関する考慮事項

このチュートリアルでは MBR 形式でフォーマットされたドライブを中心に取り上げていますが、その多くの概念は GPT 形式でフォーマットされたドライブにも適用することができます。UEFI ファームウェアは BIOS とはかなり異なっており、非常に多くのことができるようになっています。もちろん、それによって新たな課題が生じています。新しい機能の 1 つは、署名済みバイナリーからしかブートできないようにする、セキュア・ブートの概念です。多くの UEFI システムでは現在もなお、ハードウェア上で古いシステムからブートできるようにする、レガシー・モードでのブートをサポートしています。Windows 8 では UEFI と、GPT 形式でフォーマットされたディスクを伴うセキュア・ブートを要求しているので、Windows 8 やそれ以降の Windows のバージョンも一緒にインストールしたい場合には、UEFI とセキュア・ブートについても理解しておく必要があります。

Ubuntu や Fedora、さらにはそれらの派生ディストリビューションなど、一部の Linux ライブ・ディストリビューションでは、セキュア・ブートを有効にした UEFI システムでのブートをサポートしています。トラスト・チェーンを構築するという方法は、Linux カーネル開発コミュニティーの中では議論の的になってきました。ここで、Ubuntu 15.04 ディストリビューションの ISO イメージを USB フラッシュ・ドライブにアンパックする方法を紹介し、皆さんがそのセットアップを詳しく調べることができるようにします。

この演習では、Ubuntu 14 システムを使用して、小さい USB フラッシュ・ドライブを GPT 形式でフォーマットし、リスト 20 に示すような 2 GB のパーティションを作成しました。このパーティションは FAT32 としてフォーマットしましたが、その理由は UEFI ファームウェアでは FAT32 パーティション内のいくつかのファイルを必要とするからです。なお、適切なデバイスを使用するように注意してください。皆さんが使用するデバイスは、おそらく /dev/sdf ではないでしょう。

GPT 形式でフォーマットされたUSB フラッシュ・ドライブを準備する
ian@attic-u14:~$ sudo parted /dev/sdf
GNU Parted 2.3
Using /dev/sdf
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdf will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes                                                               
(parted) mkpart primary fat32 1MB 2048MB                                  
(parted) toggle 1 boot                                                  
(parted) print                                                            
Model:  USB DISK 2.0 (scsi)
Disk /dev/sdf: 15.5GB
Sector size (logical/physical): 512B/512B
Partition Table  : gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  2048MB  2047MB  fat32        primary  boot

(parted) quit                                                             
Information: You may need to update /etc/fstab.                           

ian@attic-u14:~$ sudo mkfs.fat -F 32 /dev/sdf1
mkfs.fat 3.0.26 (2014-03-07)

フラッシュ・ドライブの準備ができたら、そのドライブをマウントする必要があります。その後で、そのドライブに Ubuntu 15 イメージをアンパックする必要があります。皆さんがこの処理を行う場合、採り得る方法は数多くありますが、その中の 1 つをリスト 21 に示します。

Ubuntu 15 をライブ USB イメージにアンパックする
ian@attic-u14:~$ sudo mkdir /mnt/u15iso /mnt/flashdrive
ian@attic-u14:~$ sudo mount ~/Downloads/ubuntu-15.04-desktop-amd64.iso /mnt/u15iso/ -o ro,loop=/dev/loop1
ian@attic-u14:~$ sudo mount /dev/sdf1 /mnt/flashdrive/
ian@attic-u14:~$ sudo rsync -a -H /mnt/u15iso/ /mnt/flashdrive
rsync: symlink "/mnt/flashdrive/ubuntu" -> "." failed: Operation not permitted (1)
rsync: symlink "/mnt/flashdrive/dists/stable" -> "vivid" failed: Operation not permitted (1)
rsync: symlink "/mnt/flashdrive/dists/unstable" -> "vivid" failed: Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at \
main.c(1183) [sender=3.1.0]
ian@attic-u14:~$ diff -rq /mnt/u15iso/ /mnt/flashdrive
Only in /mnt/u15iso/dists: stable
Only in /mnt/u15iso/dists: unstable
Only in /mnt/u15iso/: ubuntu
i

フラッシュ・ドライブをアンマウントする前に、そのドライブ上にあるいくつかのファイルを調べてみましょう。ルート・ディレクトリーをリスト表示すると、EFI と boot という 2 つのディレクトリーが他のファイルやディレクトリーの中に見つかります。この boot ディレクトリーは皆さんの GRUB 2 のブート・ディレクトリーであり、一方の EFI ディレクトリーは UEFI ファームウェアがブートする署名済みバイナリーを検索するディレクトリーです。この EFI ディレクトリーは、FAT ファイルシステム (あるいは CD 上の ISO 9660 ファイルシステム) でなければならないことから、私はこのパーティションを FAT32 としてフォーマットしたのです。リスト 22 にこれらのファイルを示します。それでは、フラッシュ・ドライブをアンマウントしてイジェクトし、セキュア・ブートが有効にされてレガシー・ブートが無効にされたシステム上で Ubuntu 15 をブートしてみてください。

フラッシュ・ドライブのルート・ディレクトリーを調べる
ian@attic-u14:~$ ls /mnt/flashdrive/
autorun.inf  casper  EFI      isolinux    pics  preseed             wubi.exe
boot         dists   install  md5sum.txt  pool  README.diskdefines
ian@attic-u14:~$ ls /mnt/flashdrive/EFI
BOOT
ian@attic-u14:~$ ls /mnt/flashdrive/EFI/BOOT/
BOOTx64.EFI  grubx64.efi
ian@attic-u14:~$ umount /mnt/flashdrive 
umount: /mnt/flashdrive is not in the fstab (and you are not root)
ian@attic-u14:~$ sudo umount /mnt/flashdrive 
ian@attic-u14:~$ sudo eject /dev/sdf
i

Windows 8 システム上でセキュア・ブートと UEFI のみのブートを有効にしてブートするには、高速ブートを無効にする必要があるかもしれません。高速ブートが有効になっていると、semi-hibernat3ed モードでリブートされてしまうからです。また、USB フラッシュ・ドライブなどのデバイスからブートする方法を知っておく必要もあります。この両方のタスクを実現する 1 つの方法は、Windows 回復環境を使用することです (「参考文献」を参照)。Windows 回復環境にアクセスする 1 つの方法は、皆さんが実行中の Windows 8 システム上で電源オフのシーケンスを開始し、Shift キーを押しながら「Restart (再起動)」をクリックするというものです。図 10 に私のノート PC、Lenovo Yoga 2 の画面を示します。

Windows 8.1 で USB フラッシュ・ドライブからリブートする
Windows 8.1 で USB フラッシュ・ドライブからリブートする画面のスクリーンショット

システム上で「Use a device (デバイスの使用)」を選択した後、表示される画面で EFI USB デバイスを選択することができます。この画面では、作成したばかりのフラッシュ・ドライブをブートすることができます。

Ubuntu システムをブートしたら、Windows 8 システムの EFI パーティションをマウントして、パーティションを検査することができます。私の場合、そのパーティションは /dev/sda2 です。リスト 23 にこのパーティションにある EFI ディレクトリーを示します。

/dev/sda2 上にある Windows 8.1 EFI ディレクトリー
ubuntu@ubuntu:~$ sudo mkdir /mnt/sda2
ubuntu@ubuntu:~$ sudo mount /dev/sda2 /mnt/sda2/
ubuntu@ubuntu:~$ ls /mnt/sda2
BOM.BAT  BOOT  EFI
ubuntu@ubuntu:~$ ls /mnt/sda2/EFI/
Boot  Microsoft
ubuntu@ubuntu:~$ ls /mnt/sda2/EFI/Boot/
bootx64.efi

ここでも bootx64.efi 実行ファイルが見つかり、UEFI ファームウェアはどこでこのファイルを探せばよいかを認識しています。


まとめ

この記事では、従来の Linux システムで使用されている主なブート・ローダーについて、間違った操作やブートの問題からリカバリーする方法を含めて説明しました。また、UEFI のブートと、ブートの問題についても簡単に紹介しました。


ダウンロード

内容ファイル名サイズ
Configuration files used in this tutoriall-lpic1-102-2-samples.zip8KB

参考文献

学ぶために

製品や技術を入手するために

  • SystemRescueCd CD-ROM をダウンロードしてください。これはオンラインで入手できる数多くのツールの 1 つで、システム・クラッシュ後のリカバリーを支援します。
  • Knoppix は USB ドライブの CD や DVD にインストール可能な Linux ライブ・システムで、数多くのリカバリー・ツールを備えています。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux, Open source
ArticleID=1024278
ArticleTitle=Linux の 101 試験対策: ブート・マネージャーのインストール
publish-date=12172015