「GRUB」の版間の差分
細 |
|||
20行目: | 20行目: | ||
{{Related|GUID Partition Table}} |
{{Related|GUID Partition Table}} |
||
{{Related|Unified Extensible Firmware Interface}} |
{{Related|Unified Extensible Firmware Interface}} |
||
− | {{ |
+ | {{Related|GRUB/EFI サンプル}} |
+ | {{Related|GRUB/Tips and tricks}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
30行目: | 31行目: | ||
* ''GRUB'' という名前は公式でソフトウェアのバージョン''2''を示しています、[https://www.gnu.org/software/grub/] を見て下さい。古いバージョンについての記事は [[GRUB Legacy]] を見て下さい。 |
* ''GRUB'' という名前は公式でソフトウェアのバージョン''2''を示しています、[https://www.gnu.org/software/grub/] を見て下さい。古いバージョンについての記事は [[GRUB Legacy]] を見て下さい。 |
||
− | * GRUB は root で ({{ic|/boot}} ファイルシステムを分割しないで) [[ |
+ | * GRUB は root で ({{ic|/boot}} ファイルシステムを分割しないで) [[Btrfs]] を使った zlib や LZO による圧縮をサポートしています。 |
− | * GRUB は root で [[ |
+ | * GRUB は root で [[F2FS]] を使うことをサポートしていないため、サポートされているファイルシステムで {{ic|/boot}} を分割する必要があります。 |
=== GRUB Legacy ユーザーへのメモ === |
=== GRUB Legacy ユーザーへのメモ === |
||
37行目: | 38行目: | ||
* [[GRUB Legacy]] から GRUB へのアップグレードは[[#インストール|下]]で書かれている GRUB のフレッシュインストールとほとんど同じです。 |
* [[GRUB Legacy]] から GRUB へのアップグレードは[[#インストール|下]]で書かれている GRUB のフレッシュインストールとほとんど同じです。 |
||
* GRUB Legacy と GRUB ではコマンドが異なります。先に進む前に [https://www.gnu.org/software/grub/manual/grub.html#Commands GRUB commands] を確認してください (例: "find" は "search" に置き換わっています)。 |
* GRUB Legacy と GRUB ではコマンドが異なります。先に進む前に [https://www.gnu.org/software/grub/manual/grub.html#Commands GRUB commands] を確認してください (例: "find" は "search" に置き換わっています)。 |
||
− | * 今の GRUB は''モジュール式''であり "stage 1.5" を必要としません。そのため、ブートローダー自体の機能は限定的です -- 拡張機能の必要に応じてハードドライブからモジュールがロードされます (例: RAID サポートや [[ |
+ | * 今の GRUB は''モジュール式''であり "stage 1.5" を必要としません。そのため、ブートローダー自体の機能は限定的です -- 拡張機能の必要に応じてハードドライブからモジュールがロードされます (例: RAID サポートや [[LVM]])。 |
* デバイスの命名規則が GRUB Legacy と GRUB で変わっています。パーティションは0ではなく1から番号付けされ、ドライブは0から番号が始まり、パーティションテーブルのタイプが前に付きます。例えば、{{ic|/dev/sda1}} は {{ic|(hd0,msdos1)}} (MBR) や {{ic|(hd0,gpt1)}} (GPT) と表記されます。 |
* デバイスの命名規則が GRUB Legacy と GRUB で変わっています。パーティションは0ではなく1から番号付けされ、ドライブは0から番号が始まり、パーティションテーブルのタイプが前に付きます。例えば、{{ic|/dev/sda1}} は {{ic|(hd0,msdos1)}} (MBR) や {{ic|(hd0,gpt1)}} (GPT) と表記されます。 |
||
* GRUB は GRUB legacy よりもかなり大きくなっています ({{ic|/boot}} に ~13 MB は占領します)。分割された {{ic|/boot}} パーティションから起動している状態で、このパーティションが 32MB よりも小さい場合、ディスク容量の問題が起こったり、pacman が新しいカーネルのインストールを拒否したりします。 |
* GRUB は GRUB legacy よりもかなり大きくなっています ({{ic|/boot}} に ~13 MB は占領します)。分割された {{ic|/boot}} パーティションから起動している状態で、このパーティションが 32MB よりも小さい場合、ディスク容量の問題が起こったり、pacman が新しいカーネルのインストールを拒否したりします。 |
||
93行目: | 94行目: | ||
===== ESP を作成する ===== |
===== ESP を作成する ===== |
||
− | ESP が存在しない場合、作成する必要があります。[[ |
+ | ESP が存在しない場合、作成する必要があります。[[Unified Extensible Firmware Interface#EFI System Partition]] の指示に従って ESP を作成してください。 |
== インストール == |
== インストール == |
||
101行目: | 102行目: | ||
{{Note|Arch ライブ CD から[[インストールガイド|初期設定]]を行っているときは、grub をインストールする前にインストールしたシステムに chroot してください。CD 自体の grub のインストールスクリプトを使うと {{ic|grub.cfg}} がおかしくなったりして、システムが起動しなくなる問題が発生する可能性があります。}} |
{{Note|Arch ライブ CD から[[インストールガイド|初期設定]]を行っているときは、grub をインストールする前にインストールしたシステムに chroot してください。CD 自体の grub のインストールスクリプトを使うと {{ic|grub.cfg}} がおかしくなったりして、システムが起動しなくなる問題が発生する可能性があります。}} |
||
− | [[ |
+ | [[公式リポジトリ]] にある {{Pkg|grub}} パッケージから GRUB を[[pacman|インストール]]できます。{{AUR|grub-legacy}} がインストールされている場合は置き換えられます。 |
{{Note|パッケージをインストールするだけでは {{ic|/boot/grub/i386-pc/core.img}} ファイルや {{ic|/boot/grub/i386-pc}} 内の GRUB モジュールは更新されません。下で説明されているように {{ic|grub-install}} を使って手動でアップデートする必要があります。}} |
{{Note|パッケージをインストールするだけでは {{ic|/boot/grub/i386-pc/core.img}} ファイルや {{ic|/boot/grub/i386-pc}} 内の GRUB モジュールは更新されません。下で説明されているように {{ic|grub-install}} を使って手動でアップデートする必要があります。}} |
||
110行目: | 111行目: | ||
* [[#ディスクにインストールする]] (推奨) |
* [[#ディスクにインストールする]] (推奨) |
||
* [[#パーティションやパーティションレスディスクにインストールする]] (非推奨) |
* [[#パーティションやパーティションレスディスクにインストールする]] (非推奨) |
||
− | * [[#core.img だけを生成する]] (一番安全な方法ですが、{{ic|/boot/grub/i386-pc/core.img}} を chainload するために [[GRUB Legacy]] や [[ |
+ | * [[#core.img だけを生成する]] (一番安全な方法ですが、{{ic|/boot/grub/i386-pc/core.img}} を chainload するために [[GRUB Legacy]] や [[Syslinux]] など他の BIOS ブートローダーが必要になります) |
{{Note|https://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html に詳しいドキュメントがあります。}} |
{{Note|https://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html に詳しいドキュメントがあります。}} |
||
128行目: | 129行目: | ||
}} |
}} |
||
− | {{ic|/boot}} に [[ |
+ | {{ic|/boot}} に [[LVM]] を使っている場合は、複数の物理ディスクに GRUB をインストールすることができます。 |
===== パーティションやパーティションレスディスクにインストールする ===== |
===== パーティションやパーティションレスディスクにインストールする ===== |
||
188行目: | 189行目: | ||
=== UEFI システム === |
=== UEFI システム === |
||
− | {{Note|それぞれのマザーボードの製造者によって UEFI は別々に実装されているということは有名です。GRUB や EFI が正しく動作しないという問題が起きたユーザーは下で説明されていること以外のハードウェア特有のケースについて詳しい手順を共有することが奨励されています。[[ |
+ | {{Note|それぞれのマザーボードの製造者によって UEFI は別々に実装されているということは有名です。GRUB や EFI が正しく動作しないという問題が起きたユーザーは下で説明されていること以外のハードウェア特有のケースについて詳しい手順を共有することが奨励されています。[[GRUB]] の記事は総合的なことしか書かれていないので、これらの特別な場合については [[GRUB/EFI サンプル]]のページを見て下さい。}} |
最初に {{Pkg|grub}}, {{Pkg|dosfstools}}, {{Pkg|efibootmgr}} パッケージをインストールして、それから下の手順に従って下さい (後ろの2つのパッケージは grub が EFI をサポートするのに必要になります)。 |
最初に {{Pkg|grub}}, {{Pkg|dosfstools}}, {{Pkg|efibootmgr}} パッケージをインストールして、それから下の手順に従って下さい (後ろの2つのパッケージは grub が EFI をサポートするのに必要になります)。 |
||
266行目: | 267行目: | ||
== メイン設定ファイルの生成 == |
== メイン設定ファイルの生成 == |
||
− | インストールした後は、メインの設定ファイル {{ic|grub.cfg}} を生成する必要があります。生成されるファイルは {{ic|/etc/default/grub}} の様々なオプションや {{ic|/etc/grub.d/}} のスクリプトによって設定されます。これについては [[# |
+ | インストールした後は、メインの設定ファイル {{ic|grub.cfg}} を生成する必要があります。生成されるファイルは {{ic|/etc/default/grub}} の様々なオプションや {{ic|/etc/grub.d/}} のスクリプトによって設定されます。これについては [[#設定]] のセクションで説明しています。 |
{{Note|{{ic|/etc/default/grub}} や {{ic|/etc/grub.d/*}} に変更を加えた後は {{ic|grub.cfg}} を再生成する必要があることを覚えておいて下さい。}} |
{{Note|{{ic|/etc/default/grub}} や {{ic|/etc/grub.d/*}} に変更を加えた後は {{ic|grub.cfg}} を再生成する必要があることを覚えておいて下さい。}} |
||
333行目: | 334行目: | ||
Arch で起動して正しい GRUB {{ic|/boot/grub/grub.cfg}} 設定ファイルを再生成してください。 |
Arch で起動して正しい GRUB {{ic|/boot/grub/grub.cfg}} 設定ファイルを再生成してください。 |
||
− | == |
+ | == 設定 == |
− | このセクションでは {{ic|/etc/default/grub}} 設定ファイルの編集についてだけ扱っています。他のオプションは [[ |
+ | このセクションでは {{ic|/etc/default/grub}} 設定ファイルの編集についてだけ扱っています。他のオプションは [[GRUB/Tips and tricks]] を見て下さい。 |
{{Note|{{ic|/etc/default/grub}} に変更を加えた後は必ず[[#メイン設定ファイルの生成|メイン設定ファイルの再生成]]を行なって下さい。}} |
{{Note|{{ic|/etc/default/grub}} に変更を加えた後は必ず[[#メイン設定ファイルの生成|メイン設定ファイルの再生成]]を行なって下さい。}} |
||
347行目: | 348行目: | ||
GRUB のリカバリエントリを生成するには {{ic|/etc/default/grub}} で {{ic|<nowiki>#GRUB_DISABLE_RECOVERY=true</nowiki>}} をコメントアウトする必要があります。 |
GRUB のリカバリエントリを生成するには {{ic|/etc/default/grub}} で {{ic|<nowiki>#GRUB_DISABLE_RECOVERY=true</nowiki>}} をコメントアウトする必要があります。 |
||
− | また、{{ic|<nowiki>GRUB_CMDLINE_LINUX="resume=/dev/disk/by-uuid/${swap_uuid}"</nowiki>}} を使うこともできます ({{ic|${swap_uuid} }} は swap パーティションの [[ |
+ | また、{{ic|<nowiki>GRUB_CMDLINE_LINUX="resume=/dev/disk/by-uuid/${swap_uuid}"</nowiki>}} を使うこともできます ({{ic|${swap_uuid} }} は swap パーティションの [[永続的なブロックデバイスの命名|UUID]] に置き換えて下さい)。 |
複数のエントリを使う時はダブルクォートの中でスペースで区切って下さい。resume と systemd の両方を使うなら次のようになります: |
複数のエントリを使う時はダブルクォートの中でスペースで区切って下さい。resume と systemd の両方を使うなら次のようになります: |
||
353行目: | 354行目: | ||
詳しくは[[カーネルパラメータ]]を見て下さい。 |
詳しくは[[カーネルパラメータ]]を見て下さい。 |
||
− | |||
− | === 外観の設定 === |
||
− | |||
− | GRUB には初めからメニューの見た目を変更する機能が備わっています。GRUB で GRUB graphical terminal, gfxterm を適切なビデオモードで初期化できているか確認してください。これについては [[#"No suitable mode found" エラー]] のセクションで説明されています。GRUB から linux カーネルへは 'gfxpayload' を通してビデオモードが渡されるので、外観の変更を適用するにはこのモードが必要になります。 |
||
− | |||
− | ==== フレームバッファの解像度を設定する ==== |
||
− | |||
− | GRUB は GRUB 自身とカーネル両方のフレームバッファを設定することができます。古い {{ic|1=vga=}} は deprecated になりました。以下のように {{ic|/etc/default/grub}} を編集する方法が推奨されています: |
||
− | |||
− | GRUB_GFXMODE=1024x768x32 |
||
− | GRUB_GFXPAYLOAD_LINUX=keep |
||
− | |||
− | 変更を適用するには、次を実行してください: |
||
− | # grub-mkconfig -o /boot/grub/grub.cfg |
||
− | |||
− | {{ic|gfxpayload}} プロパティによってカーネルに解像度を維持させます。 |
||
− | |||
− | {{Note| |
||
− | * 上記のサンプルで上手く行かないときは {{ic|1=gfxmode="1024x768x32"}} を {{ic|1=vbemode="0x105"}} に置き換えてみて下さい。解像度も、あなたの画面に合った解像度に置き換えることを忘れないで下さい |
||
− | * {{ic|1=# hwinfo --framebuffer}} を使って利用できる全てのモードを表示することができます (hwinfo は [community] から利用可能です)、GRUB のプロンプトでは {{ic|1=vbeinfo}} コマンドが使用できます |
||
− | }} |
||
− | |||
− | この方法が使えない時は、昔の {{ic|1=vga=}} を使って下さい。{{ic|/etc/default/grub}} の {{ic|1="GRUB_CMDLINE_LINUX_DEFAULT="}} という行に追加するだけです、例えば: {{ic|1="GRUB_CMDLINE_LINUX_DEFAULT="quiet splash vga=792"}} は解像度が {{ic|1024x768}} になります。 |
||
− | |||
− | 以下の解像度のどれかを選ぶことができます: {{ic|640×480}}, {{ic|800×600}}, {{ic|1024×768}}, {{ic|1280×1024}}, {{ic|1600×1200}}, {{ic|1920×1200}} |
||
− | |||
− | ==== 915resolution hack ==== |
||
− | |||
− | たまに Intel のグラフィックドライバーで {{ic|1=# hwinfo --framebuffer}} と {{ic|1=vbeinfo}} のどちらも希望する解像度を表示しないことがあります。この場合、{{ic|915resolution}} を使うことができます。この hack は一時的にビデオ BIOS を修正して必要な解像度を追加します。[http://915resolution.mango-lang.org/ 915resolution のホームページ] を見て下さい。 |
||
− | |||
− | まず後で修正されるビデオモードを見つける必要があります。そのために GRUB のコマンドシェルが必要です: |
||
− | {{hc|sh:grub> 915resolution -l| |
||
− | Intel 800/900 Series VBIOS Hack : version 0.5.3 |
||
− | [...] |
||
− | '''Mode 30''' : 640x480, 8 bits/pixel |
||
− | [...] |
||
− | }} |
||
− | 次に、{{ic|Mode 30}} を {{ic|1440x900}} 解像度で上書きします: |
||
− | {{hc|/etc/grub.d/00_header| |
||
− | [...] |
||
− | '''915resolution 30 1440 900 # Inserted line''' |
||
− | set gfxmode=${GRUB_GFXMODE} |
||
− | [...] |
||
− | }} |
||
− | 最後に、先に説明したように {{ic|GRUB_GFXMODE}} を設定して、GRUB の設定ファイルを再生成し、再起動して変更を確認しましょう。 |
||
− | |||
− | ==== 背景画像とビットマップフォント ==== |
||
− | |||
− | GRUB は背景画像と {{ic|pf2}} フォーマットのビットマップフォントをサポートしています。{{Pkg|grub}} パッケージに含まれている unifont フォントは {{ic|unicode.pf2}} というファイル名で置いてあり、同じく ASCII 文字は {{ic|ascii.pf2}} という名前です。 |
||
− | |||
− | サポートされている画像フォーマットは tga, png, jpeg で適切なモジュールがロードされます。利用できる最大解像度はあなたのハードウェアによります。 |
||
− | |||
− | 正しい[[#フレームバッファの解像度を設定する|フレームバッファの解像度]]を設定するようにしてください。 |
||
− | |||
− | {{ic|/etc/default/grub}} を以下のように編集してください: |
||
− | GRUB_BACKGROUND="/boot/grub/myimage" |
||
− | #GRUB_THEME="/path/to/gfxtheme" |
||
− | GRUB_FONT="/path/to/font.pf2" |
||
− | |||
− | {{Note|GRUB を分割して別のパーティションにインストールしている場合、{{ic|/boot/grub/myimage}} は {{ic|/grub/myimage}} になります。}} |
||
− | |||
− | 変更を適用するには {{ic|grub.cfg}} を[[#メイン設定ファイルの生成|再生成]]してください。スプラッシュイメージの追加が成功したのならば、上のコマンドを実行したときに {{ic|"Found background image..."}} と表示されるはずです。 |
||
− | この文句が表示されない場合、画像情報はおそらく {{ic|grub.cfg}} ファイルに組み入れられていません。 |
||
− | |||
− | 画像が表示されないときは、以下をチェックしてください: |
||
− | * {{ic|/etc/default/grub}} に記述したパスとファイル名が正しいか |
||
− | * 画像のサイズとフォーマットは問題ないか (tga, png, 8-bit jpg) |
||
− | * 画像が RGB モードで保存されていて、インデックスは付いていないか |
||
− | * コンソールモードが {{ic|/etc/default/grub}} で無効になっているか |
||
− | * 背景画像を {{ic|/boot/grub/grub.cfg}} ファイルに入れるために {{ic|grub-mkconfig}} コマンドをちゃんと実行したか |
||
− | |||
− | ==== テーマ ==== |
||
− | |||
− | 以下は GRUB パッケージに含まれている Starfield テーマを設定する例です。 |
||
− | |||
− | {{ic|/etc/default/grub}} を編集してください: |
||
− | GRUB_THEME="/usr/share/grub/themes/starfield/theme.txt" |
||
− | |||
− | 変更を適用するには {{ic|grub.cfg}} を[[#メイン設定ファイルの生成|再生成]]してください。テーマの設定が成功すると、ターミナルに {{ic|Found theme: /usr/share/grub/themes/starfield/theme.txt}} と表示されます。 |
||
− | テーマを使っている時は基本的にスプラッシュイメージは表示されません。 |
||
− | |||
− | ==== メニューの色 ==== |
||
− | |||
− | GRUB のメニューの色を設定することができます。GRUB で利用できる色は [https://www.gnu.org/software/grub/manual/html_node/Theme-file-format.html GRUB のマニュアル]に書かれています。 |
||
− | 以下サンプルです: |
||
− | |||
− | {{ic|/etc/default/grub}} を編集してください: |
||
− | GRUB_COLOR_NORMAL="light-blue/black" |
||
− | GRUB_COLOR_HIGHLIGHT="light-cyan/blue" |
||
− | |||
− | ==== メニューを隠す ==== |
||
− | |||
− | GRUB のユニークな機能のひとつとして、メニューを隠して必要な時に {{ic|Esc}} を押して表示することができます。また、タイムアウトカウンターを表示するかどうか設定することもできます。 |
||
− | |||
− | {{ic|/etc/default/grub}} を好きなように編集してください。以下は2つの行の最初のコメントを削除して機能を有効にする例で、タイムアウトを5秒に、そして表示するように設定しています: |
||
− | GRUB_TIMEOUT=0 |
||
− | GRUB_HIDDEN_TIMEOUT=5 |
||
− | GRUB_HIDDEN_TIMEOUT_QUIET=false |
||
− | GRUB_HIDDEN_TIMEOUT がメニューの表示まで待機する秒数です。メニューを隠すには GRUB_TIMEOUT=0 も設定する必要があります。 |
||
− | |||
− | ==== フレームバッファの無効化 ==== |
||
− | |||
− | バイナリドライバーに問題が発生するので NVIDIA のプロプライエタリドライバーを使っているユーザーは GRUB のフレームバッファを無効化するべきです。 |
||
− | |||
− | フレームバッファを無効にするには、{{ic|/etc/default/grub}} を編集して次の行をアンコメントしてください: |
||
− | GRUB_TERMINAL_OUTPUT=console |
||
− | |||
− | 他にも、GRUB でフレームバッファを使いつつカーネルを起動する直前にテキストモードに戻すこともできます。これをするには、{{ic|/etc/default/grub}} 内の次の変数を変更してください: |
||
− | GRUB_GFXPAYLOAD_LINUX=text |
||
− | |||
− | === 永続的なブロックデバイスの命名 === |
||
− | |||
− | [[Persistent block device naming]] を行う方法のひとつとして"古い" {{ic|/dev/sd*}} の代わりに世界でただひとつの UUID を使ってパーティションを識別する方法があります。利点については上のリンクされている記事で説明しています。 |
||
− | |||
− | ファイルシステムの UUID の永続的命名はデフォルトで GRUB で使われています。 |
||
− | |||
− | {{Note|関連するファイルシステムのサイズを変えたり再作成したときはいつでも {{ic|/etc/default/grub}} の新しい UUID を使って {{ic|/boot/grub.cfg}} ファイルを再生成する必要があります。ライブ CD でパーティションやファイルシステムを修正するときは、このことを覚えておいて下さい。}} |
||
− | |||
− | UUID を使うかどうかは {{ic|/etc/default/grub}} 内のオプションによって決めます: |
||
− | |||
− | # GRUB_DISABLE_LINUX_UUID=true |
||
− | |||
− | どちらにしても、変更を生成することを忘れないで下さい: |
||
− | # grub-mkconfig -o /boot/grub/grub.cfg |
||
− | |||
− | === 以前のエントリを思い出させる === |
||
− | |||
− | GRUB はあなたが最後に起動したエントリを記憶することができ、次の起動時にはそれをデフォルトエントリにすることができます。この機能は複数のカーネル (つまり、新しい Arch カーネルと fallback としての LTS カーネル) やオペレーティングシステムを使っている時に便利です。この機能を使うには {{ic|/etc/default/grub}} を編集して {{ic|GRUB_DEFAULT}} の値を変更してください: |
||
− | |||
− | GRUB_DEFAULT=saved |
||
− | |||
− | これで GRUB は保存されたエントリをデフォルトにします。選択したエントリの保存を有効にするには、次の行を {{ic|/etc/default/grub}} に追加してください: |
||
− | |||
− | GRUB_SAVEDEFAULT=true |
||
− | |||
− | {{Note|手動で追加したメニューアイテム (例: {{ic|/etc/grub.d/40_custom}} や {{ic|/boot/grub/custom.cfg}} の Windows) には {{ic|savedefault}} の追加が必要です。設定ファイルを[[#メイン設定ファイルの生成|再生成]]するのを忘れないで下さい。}} |
||
− | |||
− | === デフォルトのメニューエントリを変更する === |
||
− | |||
− | デフォルトで選択されるエントリを変更するには、{{ic|/etc/default/grub}} を編集して {{ic|GRUB_DEFAULT}} の値を変更してください: |
||
− | |||
− | 数字を使う: |
||
− | GRUB_DEFAULT=0 |
||
− | Grub は生成されたメニューを0からカウントします。つまり最初のエントリは0で (デフォルト値)、次のエントリは1と続きます。 |
||
− | |||
− | メニューのタイトルを使う: |
||
− | GRUB_DEFAULT='Arch Linux, with Linux core repo kernel' |
||
− | |||
− | {{Note|設定ファイルを[[#メイン設定ファイルの生成|再生成]]するのを忘れないで下さい。}} |
||
− | |||
− | === Root 暗号化 === |
||
− | |||
− | GRUB が自動で root 暗号化のためのカーネルパラメータを追加するようにするには、{{ic|/etc/default/grub}} の {{ic|GRUB_CMDLINE_LINUX}} に {{ic|1=cryptdevice=/dev/yourdevice:label}} を加えて下さい。 |
||
− | |||
− | {{Tip|GRUB Legacy の設定から更新する場合は、{{ic|/boot/grub/menu.lst.pacsave}} を確認して適切なデバイス・ラベルを加えて下さい。{{ic|kernel /vmlinuz-linux}} という文の後ろにあるはずです。}} |
||
− | |||
− | {{ic|/dev/mapper/root}} にマップされた root の例: |
||
− | |||
− | GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:root" |
||
− | |||
− | また、rootfs で UUID の使用を無効化して下さい: |
||
− | |||
− | GRUB_DISABLE_LINUX_UUID=true |
||
− | |||
− | 設定を再生成してください。 |
||
− | |||
− | === デフォルトでないエントリを一度だけ起動する === |
||
− | |||
− | デフォルトエントリ以外のエントリを一度だけ起動するのに {{ic|grub-reboot}} はとても便利です。次にシステムが再起動した時に、GRUB は最初のコマンドライン引数で指定されたエントリをロードします。そして、その後のブートでは GRUB はデフォルトエントリをロードするように戻ります。設定ファイルの変更や GRUB メニューでのエントリの選択は必要ありません。 |
||
− | {{Note|これをするには {{ic|/etc/default/grub}} に {{ic|1=GRUB_DEFAULT=saved}} を設定 (して {{ic|grub.cfg}} を再生成) する必要があります、{{ic|grub.cfg}} を手動で編集する場合は {{ic|1=set default="${saved_entry}"}} という行を設定します。}} |
||
− | |||
− | == 高度な設定 == |
||
− | |||
− | このセクションでは {{ic|grub.cfg}} の手動編集や、{{ic|/etc/grub.d/}} に記述するカスタムスクリプト、その他高度な設定を扱っています。 |
||
− | |||
− | === grub.cfg を手動で編集する === |
||
− | |||
− | {{Warning|{{ic|grub.cfg}} ファイルの編集は''非推奨''です。このファイルは {{ic|grub-mkconfig}} コマンドで生成して、{{ic|/etc/default/grub}} や、{{ic|/etc/grub.d}} フォルダ内のスクリプトを編集するのに越したことはありません。}} |
||
− | |||
− | 基本的な GRUB 設定ファイルは以下のオプションを使っています: |
||
− | * {{ic|(hd''X'',''Y'')}} はディスク ''X'' 上のパーティション ''Y'' を示します、パーティション番号は1から始まり、ディスク番号は0から始まります |
||
− | * {{ic|1=set default=''N''}} はユーザーアクションのタイムアウト後に選択されるデフォルトブートエントリを指定します |
||
− | * {{ic|1=set timeout=''M''}} はデフォルトのエントリが起動されるまでユーザーが選択するのを待つ時間 ''M'' 秒を表します |
||
− | * {{ic|<nowiki>menuentry "title" {entry options}</nowiki>}} は {{ic|title}} という名前のブートエントリになります |
||
− | * {{ic|1=set root=(hd''X'',''Y'')}} はカーネルや GRUB モジュールが保存されている boot パーティションを指定します (boot パーティションを分割する必要はなく、"root" パーティション ({{ic|/}}) 下のただのディレクトリでもかまいません |
||
− | |||
− | 設定サンプル: |
||
− | |||
− | {{hc|/boot/grub/grub.cfg|<nowiki> |
||
− | # Config file for GRUB - The GNU GRand Unified Bootloader |
||
− | # /boot/grub/grub.cfg |
||
− | |||
− | # DEVICE NAME CONVERSIONS |
||
− | # |
||
− | # Linux Grub |
||
− | # ------------------------- |
||
− | # /dev/fd0 (fd0) |
||
− | # /dev/sda (hd0) |
||
− | # /dev/sdb2 (hd1,2) |
||
− | # /dev/sda3 (hd0,3) |
||
− | # |
||
− | |||
− | # Timeout for menu |
||
− | set timeout=5 |
||
− | |||
− | # Set default boot entry as Entry 0 |
||
− | set default=0 |
||
− | |||
− | # (0) Arch Linux |
||
− | menuentry "Arch Linux" { |
||
− | set root=(hd0,1) |
||
− | linux /vmlinuz-linux root=/dev/sda3 ro |
||
− | initrd /initramfs-linux.img |
||
− | } |
||
− | |||
− | ## (1) Windows |
||
− | #menuentry "Windows" { |
||
− | # set root=(hd0,3) |
||
− | # chainloader +1 |
||
− | #} |
||
− | </nowiki>}} |
||
=== デュアルブート === |
=== デュアルブート === |
||
768行目: | 548行目: | ||
そして、{{ic|grub-mkconfig}} を使って {{ic|grub.cfg}} を再生成してください。 |
そして、{{ic|grub-mkconfig}} を使って {{ic|grub.cfg}} を再生成してください。 |
||
+ | ==== parttool for hide/unhide ==== |
||
− | === GRUB から ISO を直接起動する === |
||
+ | {{ic|C:\}} ディスクを隠している Windows 9x がある場合、GRUB は {{ic|parttool}} を使ってディスクを隠したり表示したりすることができます。例えば、3つの Windows 9x インストールがあり3番目の {{ic|C:\}} ディスクを起動するには CLI に入り以下を実行してください: |
||
− | {{ic|/etc/grub.d/40_custom}} か {{ic|/boot/grub/custom.cfg}} を編集して対象の ISO のエントリを追加してください。編集したら、通常通り {{ic|grub-mkconfig -o /boot/grub/grub.cfg}} を (root で) 実行して GRUB メニューを更新してください。 |
||
+ | parttool hd0,1 hidden+ boot- |
||
− | |||
+ | parttool hd0,2 hidden+ boot- |
||
− | ==== Arch ISO ==== |
||
+ | parttool hd0,3 hidden- boot+ |
||
− | |||
+ | set root=hd0,3 |
||
− | {{Note|以下の例では ISO が {{ic|hd0,6}} 上の {{ic|/archives}} にあると仮定しています。}} |
||
+ | chainloader +1 |
||
− | {{Tip|USB メモリーでは、{{ic|(hd1,$partition)}} のように指定してください。{{ic|img_dev}} パラメータには {{ic|/dev/sdb'''Y'''}} や[[Persistent_block_device_naming|永続的な名前]] (例: {{ic|img_dev=/dev/disk/by-label/CORSAIR}}) を使って下さい。}} |
||
+ | boot |
||
− | |||
− | ===== x86_64 ===== |
||
− | |||
− | menuentry "Archlinux-2013.05.01-dual.iso" --class iso { |
||
− | set isofile="/archives/archlinux-2013.05.01-dual.iso" |
||
− | set partition="6" |
||
− | loopback loop (hd0,$partition)/$isofile |
||
− | linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201305 img_dev=/dev/sda$partition img_loop=$isofile earlymodules=loop |
||
− | initrd (loop)/arch/boot/x86_64/archiso.img |
||
− | } |
||
− | |||
− | ===== i686 ===== |
||
− | |||
− | menuentry "Archlinux-2013.05.01-dual.iso" --class iso { |
||
− | set isofile="/archives/archlinux-2013.05.01-dual.iso" |
||
− | set partition="6" |
||
− | loopback loop (hd0,$partition)/$isofile |
||
− | linux (loop)/arch/boot/i686/vmlinuz archisolabel=ARCH_201305 img_dev=/dev/sda$partition img_loop=$isofile earlymodules=loop |
||
− | initrd (loop)/arch/boot/i686/archiso.img |
||
− | } |
||
− | |||
− | ==== Ubuntu ISO ==== |
||
− | |||
− | {{Note|この例では ISO が {{ic|hd0,6}} 上の {{ic|/archives}} にあると仮定しています。必要に応じて hdd やパーティションの位置を調整する必要があります。}} |
||
− | |||
− | menuentry "ubuntu-13.04-desktop-amd64.iso" { |
||
− | set isofile="/archives/ubuntu-13.04-desktop-amd64.iso" |
||
− | loopback loop (hd0,6)/$isofile |
||
− | linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash -- |
||
− | initrd (loop)/casper/initrd.lz |
||
− | } |
||
− | |||
− | menuentry "ubuntu-12.04-desktop-amd64.iso" { |
||
− | set isofile="/archives/ubuntu-12.04-desktop-amd64.iso" |
||
− | loopback loop (hd0,6)/$isofile |
||
− | linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash -- |
||
− | initrd (loop)/casper/initrd.lz |
||
− | } |
||
− | |||
− | ==== 他の ISO ==== |
||
− | |||
− | 他の設定は http://askubuntu.com/questions/141940/how-to-boot-live-iso-images にあります。 |
||
=== LVM === |
=== LVM === |
||
− | [[ |
+ | [[LVM]] を {{ic|/boot}} で使っている場合、メニューエントリの行の前に次を追加してください: |
insmod lvm |
insmod lvm |
||
853行目: | 592行目: | ||
ここで {{ic|/boot}} がある RAID1 アレイは {{ic|/dev/sda}} と {{ic|/dev/sdb}} に収容されます。 |
ここで {{ic|/boot}} がある RAID1 アレイは {{ic|/dev/sda}} と {{ic|/dev/sdb}} に収容されます。 |
||
− | === |
+ | === 暗号化 === |
+ | ==== Root パーティション ==== |
||
− | {{ic|--label}} オプションを {{ic|search}} に使うことで、人間が読めるラベルをファイルシステムに付けることができます。まず最初に、既存のパーティションにラベリングしてください: |
||
− | # tune2fs -L ''LABEL'' ''PARTITION'' |
||
+ | 暗号化した root ファイルシステムを使うには、{{ic|/etc/default/grub}} を編集して暗号化されたファイルシステムを起動時に解除するためのパラメータを記述する必要があります。例えば、[[mkinitcpio]] の {{ic|encrypt}} フックを使う場合、{{ic|cryptdevice}} パラメータを {{ic|GRUB_CMDLINE_LINUX<nowiki>=</nowiki>""}} コマンドに追加してください。以下の例では、{{ic|sda2}} パーティションを {{ic|/dev/mapper/cryptroot}} として暗号化しています: |
||
− | 次に、ラベルを使ってエントリを追加してください。例: |
||
+ | {{hc|/etc/default/grub|2= |
||
− | menuentry "Arch Linux, session texte" { |
||
+ | GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:cryptroot" |
||
− | search --label --set=root archroot |
||
− | linux /boot/vmlinuz-linux root=/dev/disk/by-label/archroot ro |
||
− | initrd /boot/initramfs-linux.img |
||
− | } |
||
− | |||
− | === GRUB メニューのパスワード保護 === |
||
− | |||
− | ブートパラメータを変えたりコマンドラインを使えないようにして GRUB をセキュアにしたい場合、GRUB の設定ファイルにユーザー名・パスワードの組み合わせを追加することができます。これをするには、{{ic|grub-mkpasswd-pbkdf2}} コマンドを実行してください。パスワードを入力して確認してください: |
||
− | |||
− | {{hc|grub-mkpasswd-pbkdf2| |
||
− | [...] |
||
− | Your PBKDF2 is grub.pbkdf2.sha512.10000.C8ABD3E93C4DFC83138B0C7A3D719BC650E6234310DA069E6FDB0DD4156313DA3D0D9BFFC2846C21D5A2DDA515114CF6378F8A064C94198D0618E70D23717E82.509BFA8A4217EAD0B33C87432524C0B6B64B34FBAD22D3E6E6874D9B101996C5F98AB1746FE7C7199147ECF4ABD8661C222EEEDB7D14A843261FFF2C07B1269A |
||
}} |
}} |
||
− | 次に、以下を {{ic|/etc/grub.d/40_custom}} に追加して下さい: |
||
− | {{hc|/etc/grub.d/40_custom|2= |
||
− | set superusers="'''username'''" |
||
− | password_pbkdf2 '''username''' '''<password>''' |
||
− | }} |
||
− | {{ic|<password>}} は {{ic|grub-mkpasswd_pbkdf2}} によって生成された文字列に置き換えてください。 |
||
+ | {{ic|/etc/default/grub}} を修正したら、[[#メイン設定ファイルの生成|メイン設定ファイルの生成]]を忘れずにしてください。 |
||
− | 設定ファイルを再生成すれば、GRUB コマンドライン、ブートパラメータ、そしてブートエントリには全てプロテクトがかけられます。 |
||
+ | 暗号化デバイスのブートローダー設定に関する詳細は、[[Dm-crypt/システム設定#ブートローダー]]を見て下さい。 |
||
− | この制限は [https://www.gnu.org/software/grub/manual/grub.html#Security GRUB manual] の "Security" パートに書かれている方法によって緩めたりカスタマイズすることができます。 |
||
+ | {{Tip|GRUB Legacy の設定から更新する場合は、{{ic|/boot/grub/menu.lst.pacsave}} を確認して適切なデバイス・ラベルを加えて下さい。{{ic|kernel /vmlinuz-linux}} という文の後ろにあるはずです。}} |
||
− | === Shift キーが押されていない時は GRUB を隠す === |
||
+ | ==== Boot パーティション ==== |
||
− | 起動を高速化するために、GRUB にタイムアウトを待たせる代わりに、GRUB の起動時に {{ic|Shift}} キーが押されていない限り、GRUB にメニューを隠させるということが可能です。 |
||
+ | GRUB [https://dada.cs.washington.edu/doc/grub2-tools-2.02/grub.html#Simple-configuration パラメータ] {{ic|GRUB_ENABLE_CRYPTODISK}} を使うことで [[LUKS]] ブロックデバイスを開くときに GRUB にパスワードを要求させて、設定を読み込んでブロックデバイスから [[initramfs]] と[[カーネル]]をロードすることができます。このオプションは [[Dm-crypt/特記事項#暗号化されていない boot パーティションのセキュア化|boot パーティションが暗号化されてない]]という問題を解決します。 |
||
− | これをするためには、次の行を {{ic|/etc/default/grub}} に追加する必要があります: |
||
+ | {{ic|/etc/default/grub}} に以下を追加することで機能が有効になります: |
||
− | GRUB_FORCE_HIDDEN_MENU="true" |
||
+ | GRUB_ENABLE_CRYPTODISK=y |
||
+ | 設定した後は {{ic|/boot}} をマウントしてから ''grub-mkconfig'' を実行して[[#メイン設定ファイルの生成|メイン設定ファイルを生成]]してください。 |
||
+ | {{Note|{{ic|1=GRUB_ENABLE_CRYPTODISK=1}} [https://savannah.gnu.org/bugs/?41524 will not work] as opposed to the request shown in GRUB 2.02-beta2.}} |
||
− | + | 以下のことに注意してください: |
|
+ | * この機能を使うために {{ic|/boot}} を別パーティションにする必要はありません。システムの root {{ic|/}} ディレクトリツリー下に配置できます。ただし、どちらにしても起動するには二回パスフレーズを入力する必要があります。ひとつ目のパスワードは {{ic|/boot}} マウントポイントのロックを解除して、ふたつ目のパスワードは root ファイルシステムのロックを解除します。 |
||
− | {{hc|/etc/grub.d/31_hold_shift|<nowiki> |
||
+ | * {{ic|/boot}} マウントポイントも関連するシステムアップデートを実行するときは、暗号化された {{ic|/boot}} のロックが解除されて initramfs やカーネルによって再マウントされている必要があります。{{ic|/boot}} パーティションを分割している場合、{{ic|/etc/crypttab}} にエントリとキーファイルを追加することで再マウントさせることができます。[[Dm-crypt/システム設定#crypttab]] を参照。 |
||
− | #! /bin/sh |
||
− | set -e |
||
+ | * 特殊なキーマップを使っている場合、デフォルトの GRUB では反映されていません。LUKS ブロックデバイスのロックを解除するためにパスフレーズを入力するときに問題になります。 |
||
− | # grub-mkconfig helper script. |
||
− | # Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc. |
||
− | # |
||
− | # GRUB is free software: you can redistribute it and/or modify |
||
− | # it under the terms of the GNU General Public License as published by |
||
− | # the Free Software Foundation, either version 3 of the License, or |
||
− | # (at your option) any later version. |
||
− | # |
||
− | # GRUB is distributed in the hope that it will be useful, |
||
− | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
− | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
− | # GNU General Public License for more details. |
||
− | # |
||
− | # You should have received a copy of the GNU General Public License |
||
− | # along with GRUB. If not, see <http://www.gnu.org/licenses/>. |
||
− | |||
− | prefix="/usr" |
||
− | exec_prefix="${prefix}" |
||
− | datarootdir="${prefix}/share" |
||
− | |||
− | export TEXTDOMAIN=grub |
||
− | export TEXTDOMAINDIR="${datarootdir}/locale" |
||
− | source "${datarootdir}/grub/grub-mkconfig_lib" |
||
− | |||
− | found_other_os= |
||
− | |||
− | make_timeout () { |
||
− | |||
− | if [ "x${GRUB_FORCE_HIDDEN_MENU}" = "xtrue" ] ; then |
||
− | if [ "x${1}" != "x" ] ; then |
||
− | if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then |
||
− | verbose= |
||
− | else |
||
− | verbose=" --verbose" |
||
− | fi |
||
− | |||
− | if [ "x${1}" = "x0" ] ; then |
||
− | cat <<EOF |
||
− | if [ "x\${timeout}" != "x-1" ]; then |
||
− | if keystatus; then |
||
− | if keystatus --shift; then |
||
− | set timeout=-1 |
||
− | else |
||
− | set timeout=0 |
||
− | fi |
||
− | else |
||
− | if sleep$verbose --interruptible 3 ; then |
||
− | set timeout=0 |
||
− | fi |
||
− | fi |
||
− | fi |
||
− | EOF |
||
− | else |
||
− | cat << EOF |
||
− | if [ "x\${timeout}" != "x-1" ]; then |
||
− | if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then |
||
− | set timeout=0 |
||
− | fi |
||
− | fi |
||
− | EOF |
||
− | fi |
||
− | fi |
||
− | fi |
||
− | } |
||
− | |||
− | adjust_timeout () { |
||
− | if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then |
||
− | cat <<EOF |
||
− | if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then |
||
− | EOF |
||
− | make_timeout "${GRUB_HIDDEN_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_BUTTON}" |
||
− | echo else |
||
− | make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}" |
||
− | echo fi |
||
− | else |
||
− | make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}" |
||
− | fi |
||
− | } |
||
− | |||
− | adjust_timeout |
||
− | |||
− | cat <<EOF |
||
− | if [ "x\${timeout}" != "x-1" ]; then |
||
− | if keystatus; then |
||
− | if keystatus --shift; then |
||
− | set timeout=-1 |
||
− | else |
||
− | set timeout=0 |
||
− | fi |
||
− | else |
||
− | if sleep$verbose --interruptible 3 ; then |
||
− | set timeout=0 |
||
− | fi |
||
− | fi |
||
− | fi |
||
− | EOF |
||
− | </nowiki>}} |
||
− | |||
− | ファイルに実行可能属性を付与して grub の設定を再生成してください: |
||
− | # chmod a+x /etc/grub.d/31_hold_shift |
||
− | # grub-mkconfig -o /boot/grub/grub.cfg |
||
− | |||
− | === UUID の使用と基本的なスクリプトの混合 === |
||
− | |||
− | 信頼できない BIOS マッピングをやめて UUID を使いたい場合や GRUB の構文に混乱している場合、以下が UUID を使って GRUB にシステムの正しいディスクパーティションを教える小さなスクリプトのブートメニューアイテムのサンプルです。サンプルの中の UUID をあなたのシステムの正しい UUID に置き換えるだけで使うことができます。この例ではシステムに boot と root パーティションを適用しています。他にもパーティションがある場合は GRUB の設定を修正する必要があります: |
||
− | |||
− | menuentry "Arch Linux 64" { |
||
− | # Set the UUIDs for your boot and root partition respectively |
||
− | set the_boot_uuid=ece0448f-bb08-486d-9864-ac3271bd8d07 |
||
− | set the_root_uuid=c55da16f-e2af-4603-9e0b-03f5f565ec4a |
||
− | |||
− | # (Note: This may be the same as your boot partition) |
||
− | |||
− | # Get the boot/root devices and set them in the root and grub_boot variables |
||
− | search --fs-uuid $the_root_uuid --set=root |
||
− | search --fs-uuid $the_boot_uuid --set=grub_boot |
||
− | |||
− | # Check to see if boot and root are equal. |
||
− | # If they are, then append /boot to $grub_boot (Since $grub_boot is actually the root partition) |
||
− | if [ $the_boot_uuid == $the_root_uuid ] ; then |
||
− | set grub_boot=($grub_boot)/boot |
||
− | else |
||
− | set grub_boot=($grub_boot) |
||
− | fi |
||
− | |||
− | # $grub_boot now points to the correct location, so the following will properly find the kernel and initrd |
||
− | linux $grub_boot/vmlinuz-linux root=/dev/disk/by-uuid/$the_root_uuid ro |
||
− | initrd $grub_boot/initramfs-linux.img |
||
− | } |
||
== コマンドシェルを使う == |
== コマンドシェルを使う == |
||
1,045行目: | 640行目: | ||
rescue:grub> normal |
rescue:grub> normal |
||
− | === |
+ | === ページャのサポート === |
− | GRUB は |
+ | GRUB はページャをサポートしており長い出力をするコマンド ({{ic|help}} コマンドなど) を読むことができます。これは通常のシェルモードでしか動作せずレスキューモードでは使えません。ページャを有効にするには、GRUB コマンドシェルで次を入力して下さい: |
sh:grub> set pager=1 |
sh:grub> set pager=1 |
||
1,084行目: | 679行目: | ||
boot |
boot |
||
− | ==== |
+ | ==== UEFI モードでインストールされた Windows/Linux のチェインロード ==== |
+ | insmod ntfs |
||
− | [[#rescue コンソールを使う]] の例を見て下さい。 |
||
+ | set root=(hd0,gpt4) |
||
+ | chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi |
||
+ | boot |
||
+ | ''insmod ntfs'' を使うことで ntfs ファイルシステムモジュールをロードして Windows をロードすることができます。上記の例では (hd0,gpt4) または /dev/sda4 が EFI System Partition (ESP) です。''chainloader'' 行のエントリはチェインロードする .efi ファイルのパスを指定しています。 |
||
− | == GUI 設定ツール == |
||
+ | ==== 通常のロード ==== |
||
− | 以下のパッケージがインストール可能です: |
||
− | * {{App|grub-customizer|ブートローダー (GRUB や BURG) のカスタマイズ|https://launchpad.net/grub-customizer|{{AUR|grub-customizer}}}} |
||
− | * {{App|grub2-editor|GRUB ブートローダー設定の KDE4 コントロールモジュール|http://kde-apps.org/content/show.php?content=139643|{{AUR|grub2-editor}}}} |
||
− | * {{App|kcm-grub2|この Kcm モジュールは GRUB の基本的な設定を管理します|http://kde-apps.org/content/show.php?content=137886|{{AUR|kcm-grub2}}}} |
||
− | * {{App|startupmanager|GRUB Legacy, GRUB, Usplash, Splashy の設定を変更できる GUI アプリ ([https://launchpad.net/startup-manager/+announcement/8300 開発停止])|http://sourceforge.net/projects/startup-manager/|{{AUR|startupmanager}}}} |
||
+ | [[#rescue コンソールを使う]] の例を見て下さい。 |
||
− | == parttool for hide/unhide == |
||
− | |||
− | {{ic|C:\}} ディスクを隠している Windows 9x がある場合、GRUB は {{ic|parttool}} を使ってディスクを隠したり表示したりすることができます。例えば、3つの Windows 9x インストールがあり3番目の {{ic|C:\}} ディスクを起動するには CLI に入り以下を実行してください: |
||
− | parttool hd0,1 hidden+ boot- |
||
− | parttool hd0,2 hidden+ boot- |
||
− | parttool hd0,3 hidden- boot+ |
||
− | set root=hd0,3 |
||
− | chainloader +1 |
||
− | boot |
||
− | == rescue コンソールを使う == |
+ | === rescue コンソールを使う === |
まず [[#コマンドシェルを使う]] を見て下さい。標準シェルを有効にできない場合、ライブ CD や他のレスキューディスクを使って起動し、設定のエラーを直して GRUB を再インストールという方法があります。ただし、そのようなブートディスクはいつも使えるというわけではありません (もしくは必要ありません); レスキューコンソールは驚くほど堅牢です。 |
まず [[#コマンドシェルを使う]] を見て下さい。標準シェルを有効にできない場合、ライブ CD や他のレスキューディスクを使って起動し、設定のエラーを直して GRUB を再インストールという方法があります。ただし、そのようなブートディスクはいつも使えるというわけではありません (もしくは必要ありません); レスキューコンソールは驚くほど堅牢です。 |
||
1,122行目: | 708行目: | ||
{{Note|boot パーティションを分割している場合、パスから {{ic|/boot}} を省いて下さい (つまり、{{ic|1=set prefix=(hdX,Y)/grub}} と入力する)。}} |
{{Note|boot パーティションを分割している場合、パスから {{ic|/boot}} を省いて下さい (つまり、{{ic|1=set prefix=(hdX,Y)/grub}} と入力する)。}} |
||
− | これで {{ic|linux}} と {{ic|initrd}} コマンドが使えます、これらのコマンドは慣れているはずです ([[# |
+ | これで {{ic|linux}} と {{ic|initrd}} コマンドが使えます、これらのコマンドは慣れているはずです ([[#設定]] を見て下さい)。 |
例えば、Arch Linux を起動: |
例えば、Arch Linux を起動: |
||
1,223行目: | 809行目: | ||
このエラーは VMware コンテナに GRUB をインストールしようとすると起こることがあります。詳しくは [https://bbs.archlinux.org/viewtopic.php?pid=581760#p581760 ここ] を読んで下さい。最初のパーティションが MBR (ブロック 63) のすぐ後ろから始まっていて、最初のパーティションの前に通常の 1 MiB のスペース (2048 ブロック) がない場合に起こります。[[#Master Boot Record (MBR) 特有の手順]] を読んで下さい。 |
このエラーは VMware コンテナに GRUB をインストールしようとすると起こることがあります。詳しくは [https://bbs.archlinux.org/viewtopic.php?pid=581760#p581760 ここ] を読んで下さい。最初のパーティションが MBR (ブロック 63) のすぐ後ろから始まっていて、最初のパーティションの前に通常の 1 MiB のスペース (2048 ブロック) がない場合に起こります。[[#Master Boot Record (MBR) 特有の手順]] を読んで下さい。 |
||
− | === |
+ | === UEFI === |
+ | |||
+ | ==== レスキューシェルが起動する ==== |
||
GRUB がロードしたときにエラーを表示せずにレスキューシェルを起動する場合、おそらく {{ic|grub.cfg}} が存在しなかったり間違った場所に置かれていることが原因です。GRUB UEFI を {{ic|--boot-directory}} でインストールして {{ic|grub.cfg}} がなかったり、ブートパーティションのパーティション番号 ({{ic|grubx64.efi}} ファイルにハードコードされています) が変更されているときにこの問題が発生します。 |
GRUB がロードしたときにエラーを表示せずにレスキューシェルを起動する場合、おそらく {{ic|grub.cfg}} が存在しなかったり間違った場所に置かれていることが原因です。GRUB UEFI を {{ic|--boot-directory}} でインストールして {{ic|grub.cfg}} がなかったり、ブートパーティションのパーティション番号 ({{ic|grubx64.efi}} ファイルにハードコードされています) が変更されているときにこの問題が発生します。 |
||
− | === GRUB UEFI がロードされない === |
+ | ==== GRUB UEFI がロードされない ==== |
EFI の動作の例: |
EFI の動作の例: |
||
1,281行目: | 869行目: | ||
# chmod -x /etc/grub.d/10_linux |
# chmod -x /etc/grub.d/10_linux |
||
# grub-mkconfig -o /boot/grub/grub.cfg |
# grub-mkconfig -o /boot/grub/grub.cfg |
||
+ | |||
+ | === GRUB のロードが遅い === |
||
+ | |||
+ | ディスク容量が残りわずかの場合 GRUB がロードされるのにかなり時間がかかることがあります。起動が遅い場合 {{ic|/boot}} や {{ic|/}} に十分な空き容量があるか確認してください。 |
||
+ | |||
+ | === error: unknown filesystem === |
||
+ | GRUB が {{ic|error: unknown filesystem}} と出力して起動しない理由はいくつか考えられます。[[UUID]] が正しいこと、全てのファイルシステムが問題なく、GRUB によってサポートされていることが確認できる場合、[[#GUID Partition Table (GPT) 特有の手順|BIOS Boot Partition]] がドライブの最初の 2TB の中にない可能性があります [https://bbs.archlinux.org/viewtopic.php?id=195948]。適当なパーティショニングツールを使ってパーティションが最初の 2TB 以内にあるようにして、GRUB を再インストール・再設定してください。 |
||
== 参照 == |
== 参照 == |
||
− | + | * 公式 GRUB マニュアル - https://www.gnu.org/software/grub/manual/grub.html |
|
− | + | * Ubuntu wiki の GRUB ページ - https://help.ubuntu.com/community/Grub2 |
|
− | + | * UEFI システム用にコンパイルする手順を説明している GRUB wiki ページ - https://help.ubuntu.com/community/UEFIBooting |
|
− | + | * Wikipedia の [[Wikipedia:BIOS Boot partition|BIOS Boot partition]] ページ |
|
− | + | * http://members.iinet.net/~herman546/p20/GRUB2%20Configuration%20File%20Commands.html - GRUB の設定方法の詳細な説明 |
2015年8月27日 (木) 09:37時点における版
関連記事
GRUB は次世代の GRand Unified Bootloader です。GRUB Legacy の後継の研究開発プロジェクト PUPA から GRUB は作られています。全てを整理するため GRUB はスクラッチから書きなおされモジュール性とポータビリティを獲得しました [1]。
手短に言えば、ブートローダーはコンピューターが起動した時に最初に走るソフトウェアプログラムです。Linux カーネルのロードとコントロールの移譲を担当しています。そして、カーネルはオペレーションシステムの他全てを初期化します。
目次
- 1 前置き
- 2 インストール
- 3 メイン設定ファイルの生成
- 4 設定
- 5 コマンドシェルを使う
- 6 トラブルシューティング
- 7 参照
前置き
- GRUB という名前は公式でソフトウェアのバージョン2を示しています、[2] を見て下さい。古いバージョンについての記事は GRUB Legacy を見て下さい。
- GRUB は root で (
/boot
ファイルシステムを分割しないで) Btrfs を使った zlib や LZO による圧縮をサポートしています。 - GRUB は root で F2FS を使うことをサポートしていないため、サポートされているファイルシステムで
/boot
を分割する必要があります。
GRUB Legacy ユーザーへのメモ
- GRUB Legacy から GRUB へのアップグレードは下で書かれている GRUB のフレッシュインストールとほとんど同じです。
- GRUB Legacy と GRUB ではコマンドが異なります。先に進む前に GRUB commands を確認してください (例: "find" は "search" に置き換わっています)。
- 今の GRUB はモジュール式であり "stage 1.5" を必要としません。そのため、ブートローダー自体の機能は限定的です -- 拡張機能の必要に応じてハードドライブからモジュールがロードされます (例: RAID サポートや LVM)。
- デバイスの命名規則が GRUB Legacy と GRUB で変わっています。パーティションは0ではなく1から番号付けされ、ドライブは0から番号が始まり、パーティションテーブルのタイプが前に付きます。例えば、
/dev/sda1
は(hd0,msdos1)
(MBR) や(hd0,gpt1)
(GPT) と表記されます。 - GRUB は GRUB legacy よりもかなり大きくなっています (
/boot
に ~13 MB は占領します)。分割された/boot
パーティションから起動している状態で、このパーティションが 32MB よりも小さい場合、ディスク容量の問題が起こったり、pacman が新しいカーネルのインストールを拒否したりします。
重要なデータのバックアップ
GRUB のインストールはスムーズに行われるべきですが、GRUB v2 にアップグレードする前に GRUB Legacy のファイルを保持しておくことを強く推奨します。
# mv /boot/grub /boot/grub-legacy
ブートコードやパーティションテーブルを含んでいる MBR をバックアップするには (/dev/sdX
は実際のディスクパスに置き換えてください):
# dd if=/dev/sdX of=/path/to/backup/mbr_backup bs=512 count=1
MBR の446バイトにはブートコードが含まれていて、次の64バイトにはパーティションテーブルが含まれています。リストアする際にパーティションテーブルを上書きしたくない場合は、MBR ブートコードだけをバックアップすることを推奨します:
# dd if=/dev/sdX of=/path/to/backup/bootcode_backup bs=446 count=1
GRUB2 を正しくインストールできないときは、#GRUB Legacy のリストア を見て下さい。
事前の注意事項
BIOS システム
GUID Partition Table (GPT) 特有の手順
GPT でパーティションされたシステムには core.img
を埋め込むための MBR の隙間の領域がないので (GPT のプライマリヘッダーやプライマリパーティションテーブルに使われます)、BIOS-GPT の GRUB 設定では BIOS boot partition が必要になります。このパーティションは BIOS-GPT 環境の GRUB でだけ使われます。MBR パーティションではそのようなパーティションのタイプは存在しません (少なくとも GRUB にはありません)。システムが UEFI を使っている時も (ブートセクタの埋め込みがないので)、このパーティションは必要ありません。
BIOS-GPT 設定では gdisk, cgdisk, GNU Parted などを使って、ディスクの最初にファイルシステムのない 1007 KiB のパーティションを作成してください。1007 KiB という容量 (と先の GPT の 17 KiB) によって次に続くパーティションを 1024 KiB に正しくアライメントすることができます。必要であれば、ディスクの他の場所にこのパーティションを配置することもできますが、先頭の 2TiB の領域内である必要があります。パーティションタイプは (c)gdisk では ef02
に GNU Parted では set BOOT_PART_NUM bios_grub on
に設定してください。
GPT パーティションはサポートしてないツールによって変更されるのを止めるための保護 MBR パーティションを作成します。この保護 MBR に cfdisk を使ってブータブルフラグを設定しないと、BIOS/EFI によっては起動しなくなる可能性があります。
Master Boot Record (MBR) 特有の手順
通常 MBR でパーティションされた環境において MBR の後の隙間 (512バイトの MBR 領域の後ろで最初のパーティションの前) は 31 KiB になっていて、このパーティションテーブルでは DOS 互換のシリンダー・アライメントは問題になりません。しかしながら GRUB の core.img
用に十分な領域を確保するため 1 から 2 MiB ほど MBR の後の領域をとることを推奨します (FS#24103)。この領域を獲得したり他の 512 バイトでないセクターの問題を起こさないために (core.img
の埋め込みとは関係ありません) 1 MiB パーティション・アライメントをサポートしているパーティションツールを使うのが得策です。
UEFI システム
GPT と ESP があるかどうか確認する
EFI を使って起動するにはディスク上に EFI System Partition (ESP) が必要になります。GPT は必ずしも必要ではありませんが、強く推奨されており、この記事では GPT を使う方法しか記述していません。Windows 8 など、既にオペレーティングシステムが動作している EFI が使えるコンピュータに Archlinux をインストールする場合、既に ESP は存在するはずです。GPT と ESP を確認するには、root で parted
を使って起動に使いたいディスクのパーティションテーブル (例: /dev/sda
) を表示して下さい。
# parted /dev/sda print
GPT なら、"Partition Table: GPT" と表示されます。EFI なら、vfat ファイルシステムで 'boot' フラグが有効になっている小さな (512 MiB 以下) パーティションがあります。そのパーティション上には、"EFI" という名前のフォルダがあるはずです。これらの存在が確認できたのなら、それは ESP になります。そのパーティション番号を覚えておいて下さい。後で GRUB を ESP にインストールするときに使います。
ESP を作成する
ESP が存在しない場合、作成する必要があります。Unified Extensible Firmware Interface#EFI System Partition の指示に従って ESP を作成してください。
インストール
BIOS システム
公式リポジトリ にある grub パッケージから GRUB をインストールできます。grub-legacyAUR がインストールされている場合は置き換えられます。
ブートファイルをインストール
BIOS ブートで GRUB ブートファイルをインストールする方法は3つあります:
- #ディスクにインストールする (推奨)
- #パーティションやパーティションレスディスクにインストールする (非推奨)
- #core.img だけを生成する (一番安全な方法ですが、
/boot/grub/i386-pc/core.img
を chainload するために GRUB Legacy や Syslinux など他の BIOS ブートローダーが必要になります)
ディスクにインストールする
440バイトの Master Boot Record ブートコード領域に GRUB をセットアップするには、/boot/grub
ディレクトリを作り、/boot/grub/i386-pc/core.img
ファイルを生成して、それを 31 KiB の (最低限の容量 - パーティションのアライメントによって変化します) MBR の後の領域 (もしくは GPT でパーティションされたディスクの場合 BIOS Boot Partition、parted では bios_grub
フラグ、gdisk では EF02 タイプコードで示される) に埋め込み、設定ファイルを生成します。次を実行してください:
# grub-install --target=i386-pc --recheck --debug /dev/sdx # grub-mkconfig -o /boot/grub/grub.cfg
/boot
に LVM を使っている場合は、複数の物理ディスクに GRUB をインストールすることができます。
パーティションやパーティションレスディスクにインストールする
パーティションブートセクタや、パーティションレスディスク (別名 superfloppy) やフロッピーディスクに grub をセットアップするには、以下を実行してください (/boot
パーティションを /dev/sdaX
として例にしています):
# chattr -i /boot/grub/i386-pc/core.img # grub-install --target=i386-pc --recheck --debug --force /dev/sdaX # chattr +i /boot/grub/i386-pc/core.img
--force
オプションを使ってブロックリストを利用する必要があります --grub-setup=/bin/true
は使えません (core.img
を生成するだけと同じです)。
grub-install
は以下のような警告を表示し、この方法で失敗するようなことについてヒントを与えます:
/sbin/grub-setup: warn: Attempting to install GRUB to a partitionless disk or to a partition. This is a BAD idea. /sbin/grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged.
--force
がないと下のエラーが表示され grub-setup
はパーティションブートセクタにブートコードを設定しません:
/sbin/grub-setup: error: will not proceed with blocklists
--force
をつければ次のように表示されるはずです:
Installation finished. No error reported.
デフォルトで grub-setup
がパーティションやパーティションレスディスクへのインストールをしないようになっている理由は、この場合に限って GRUB がパーティションのブートセクタにある埋め込みブロックリストを使って /boot/grub/i386-pc/core.img
ファイルと prefix ディレクトリ /boot/grub
を見つける必要があるからです。core.img
のセクタ位置はパーティション上の (ファイルのコピーや削除など) ファイルシステムに変更が加えられた時に変化してしまうことがあります。詳細は https://bugzilla.redhat.com/show_bug.cgi?id=728742 や https://bugzilla.redhat.com/show_bug.cgi?id=730915 を見て下さい。
これを回避する方法は /boot/grub/i386-pc/core.img
に (上で説明しているように chattr
コマンドを使って) immutable フラグを設定することで、これによってディスク上の core.img
ファイルのセクタ位置が変化しなくなります。/boot/grub/i386-pc/core.img
に immutable フラグを設定するのは、GRUB をパーティションブートセクタやパーティションレスディスクにインストールするときだけ必要になることで、ブートセクタに埋め込まず MBR にインストールしたり core.img
だけを生成する時は必要ありません (上述)。
残念ながら、エラーが表示されなかったとしても、作成される grub.cfg
ファイルには起動するための正しい UUID が含まれません。https://bbs.archlinux.org/viewtopic.php?pid=1294604#p1294604 を参照してください。この問題を修正するには以下のコマンドを実行してください:
# mount /dev/sdxY /mnt #Your root partition. # mount /dev/sdxZ /mnt/boot #Your boot partiton (if you have one). # arch-chroot /mnt # pacman -S linux # grub-mkconfig -o /boot/grub/grub.cfg
core.img だけを生成する
GRUB のブートセクタコードを MBR, MBR の後の隙間またはパーティションのブートセクタに埋め込まずに /boot/grub
ディレクトリを作成して /boot/grub/i386-pc/core.img
ファイルを生成するには、grub-install
に --grub-setup=/bin/true
を加えて下さい:
# grub-install --target=i386-pc --grub-setup=/bin/true --recheck --debug /dev/sda
これで Linux カーネルやマルチブートカーネルとして GRUB Legacy や syslinux から GRUB の core.img
をチェインロードできます。
UEFI システム
最初に grub, dosfstools, efibootmgr パッケージをインストールして、それから下の手順に従って下さい (後ろの2つのパッケージは grub が EFI をサポートするのに必要になります)。
ブートファイルのインストール
推奨方法
まず、ESP をお好きなマウントポイントにマウントしてください (通常は /boot/efi
を使います、以下 $esp として示します)。最初のインストールでは、mkdir /boot/efi
を実行する必要があります。
GRUB UEFI アプリケーションを $esp/EFI/grub
に、GRUB のモジュールを /boot/grub/x86_64-efi
にインストールしてください:
# grub-install --target=x86_64-efi --efi-directory=$esp --bootloader-id=arch_grub --recheck --debug
これで GRUB はインストールされました。後は忘れずにメイン設定ファイルを生成してください。
UEFI ファームウェアの応急処置
UEFI ファームウェアによっては .efi
ブータブルスタブが特定の名前で特定の場所に配置されていることが必要とされます: $esp/EFI/boot/bootx64.efi
($esp
は UEFI パーティションのマウントポイントに置き換えて下さい)。そうしておかないと場合によって起動できなくなってしまうことがあります。幸いに、これを必要としない他のファームウェアでは問題は起きません。
応急処置を行うには、必要なディレクトリを作成して、それから grub の .efi
スタブをコピーしてください:
# mkdir $esp/EFI/boot # cp $esp/EFI/arch_grub/grubx64.efi $esp/EFI/boot/bootx64.efi
他の方法
GRUB のブートファイルを全て EFI System Partition の中に収めたい時は、grub-install
コマンドに --boot-directory=$esp/EFI
を追加してください:
# grub-install --target=x86_64-efi --efi-directory=$esp --bootloader-id=grub --boot-directory=$esp --recheck --debug
このコマンドによって GRUB モジュールは $esp/grub
に置かれます (このパスの最後の '/grub' はハードコードされています)。この方法を使うと、grub.cfg
も EFI System Partition 上に作る必要があり、設定するときに正しい位置を grub-mkconfig
に示す必要があります:
# grub-mkconfig -o $esp/grub/grub.cfg
設定の他のところは同じです。
ファームウェアのブートマネージャに GRUB エントリを作成する
grub-install
は自動でブートマネージャにメニューエントリを作成しようとします。作成されないときは、ビギナーズガイド#GRUB を参照して efibootmgr
を使ってメニューエントリを作成してください。また、UEFI モードで CD/USB を起動できないような問題については Unified Extensible Firmware Interface#ISO から UEFI ブータブル USB を作成する を参照してください。
GRUB Standalone
全てのモジュールを UEFI アプリケーション内の memdisk に埋め込んだ grubx64_standalone.efi
アプリケーションを作成することができ、これによって GRUB UEFI モジュールやその他関連ファイルが利用するディレクトリを別に持つ必要がなくなります。これを行うには grub に含まれている grub-mkstandalone
コマンドを使います。
# echo 'configfile ${cmdpath}/grub.cfg' > /tmp/grub.cfg ## use single quotes, ${cmdpath}/grub.cfg should be present as it is # grub-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi --modules="part_gpt part_msdos" --fonts="unicode" --locales="en@quot" --themes="" -o "$esp/EFI/grub/grubx64_standalone.efi" "boot/grub/grub.cfg=/tmp/grub.cfg" -v
それから GRUB の設定ファイルを $esp/EFI/grub/grub.cfg
にコピーして efibootmgr を使って $esp/EFI/grub/grubx64_standalone.efi
の UEFI Boot Manager エントリを作成してください。
GRUB Standalone - 技術的な情報
GRUB EFI のファイルはいつでも設定ファイルが ${prefix}/grub.cfg
にあることを期待しています。しかしながらスタンドアロンの GRUB EFI ファイルでは、${prefix}
は tar アーカイブの中に置かれスタンドアロンの GRUB EFI ファイルそれ自体に埋め込まれます (GRUB ではクォートのない "(memdisk)"
で示される)。この tar アーカイブには通常の GRUB EFI インストールで /boot/grub
に保存される全てのファイルが含まれています。
/boot/grub
の中身がスタンドアロンのイメージに埋め込まれることによって、全てにおいて実際の (外部的な) /boot/grub
を使うことはできなくなります。そのためスタンドアロンの GRUB EFI ファイルでは ${prefix}==(memdisk)/boot/grub
とスタンドアロンの GRUB EFI ファイルは設定ファイルが ${prefix}/grub.cfg==(memdisk)/boot/grub/grub.cfg
にあるとして読み込みます。
このためスタンドアロンの GRUB EFI ファイルに同じディレクトリにある外部的 grub.cfg
を EFI ファイルとして読み込ませるには (GRUB では ${cmdpath}
で示される)、GRUB に設定として ${cmdpath}/grub.cfg
を使うように記述した /tmp/grub.cfg
を作る必要があります ((memdisk)/boot/grub/grub.cfg
の configfile ${cmdpath}/grub.cfg
コマンド)。それから grub-mkstandalone にこの /tmp/grub.cfg
ファイルを ${prefix}/grub.cfg
(実際には (memdisk)/boot/grub/grub.cfg
) にコピーさせるためにオプション "/boot/grub/grub.cfg=/tmp/grub.cfg"
を使います。
これでスタンドアロンの GRUB EFI ファイルと実際の grub.cfg
は EFI System Partition の中のディレクトリに (同じディレクトリである限り) 保存することが出来るようになり、持ち運びが容易になります。
メイン設定ファイルの生成
インストールした後は、メインの設定ファイル grub.cfg
を生成する必要があります。生成されるファイルは /etc/default/grub
の様々なオプションや /etc/grub.d/
のスクリプトによって設定されます。これについては #設定 のセクションで説明しています。
grub-mkconfig ツールを使って grub.cfg
を生成してください:
# grub-mkconfig -o /boot/grub/grub.cfg
生成スクリプトはデフォルトで生成する設定に Arch Linux のメニューエントリを自動で追加します。しかしながら、他のオペレーティングシステムのエントリは設定しないといけません。BIOS システムでは os-prober をインストールすれば、マシンにインストールされている他のオペレーティングシステムを検知して、それぞれのエントリを grub.cfg
に追加することができます。インストールされていれば、grub-mkconfig の実行時に os-prober が起動します。高度な設定は #デュアルブート を見て下さい。
GRUB Legacy の設定ファイルを新しいフォーマットに変換する
grub-mkconfig
が失敗する場合、次のコマンドで /boot/grub/menu.lst
ファイルを /boot/grub/grub.cfg
に変換してください:
# grub-menulst2cfg /boot/grub/menu.lst /boot/grub/grub.cfg
例えば:
/boot/grub/menu.lst
default=0 timeout=5 title Arch Linux Stock Kernel root (hd0,0) kernel /vmlinuz-linux root=/dev/sda2 ro initrd /initramfs-linux.img title Arch Linux Stock Kernel Fallback root (hd0,0) kernel /vmlinuz-linux root=/dev/sda2 ro initrd /initramfs-linux-fallback.img
/boot/grub/grub.cfg
set default='0'; if [ x"$default" = xsaved ]; then load_env; set default="$saved_entry"; fi set timeout=5 menuentry 'Arch Linux Stock Kernel' { set root='(hd0,1)'; set legacy_hdbias='0' legacy_kernel '/vmlinuz-linux' '/vmlinuz-linux' 'root=/dev/sda2' 'ro' legacy_initrd '/initramfs-linux.img' '/initramfs-linux.img' } menuentry 'Arch Linux Stock Kernel Fallback' { set root='(hd0,1)'; set legacy_hdbias='0' legacy_kernel '/vmlinuz-linux' '/vmlinuz-linux' 'root=/dev/sda2' 'ro' legacy_initrd '/initramfs-linux-fallback.img' '/initramfs-linux-fallback.img' }
GRUB の /boot/grub/grub.cfg
設定ファイルを作るのを忘れて、再起動したら GRUB のコマンドシェルが表示された場合、以下を入力してください:
sh:grub> insmod legacycfg sh:grub> legacy_configfile ${prefix}/menu.lst
Arch で起動して正しい GRUB /boot/grub/grub.cfg
設定ファイルを再生成してください。
設定
このセクションでは /etc/default/grub
設定ファイルの編集についてだけ扱っています。他のオプションは GRUB/Tips and tricks を見て下さい。
追加引数
カスタムの追加引数を Linux イメージに渡すために、/etc/default/grub
で GRUB_CMDLINE_LINUX
と GRUB_CMDLINE_LINUX_DEFAULT
変数を設定することができます。この2つは grub.cfg
を生成するときに互いに標準のブートエントリに追加されます。recovery ブートエントリについては、GRUB_CMDLINE_LINUX
だけが生成時に使われます。
両方を使う必要はありませんが、上手く使えば便利です。例えば、GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/sdaX quiet"
(sdaX
はスワップパーティション) を使ってハイバネーションの後の復帰を有効にすることができます。生成された recovery ブートエントリでは resume やメニューエントリからの起動中のカーネルメッセージを表示しない quiet は使われません。そして、他の (標準の) メニューエントリではオプションとして使われます。
GRUB のリカバリエントリを生成するには /etc/default/grub
で #GRUB_DISABLE_RECOVERY=true
をコメントアウトする必要があります。
また、GRUB_CMDLINE_LINUX="resume=/dev/disk/by-uuid/${swap_uuid}"
を使うこともできます (${swap_uuid}
は swap パーティションの UUID に置き換えて下さい)。
複数のエントリを使う時はダブルクォートの中でスペースで区切って下さい。resume と systemd の両方を使うなら次のようになります:
GRUB_CMDLINE_LINUX="resume=/dev/sdaX init=/usr/lib/systemd/systemd"
詳しくはカーネルパラメータを見て下さい。
デュアルブート
/etc/grub.d/40_custom と grub-mkconfig を使って自動生成する
他のエントリを追加する最適の方法は /etc/grub.d/40_custom
か /boot/grub/custom.cfg
を編集することです。grub-mkconfig
の実行時にこのファイルにエントリが自動で追加されます。
新しい行を追加した後、次を実行して grub.cfg
を生成・更新してください:
# grub-mkconfig -o /boot/grub/grub.cfg
UEFI-GPT モードでは:
# grub-mkconfig -o /boot/efi/EFI/GRUB/grub.cfg
例として、典型的な /etc/grub.d/40_custom
ファイルは以下のようになります。これは Microsoft Windows 8 がプリインストールされている HP Pavilion 15-e056sl Notebook PC にあわせて作成されています。それぞれの menuentry
は以下のエントリと同じような構造である必要があります。GRUB 内の UEFI パーティション /dev/sda2
は hd0,gpt2
や ahci0,gpt2
と記述するので注意してください (詳しくはここを見て下さい)。
/etc/grub.d/40_custom:
/etc/grub.d/40_custom
#!/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 "HP / Microsoft Windows 8.1" { echo "Loading HP / Microsoft Windows 8.1..." insmod part_gpt insmod fat insmod search_fs_uuid insmod chain search --fs-uuid --no-floppy --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 763A-9CB6 chainloader /EFI/Microsoft/Boot/bootmgfw.efi } menuentry "HP / Microsoft Control Center" { echo "Loading HP / Microsoft Control Center..." insmod part_gpt insmod fat insmod search_fs_uuid insmod chain search --fs-uuid --no-floppy --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 763A-9CB6 chainloader /EFI/HP/boot/bootmgfw.efi } menuentry "System shutdown" { echo "System shutting down..." halt } menuentry "System restart" { echo "System rebooting..." reboot }
GNU/Linux のメニューエントリ
他のディストリが sda2
パーティションに存在する場合:
menuentry "Other Linux" { set root=(hd0,2) linux /boot/vmlinuz (add other options here as required) initrd /boot/initrd.img (if the other kernel uses/needs one) }
FreeBSD のメニューエントリ
FreeBSD は UFS でシングルパーティションにインストールする必要があります。sda4
にインストールされている場合:
menuentry "FreeBSD" { set root=(hd0,4) chainloader +1 }
Windows XP のメニューエントリ
ここでは Windows のパーティションが sda3
にあると仮定しています。実際に windows があるパーティションではなく、インストール時に windows が作成したシステムの予約済みパーティションに set root と chainloader を設定する必要があります。あなたのシステムの予約済みパーティションが sda3
の場合:
# (2) Windows XP menuentry "Windows XP" { set root="(hd0,3)" chainloader +1 }
Windows のブートローダーが GRUB とは完全に異なるハードドライブに存在する場合、Windows に GRUB が存在するのが最初のハードドライブだと信じこませる必要があるかもしれません。これは drivemap
を使ってできます。GRUB が hd0
に、Windows が hd2
にあるとするには、set root
の後に次を追加してください:
drivemap -s hd0 hd2
UEFI-GPT モードでインストールされた Windows のメニューエントリ
if [ "${grub_platform}" == "efi" ]; then menuentry "Microsoft Windows Vista/7/8/8.1 UEFI-GPT" { insmod part_gpt insmod fat insmod search_fs_uuid insmod chain search --fs-uuid --set=root $hints_string $fs_uuid chainloader /EFI/Microsoft/Boot/bootmgfw.efi } fi
$hints_string
と $fs_uuid
は以下の2つのコマンドで知ることができます。$fs_uuid
のコマンドは:
# grub-probe --target=fs_uuid $esp/EFI/Microsoft/Boot/bootmgfw.efi 1ce5-7f28
$hints_string
のコマンドは:
# grub-probe --target=hints_string $esp/EFI/Microsoft/Boot/bootmgfw.efi --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1
これらの2つのコマンドは Windows が使っている ESP が $esp
にマウントされているということを前提にしています。場合によっては Windows の EFI ファイルのパスが異なっている可能性があります。
"シャットダウン" メニューエントリ
menuentry "System shutdown" { echo "System shutting down..." halt }
"再起動" メニューエントリ
menuentry "System restart" { echo "System rebooting..." reboot }
BIOS-MBR モードでインストールされた Windows
このセクションでは、あなたの Windows パーティションは /dev/sda1
だと仮定しています。違うパーティションを使っている場合は全ての hd0,msdos1
を修正しなくてはなりません。最初に、bootmgr
と関連ファイルがある Windows のシステムパーティションの NTFS ファイルシステムの UUID を見つけて下さい。例えば、Windows の bootmgr
が /media/SYSTEM_RESERVED/bootmgr
に存在する場合:
Windows Vista/7/8 では:
# grub-probe --target=fs_uuid /media/SYSTEM_RESERVED/bootmgr 69B235F6749E84CE
# grub-probe --target=hints_string /media/SYSTEM_RESERVED/bootmgr --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1
次に、BIOS-MBR モードでインストールされた Windows (XP, Vista, 7, 8) を起動するために下のコードを /etc/grub.d/40_custom
か /boot/grub/custom.cfg
に追加して、上で説明したように grub-mkconfig
を使って grub.cfg
を再生成してください:
Windows Vista/7/8/8.1 では:
if [ "${grub_platform}" == "pc" ]; then menuentry "Microsoft Windows Vista/7/8/8.1 BIOS-MBR" { insmod part_msdos insmod ntfs insmod search_fs_uuid insmod ntldr search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE ntldr /bootmgr } fi
Windows XP では:
if [ "${grub_platform}" == "pc" ]; then menuentry "Microsoft Windows XP" { insmod part_msdos insmod ntfs insmod search_fs_uuid insmod ntldr search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE ntldr /bootmgr } fi
/etc/grub.d/40_custom
をテンプレートとして使って /etc/grub.d/nn_custom
を作成することができます。nn
は優先順位を定義し、スクリプトが実行される順番を示します。スクリプトが実行される順番で grub のブートメニューの場所が決まります。
EasyBCD と NeoGRUB を使って Windows とデュアルブート
現在 EasyBCD の NeoGRUB は GRUB のメニューフォーマットを認識しないので、C:\NST\menu.lst
ファイルの中身を以下のように置き換えることでチェインロードしてください:
default 0 timeout 1
title Chainload into GRUB v2 root (hd0,7) kernel /boot/grub/i386-pc/core.img
そして、grub-mkconfig
を使って grub.cfg
を再生成してください。
parttool for hide/unhide
C:\
ディスクを隠している Windows 9x がある場合、GRUB は parttool
を使ってディスクを隠したり表示したりすることができます。例えば、3つの Windows 9x インストールがあり3番目の C:\
ディスクを起動するには CLI に入り以下を実行してください:
parttool hd0,1 hidden+ boot- parttool hd0,2 hidden+ boot- parttool hd0,3 hidden- boot+ set root=hd0,3 chainloader +1 boot
LVM
LVM を /boot
で使っている場合、メニューエントリの行の前に次を追加してください:
insmod lvm
そしてメニューエントリで root を次のように指定してください:
set root=lvm/lvm_group_name-lvm_logical_boot_partition_name
サンプル:
# (0) Arch Linux menuentry "Arch Linux" { insmod lvm set root=lvm/VolumeGroup-lv_boot # you can only set following two lines linux /vmlinuz-linux root=/dev/mapper/VolumeGroup-root ro initrd /initramfs-linux.img }
RAID
GRUB には RAID ボリュームの便利な制御機能があります。ボリュームをネイティブに指定できる insmod mdraid
を追加する必要があります。例えば、/dev/md0
は次のようになります:
set root=(md/0)
一方パーティション済みの RAID ボリューム (例: /dev/md0p1
) は次のとおりです:
set root=(md/0,1)
RAID1 を GPT ef02/'BIOS boot partition' のドライブ上の、/boot
パーティション (もしくは RAID1 root パーティション上の /boot
) で使っている場合に grub をインストールするには、ドライブの両方で ic|grub-install を実行するだけです。例:
# grub-install --target=i386-pc --recheck --debug /dev/sda # grub-install --target=i386-pc --recheck --debug /dev/sdb
ここで /boot
がある RAID1 アレイは /dev/sda
と /dev/sdb
に収容されます。
暗号化
Root パーティション
暗号化した root ファイルシステムを使うには、/etc/default/grub
を編集して暗号化されたファイルシステムを起動時に解除するためのパラメータを記述する必要があります。例えば、mkinitcpio の encrypt
フックを使う場合、cryptdevice
パラメータを GRUB_CMDLINE_LINUX=""
コマンドに追加してください。以下の例では、sda2
パーティションを /dev/mapper/cryptroot
として暗号化しています:
/etc/default/grub
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:cryptroot"
/etc/default/grub
を修正したら、メイン設定ファイルの生成を忘れずにしてください。
暗号化デバイスのブートローダー設定に関する詳細は、Dm-crypt/システム設定#ブートローダーを見て下さい。
Boot パーティション
GRUB パラメータ GRUB_ENABLE_CRYPTODISK
を使うことで LUKS ブロックデバイスを開くときに GRUB にパスワードを要求させて、設定を読み込んでブロックデバイスから initramfs とカーネルをロードすることができます。このオプションは boot パーティションが暗号化されてないという問題を解決します。
/etc/default/grub
に以下を追加することで機能が有効になります:
GRUB_ENABLE_CRYPTODISK=y
設定した後は /boot
をマウントしてから grub-mkconfig を実行してメイン設定ファイルを生成してください。
以下のことに注意してください:
- この機能を使うために
/boot
を別パーティションにする必要はありません。システムの root/
ディレクトリツリー下に配置できます。ただし、どちらにしても起動するには二回パスフレーズを入力する必要があります。ひとつ目のパスワードは/boot
マウントポイントのロックを解除して、ふたつ目のパスワードは root ファイルシステムのロックを解除します。
/boot
マウントポイントも関連するシステムアップデートを実行するときは、暗号化された/boot
のロックが解除されて initramfs やカーネルによって再マウントされている必要があります。/boot
パーティションを分割している場合、/etc/crypttab
にエントリとキーファイルを追加することで再マウントさせることができます。Dm-crypt/システム設定#crypttab を参照。
- 特殊なキーマップを使っている場合、デフォルトの GRUB では反映されていません。LUKS ブロックデバイスのロックを解除するためにパスフレーズを入力するときに問題になります。
コマンドシェルを使う
GRUB のモジュールを全て保存するには MBR は小さすぎるので、メニューと基本的なコマンドだけが MBR に入っています。GRUB の機能のほとんどは /boot/grub
内のモジュールとして存在し、必要に応じて挿入されます。エラー状態になると (例: パーティションレイアウトが変更された場合) GRUB は起動に失敗します。このとき、コマンドシェルが表示されます。
GRUB は複数のシェル・プロンプトを提供しています。メニューの読込に問題があってもブートローダがディスクを見つけられるときは、"normal" シェルが出ます:
sh:grub>
深刻な問題があるときは (例: GRUB が必要なファイルを見つけられない)、代わりに "rescue" シェルが出ます:
grub rescue>
rescue シェルは通常のシェルの制限されたサブセットで、使える機能が少なくなっています。rescue シェルが出てきた時は、まず "normal" モジュールの挿入を試して、"normal" シェルを起動してみて下さい:
grub rescue> set prefix=(hdX,Y)/boot/grub grub rescue> insmod (hdX,Y)/boot/grub/i386-pc/normal.mod rescue:grub> normal
ページャのサポート
GRUB はページャをサポートしており長い出力をするコマンド (help
コマンドなど) を読むことができます。これは通常のシェルモードでしか動作せずレスキューモードでは使えません。ページャを有効にするには、GRUB コマンドシェルで次を入力して下さい:
sh:grub> set pager=1
コマンドシェル環境を使ってオペレーティングシステムを起動する
grub>
GRUB のコマンドシェル環境を使ってオペレーティングシステムを起動することが可能です。 通常はチェインロードを使ってドライブやパーティションから Windows / Linux を起動するということが考えられます。
チェインロードは現在のブートローダから別のブートローダをロードすることを意味します。
他のブートローダはディスクの最初 (MBR) やパーティションの最初に埋め込むことができます。
パーティションのチェインロード
set root=(hdX,Y) chainloader +1 boot
X=0,1,2... Y=1,2,3...
例えば最初のハードディスクの最初のパーティションに保存された Windows をチェインロードするには:
set root=(hd0,1) chainloader +1 boot
同じようにパーティションにインストールされた GRUB をチェインロードすることもできます。
ディスクやドライブのチェインロード
set root=hdX chainloader +1 boot
UEFI モードでインストールされた Windows/Linux のチェインロード
insmod ntfs set root=(hd0,gpt4) chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi boot
insmod ntfs を使うことで ntfs ファイルシステムモジュールをロードして Windows をロードすることができます。上記の例では (hd0,gpt4) または /dev/sda4 が EFI System Partition (ESP) です。chainloader 行のエントリはチェインロードする .efi ファイルのパスを指定しています。
通常のロード
#rescue コンソールを使う の例を見て下さい。
rescue コンソールを使う
まず #コマンドシェルを使う を見て下さい。標準シェルを有効にできない場合、ライブ CD や他のレスキューディスクを使って起動し、設定のエラーを直して GRUB を再インストールという方法があります。ただし、そのようなブートディスクはいつも使えるというわけではありません (もしくは必要ありません); レスキューコンソールは驚くほど堅牢です。
GRUB rescue で利用できるコマンドには insmod
, ls
, set
, unset
があります。この例では set
と insmod
を使います。set
は変数を修正し insmod
は新しいモジュールを挿入して機能を追加します。
始める前に、ユーザーは自分の /boot
パーティションの位置を知っていなければなりません (分割パーティションなのか、root 下のサブディレクトリなのか):
grub rescue> set prefix=(hdX,Y)/boot/grub
X は物理ドライブ番号、Y はパーティション番号に置き換えてください。
コンソールの機能を拡張するために、linux
モジュールを挿入します:
grub rescue> insmod i386-pc/linux.mod
これで linux
と initrd
コマンドが使えます、これらのコマンドは慣れているはずです (#設定 を見て下さい)。
例えば、Arch Linux を起動:
set root=(hd0,5) linux /boot/vmlinuz-linux root=/dev/sda5 initrd /boot/initramfs-linux.img boot
boot パーティションを分割しているなら、行を変更する必要があります:
set root=(hd0,5) linux /vmlinuz-linux root=/dev/sda6 initrd /initramfs-linux.img boot
Arch Linux 環境のブートに成功したら、必要に応じて grub.cfg
を修正し GRUB を再インストールすることができます。
GRUB を再インストールして問題を完全に修正するには、必要応じて /dev/sda
を変更します。詳しくは #インストール を見て下さい。
トラブルシューティング
Intel BIOS が GPT をブートしない
MBR
Intel BIOS によっては起動時に最低でも1つ起動可能な MBR パーティションが必要なため、GPT でパーティションされたブートセットアップが起動できなくなることがあります。
この問題は fdisk を使って GPT パーティションのひとつ (GRUB のために作成した 1007 KiB のパーティションが好ましい) を MBR でブータブルだと印をつけることで回避できます。fdisk を使って次のコマンドを実行してください: fdisk をインストールするディスクで起動し (例: fdisk /dev/sda
)、a
を押してから数字を入力してブータブルにしたいパーティション (おそらく #1) を選択してください。最後に w
を押して変更を MBR に書き込みます。
詳細は ここ から見ることができます。
EFI パス
UEFI ファームウェアによっては UEFI NVRAM ブートエントリを表示する前に特定の場所にブータブルファイルを必要とします。この場合、grub-install
は efibootmgr
に GRUB をブートするエントリを追加するように指示しますが、VisualBIOS のブートオーダーセレクタではエントリが表示されません。解決方法は特定の場所にファイルを配置することです。EFI パーティションが /boot/efi/
の場合、以下のコマンドで解決します:
mkdir /boot/efi/EFI/boot cp /boot/efi/EFI/grub/grubx64.efi /boot/efi/EFI/boot/bootx64.efi
この解決方法は2014年1月、Intel DH87MC マザーボードのファームウェアで確認しました。
デバッグメッセージを有効にする
以下を grub.cfg
に追加してください:
set pager=1 set debug=all
"No suitable mode found" エラー
メニューエントリのどれかを起動したときに以下のエラーが表示される場合:
error: no suitable mode found Booting however
GRUB の正しいビデオモード (gfxmode
) を使って GRUB グラフィカルターミナル (gfxterm
) を初期化する必要があります。このビデオモードは 'gfxpayload' を使って GRUB から linux カーネルに渡されます。UEFI 環境の場合、GRUB のビデオモードが初期化されないと、端末にカーネルのブートメッセージが (少なくとも KMS が有効になるまで) 全く表示されません。
/usr/share/grub/unicode.pf2
を ${GRUB_PREFIX_DIR} (BIOS と UEFI システムの場合 /boot/grub/
) にコピーしてください。GRUB UEFI をインストールしたときに --boot-directory=$esp/EFI
を設定したときは、ディレクトリは $esp/EFI/grub/
になります:
# cp /usr/share/grub/unicode.pf2 ${GRUB_PREFIX_DIR}
/usr/share/grub/unicode.pf2
が存在しないときは、bdf-unifont をインストールして、unifont.pf2
ファイルを作成し ${GRUB_PREFIX_DIR}
にコピーしてください:
# grub-mkfont -o unicode.pf2 /usr/share/fonts/misc/unifont.bdf
次に、grub.cfg
ファイルの中に、以下の行を追加して GRUB がカーネルに正しくビデオモードを渡すようにしてください。どちらかがないと黒画面 (出力なし) になりますが起動は問題なく (フリーズせずに) 進みます。
BIOS システム:
insmod vbe
UEFI システム:
insmod efi_gop insmod efi_uga
その後以下のコードを追加してください (BIOS と UEFI 両方で共通):
insmod font
if loadfont ${prefix}/fonts/unicode.pf2 then insmod gfxterm set gfxmode=auto set gfxpayload=keep terminal_output gfxterm fi
gfxterm (graphical terminal) が正しく動作すれば、unicode.pf2
フォントファイルは ${GRUB_PREFIX_DIR}
にあるはずです。
msdos-style エラーメッセージ
grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding will not be possible! grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and its use is discouraged. grub-setup: error: If you really want blocklists, use --force.
このエラーは VMware コンテナに GRUB をインストールしようとすると起こることがあります。詳しくは ここ を読んで下さい。最初のパーティションが MBR (ブロック 63) のすぐ後ろから始まっていて、最初のパーティションの前に通常の 1 MiB のスペース (2048 ブロック) がない場合に起こります。#Master Boot Record (MBR) 特有の手順 を読んで下さい。
UEFI
レスキューシェルが起動する
GRUB がロードしたときにエラーを表示せずにレスキューシェルを起動する場合、おそらく grub.cfg
が存在しなかったり間違った場所に置かれていることが原因です。GRUB UEFI を --boot-directory
でインストールして grub.cfg
がなかったり、ブートパーティションのパーティション番号 (grubx64.efi
ファイルにハードコードされています) が変更されているときにこの問題が発生します。
GRUB UEFI がロードされない
EFI の動作の例:
# efibootmgr -v
BootCurrent: 0000 Timeout: 3 seconds BootOrder: 0000,0001,0002 Boot0000* Grub HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\efi\grub\grub.efi) Boot0001* Shell HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\EfiShell.efi) Boot0002* Festplatte BIOS(2,0,00)P0: SAMSUNG HD204UI
画面が数秒間真っ暗になってその後次のブートオプションが試行される場合、この投稿によると、GRUB を root パーティションに移動することで直るかもしれません。ブートオプションは削除して後でまた作成する必要があります。GRUB のエントリは次のようにしてください:
Boot0000* Grub HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\grub.efi)
Invalid signature
(パーティションを再設定したりハードドライブを追加した後) Windows を起動しようとしたときに "invalid signature" エラーが起こる場合、GRUB のデバイス設定を移動(削除)して再設定してください:
# mv /boot/grub/device.map /boot/grub/device.map-old # grub-mkconfig -o /boot/grub/grub.cfg
これで grub-mkconfig
は Windows を含む全てのブートオプションを記述したはずです。これで動作したら、/boot/grub/device.map-old
は削除してください。
起動中にフリーズする
GRUB がカーネルと initial ramdisk をロードした後、エラーを出さずにブートが固まる場合、add_efi_memmap
カーネルパラメータを取り除いてみてください。
GRUB Legacy のリストア
- GRUB v2 のファイルをどけてください:
# mv /boot/grub /boot/grub.nonfunctional
- GRUB Legacy を
/boot
にコピーしてください:
# cp -af /boot/grub-legacy /boot/grub
- MBR と sda の次の 62 セクタをバックアップしたコピーで置き換えて下さい:
# dd if=/path/to/backup/first-sectors of=/dev/sdX bs=512 count=1
MBR のブートコードだけをリストアするとより安全です:
# dd if=/path/to/backup/mbr-boot-code of=/dev/sdX bs=446 count=1
他の OS から Arch が見つからない
他のディストリビューションで os-prober
を使って Arch Linux を自動的に検索できないという報告が複数確認されています。この問題が発生する場合、/etc/lsb-release
をおくことで検知が改善されると報告されています。このファイルと更新ツールは公式リポジトリにある lsb-release パッケージから利用可能です。
メニューエントリが重複する
GRUB を新規インストールすると重複するメニューエントリが生成される可能性があります。これは grub-mkconfig が実行されたときに上流のデフォルトの /etc/grub.d/10_linux
スクリプトと Arch の /etc/grub.d/10_archlinux
スクリプトがメニューエントリを作成するためです。これを修正するには 10_linux スクリプトを無効にしてもう一度 grub-mkconfig コマンドを実行してください。
# chmod -x /etc/grub.d/10_linux # grub-mkconfig -o /boot/grub/grub.cfg
GRUB のロードが遅い
ディスク容量が残りわずかの場合 GRUB がロードされるのにかなり時間がかかることがあります。起動が遅い場合 /boot
や /
に十分な空き容量があるか確認してください。
error: unknown filesystem
GRUB が error: unknown filesystem
と出力して起動しない理由はいくつか考えられます。UUID が正しいこと、全てのファイルシステムが問題なく、GRUB によってサポートされていることが確認できる場合、BIOS Boot Partition がドライブの最初の 2TB の中にない可能性があります [3]。適当なパーティショニングツールを使ってパーティションが最初の 2TB 以内にあるようにして、GRUB を再インストール・再設定してください。
参照
- 公式 GRUB マニュアル - https://www.gnu.org/software/grub/manual/grub.html
- Ubuntu wiki の GRUB ページ - https://help.ubuntu.com/community/Grub2
- UEFI システム用にコンパイルする手順を説明している GRUB wiki ページ - https://help.ubuntu.com/community/UEFIBooting
- Wikipedia の BIOS Boot partition ページ
- http://members.iinet.net/~herman546/p20/GRUB2%20Configuration%20File%20Commands.html - GRUB の設定方法の詳細な説明