昔々、私たちはレガシー GRUB、壮大な統一されたLinuxブートローダバージョン0.97を持っていました。 レガシー GRUBには多くの美徳がありましたが、古くなり、開発者はより多くの機能を切望していたため、GRUB2は世界に入ってきました。
GRUB2は、いくつかの重要な違いを持つ主要な書き換えです。 これは、リムーバブルメディアを起動し、システムBIOSを入力するオプションで設定することができます。 すべての設定を一箇所に持つ非常に単純な/boot/grub/menu.lst
/boot/grub/grub.cfg
です。 あなたが直接編集しない、ああ、いいえ、これは単なる人間が触れるのではなく、他のスクリプトだけです。 私たち卑しい人間は、主にGRUBメニューの外観を制御する/etc/default/grub
/etc/grub.d/
memtest
os_prober
/boot/grub/grub.cfg
/etc/default/grub
/etc/grub.d/*
update-grub
update-grub
スクリプトは、カーネル、ブートファイルを検索し、すべてのオペレーティングシステムをGRUBブートメニューに追加するのに信頼できるため、手動で行う必要はないということです。私たちは、より一般的な二つの障害を修正する方法を学ぶつもりです。
システムを起動してgrub>
プロンプトで停止すると、それが完全なGRUB2コマンドシェルです。 つまり、GRUB2は正常に起動し、normal.mod
/boot/grub//
grub.cfg
grub rescue>
normal.mod
、おそらくあなたのブートフこれはどのように起こりますか?
カーネルがドライブの割り当てを変更したか、ハードドライブを移動したか、いくつかのパーティションを変更したか、新しいオペレーティングシステムをイ これらのシナリオでは、ブートファイルはまだ存在しますが、GRUBはそれらを見つけることができません。 そのため、GRUBプロンプトでブートファイルを探し、その場所を設定してから、システムを起動してGRUB設定を修正することができます。
GRUB2Command Shell
GRUB2command shellは、従来のGRUBのシェルと同じくらい強力です。 これを使用して、ブートイメージ、カーネル、およびルートファイルシステムを検出できます。 実際には、アクセス許可やその他の保護に関係なく、ローカルマシン上のすべてのファイルシステムに完全にアクセスできます。 セキュリティホールを考える人もいるかもしれませんが、あなたは古いUnixの格言を知っています:マシンに物理的にアクセスできる人は誰でもそれをgrub>
grub rescue>
モードはより制限されており、履歴やタブ補完はありません。
機能しているシステムで練習している場合は、GRUBのブートメニューが表示されたらCを押してGRUBコマンドシェルを開きます。 起動カウントダウンを停止するには、矢印キーを使用してメニューエントリを上下にスクロールします。 GRUBコマンドラインでは何も永続的ではないため、実験しても安全です。 すでにgrub>
grub rescue>
grub>
grub rescue>
の両方で動作します。 長いコマンド出力をページングするために、最初に実行するコマンドはページャを呼び出します。
grub> set pager=1
等号の両側にスペースがあってはなりま 今度は少し探検をしましょう。 タイプls
GRUBが表示されるすべてのパーティションを一覧表示するには:
grub> ls(hd0) (hd0,msdos2) (hd0,msdos1)
このすべては何ですかmsdos stuff
? つまり、このシステムには、光沢のある新しいGlobal Unique Identifiers partition table(GPT)ではなく、古いスタイルのMS-DOSパーティションテーブルがあります。 (Linuxでの新しいGUIDパーティションテーブルの使用(Goodbye Ancient MBR)を参照してください。 GPTを実行している場合は、(hd0,gpt1)
ls
コマンドを使用します。
grub> ls (hd0,1)/lost+found/ bin/ boot/ cdrom/ dev/ etc/ home/ lib/lib64/ media/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ vmlinuz vmlinuz.old initrd.img initrd.img.old
Hurrah、ルートファイルシステムが見つかりました。 ラベルは、msdos
gpt
cat
コマンドを使用して、システム上の任意のファイルを読み取ることができます:P>
grub> cat (hd0,1)/etc/issueUbuntu 14.04 LTS n l
/etc/issue
を読むことは、さまざまなLinuxを識別するためのマルチブートシステムで有用である可能性があります。
grubからの起動>
これは、ブートファイルを設定し、grub>
ls
(hd0,1)
にLinuxルートファイルシステムがあることがわかり、/boot/grub
がどこにあるかを確認するまで検索を続けることができます。 次に、独自のルートパーティション、カーネル、およびinitrd imageを使用して、これらのコマンドを実行します。
grub> set root=(hd0,1)grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1grub> initrd /boot/initrd.img-3.13.0-29-genericgrub> boot
最初の行は、ルートファイルシステムが 2行目は、使用するカーネルの場所をGRUBに伝えます。 入力を開始します/boot/vmli
root=/dev/sdX
と入力します。 はい、これは冗長に見えますが、これを省略するとカーネルパニックが発生します。 どのように正しいパーティションを知っていますか? hd0,1=/dev/sda1. hd1,1=/dev/sdb1. hd3,2=/dev/sdd2. 私はあなたが残りの部分を外挿することができると思います。
3行目はinitrd
ファイルを設定します。
四行目はシステムを起動します。
一部のLinuxシステムでは、現在のカーネルとinitrdはルートファイルシステムのトップレベルにシンボリックリンクされています。
$ ls -l /vmlinuz -> boot/vmlinuz-3.13.0-29-genericinitrd.img -> boot/initrd.img-3.13.0-29-generic
したがって、次のようにgrub>
から起動できます:P>
grub> set root=(hd0,1)grub> linux /vmlinuz root=/dev/sda1grub> initrd /initrd.imggrub> boot
grub-rescueからの起動>
GRUB rescueシェルを使用している場合は、コマンドが異なり、normal.mod
linux.mod
モジュールをロードする必要があります。
grub rescue> set prefix=(hd0,1)/boot/grubgrub rescue> set root=(hd0,1)grub rescue> insmod normalgrub rescue> normalgrub rescue> insmod linuxgrub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1grub rescue> initrd /boot/initrd.img-3.13.0-29-genericgrub rescue> boot
タブ補完は、両方のモジュールをロードした後に動作を開始する必要があります。
永続的な修復を行う
システムを正常に起動したら、次のコマンドを実行してGRUBを永続的に修復します:
# update-grubGenerating grub configuration file ...Found background: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tgaFound background image: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tgaFound linux image: /boot/vmlinuz-3.13.0-29-genericFound initrd image: /boot/initrd.img-3.13.0-29-genericFound linux image: /boot/vmlinuz-3.13.0-27-genericFound initrd image: /boot/initrd.img-3.13.0-27-genericFound linux image: /boot/vmlinuz-3.13.0-24-genericFound initrd image: /boot/initrd.img-3.13.0-24-genericFound memtest86+ image: /boot/memtest86+.elfFound memtest86+ image: /boot/memtest86+.bindone# grub-install /dev/sdaInstalling for i386-pc platform.Installation finished. No error reported.
grub-install
を実行するときは、パーティションではなくハードドライブのブートセクタにインストールしていることを覚えておいてくださしかし、それはまだ動作しません
あなたのシステムがこれのどれも動作しないように台無しにされている場合は、Super GRUB2live rescue diskを試してみてくださ 公式のGNU GRUBマニュアル2.00も参考になるはずです。