はじめに
GRUB(Grand Unified Bootloader)は、オペレーティングシステムカーネルを起動およびロードするためのツールであり、Linuxカーネルに基づくシステムのデフォルトのブートローダーです。マシンの電源を入れたときに最初に実行されますが、通常のユーザーがGRUBの動作を確認することはめったにありません。自動的に機能し、ユーザー入力は必要ありません。
ただし、同じマシン上でLinuxと一緒に別のオペレーティングシステムを起動しようとすると、他のシステムのブートローダーがGRUBを上書きし、Linuxシステムを起動できなくなる可能性があります。
この記事では、GRUBRescueコマンドとブート修復ツールを使用してLinuxのブートエラーを修正する方法を説明します。
前提条件
- sudo権限を持つアカウント。
- コマンドラインへのアクセス。
GRUBブートの問題
GRUBがオペレーティングシステムで起動しない最も一般的な理由は、別のOSのブートローダーがGRUBブート構成を上書きすることです。この問題は、既存のLinuxインストールでデュアルブートを試行しているときに発生します。もう1つの理由は、GRUB構成ファイルが誤って削除されたことです。
GRUBがシステムを起動できない場合、GRUBRescueプロンプトが表示されます。
上記の例は、 grub rescue
を表示する前に「nosuchpartition」エラーを表示するGRUBを示しています。 促す。もう1つの一般的なGRUBエラーは、「不明なファイルシステム」とそれに続く同じプロンプトです。
画面にgrub
が表示される場合があります プロンプトのみ。
GRUBレスキューコマンド
以下は、一般的に使用されるGRUBRescueコマンドのリストです。前のセクションで説明したプロンプトのコマンドを使用します。
コマンド | 説明 | 例 |
---|---|---|
boot | 起動を開始します(ショートカット: F10 、 CTRL + x 。 | コマンドは引数なしで発行されます。 |
cat | ファイルの内容を標準出力に書き込みます。 | cat (hd0,1)/boot/grub/grub.cfg |
configfile | 構成ファイルをロードします。 | configfile (hd0,1)/boot/grub/grub.cfg |
initrd | initrd.imgファイルをロードします。 | initrd (hd0,1)/initrd.img |
insmod | モジュールをロードします。 | insmod (hd0,1)/boot/grub/normal.mod |
loopback | デバイスとしてイメージファイルをマウントします。 | loopback loop0 (hd0,1)/iso/image.iso |
ls | ディレクトリまたはパーティションの内容を表示します。 | ls (hd0,1) |
lsmod | ロードされたモジュールのリストを表示します。 | コマンドは引数なしで発行されます。 |
normal | 通常のモジュールをアクティブにします。 | コマンドは引数なしで発行されます。 |
search | デバイスを検索します。オプション--file ファイルを検索します。--label ラベルを検索します。--fs-uuid ファイルシステムUUIDを検索します。 | search -file [filename] |
set | 環境変数を設定します。引数なしで発行された場合、コマンドはすべての環境変数とその値のリストを出力します。 | set [variable-name]=[value] |
起動エラーの修正
このチュートリアルでは、GRUBレスキュープロンプトを使用してGRUBブートの問題を解決する2つの方法について説明します。 、およびブート修復ツール 。
Grubターミナル経由
1.引数なしでsetコマンドを使用して、環境変数を表示します。
set
出力例は、GRUBが (hd0,msdos3)
から起動するように設定されていることを示しています。 パーティション:
2. lsコマンドは、ディスク上で使用可能なパーティションを一覧表示します。
ls
出力にはパーティションリストが表示されます。
ls
を使用します boot
を含むパーティションを検索するコマンド ディレクトリ。
ls [partition-name]
この例は、 boot
を示しています (hd0,msdos1)
のディレクトリ パーティション。
3.ブートパーティションをroot
の値として設定します 変数。この例では、 (hd0,msdos1)
という名前のパーティションを使用しています 。
set root=(hd0,msdos1)
4.normal
をロードします 起動モード。
insmod normal
5.normal
を開始します 起動モード。
normal
normal
モードを使用すると、より複雑なコマンドを発行できます。
6. linux
を使用してLinuxカーネルをロードします 指図。
linux /boot/vmlinuz-4.2.0-16-generic root=/dev/sda1 ro
7. boot
を発行します コマンド。
boot
これで、システムが正しく起動します。
ライブ画像経由
GRUBブートの問題を修正する別の方法は、Linuxライブイメージを使用して外部デバイスからブートすることです。
1.ライブLinuxインストーラーをダウンロードします。この例では、Ubuntu20.04ISOイメージを使用しています。
2. Etcherなどのツールを使用して、LinuxイメージをSDカードまたはUSBフラッシュドライブに書き込みます。
3.起動可能なデバイスを挿入し、コンピューターを起動します。
4.Ubuntuを試すを選択します ウェルカム画面で。
5.ライブシステムが起動したら、インターネットに接続します。
6.ターミナルを開き、次のコマンドを入力して、ブート修復ツールのリポジトリを追加します。
sudo add-apt-repository ppa:yannubuntu/boot-repair
Enterを押します リポジトリが追加されるのを待ちます。
7.リポジトリを更新します。
sudo apt update
8.ブート修復ツールをインストールします。
sudo apt install boot-repair
9.ターミナルからブート修復ツールを起動します。
boot-repair
10.推奨修理を選択します 。
ツールがブートローダーの修復を完了するのを待ちます。
GRUB構成ファイルの更新
システムが正常に起動したら、GRUB構成が最新であることを確認します。
次のコマンドを実行します:
update-grub
GRUBの再インストール
以下の手順に従って、LinuxシステムにGRUBを再インストールします。
1.OSインストールを含むパーティションをマウントします。この例では、 /dev/sda1
をマウントします /mnt
へのパーティション ディレクトリ。
sudo mount /dev/sda1 /mnt
2. /dev
をバインドします 、 /dev/pts
、 /proc
、および /sys
/mnt
内の対応するディレクトリへのディレクトリ フォルダ。
sudo mount --bind /dev /mnt/dev &&
sudo mount --bind /dev/pts /mnt/dev/pts &&
sudo mount --bind /proc /mnt/proc &&
sudo mount --bind /sys /mnt/sys
3.GRUBをインストールします。
sudo grub-install -root-directory=/mnt/ /dev/sda
4.インストールが正常に完了したら、ディレクトリをアンマウントします。
sudo umount /mnt/sys &&
sudo umount /mnt/proc &&
sudo umount /mnt/dev/pts &&
sudo umount /mnt/dev &&
sudo umount /mnt