わたしのブログ

わたしのブログ

PR

サイド自由欄

カレンダー

キーワードサーチ

▼キーワード検索

フリーページ

2025.02.13
XML
カテゴリ: Ubuntu
Ubuntu18~Ubuntu24までを何台かのPCにインストールしているのですが、時々 インストール直後や、OSの追加インストール後、自動起動できなくなって grubのプロンプトで止まってしまうPCがあります。BIOSセットアップ画面からBOOTすると問題なく起動できたり、いろいろとよくわからないことも多く、 grub がそもそも何なのかわかっていなくて放置していました。

少し調べてみたので備忘録としてまとめておきます。

GRUBはGRand Unified Bootloaderの略らしく、Linuxのブートローダーです

Linuxが起動した後であれば /boot/grub の下に grub.cfgファイルがあるので、ファイルの内容を確認すればgrubメニューでの設定内容の詳細が記載されています。

grub のプロンプトで止まってしまった状態で、現在の状態を把握し、故障・破損原因を調べたり、起動可能なようにする方法について、少し調べてみました。

GRUBはブートローダーとしては様々なコマンドを用意してあって、デバイス・ファイルシステムの状態を確認することもできます。

help で大量のコマンドが表示されます。( GNU GRUB Manual 2.12 )
自分が確認・対策に使うコマンドは次のコマンドです


・cat
・set
・set root=XXX
・linux
・initrd
・boot
・set prefix=XXX
・normal

☆コマンド詳細
・ls
  ファイルのリスト表示コマンド

   (proc) (memdisk) (hd0) (hd0,msdos#), (hd1,gpt#)
  のように表示される(#はパーティション番号)

  ls (hd0)
  ls (hd0,msdos1) のようにするとファイルフォーマットが表示される
   grubの認識結果に応じて次のように表示される

    Filesystem type fat/ntfs/ext* 
  Filesystem typeが表示されるデバイスでは ls (hd0,msdos1)/ のように指定するとファイルシステムの中のディレクトリ構造が表示される

・cat
  ファイルの表示
  通常の linuxコマンドと同じ(のようにみえる)

・set
  現在の設定を表示

・set root=XXX
  rootファイルシステムを指定する
  例。 set root=(hd0,msdos3)
  設定した後であれば / で参照できる
  例. ls (hd0,msdos3)/ と ls / は同じ意味

・set prefix=XXX/boot/grub
  grubの設定ファイルのパスを指定する
  これが間違っているとメニューが表示できない

・set cmdpath=XXX/EFI/UBUNTU
  コマンドパスの設定。

・insmod
  ドライバをロードする

・linux
  カーネルイメージファイルの設定
  例. linux /boot/vmlinuz

・initrd
  カーネルパラメータイメージの設定
  先に linuxコマンドで カーネルを読み込むこと
  例. initrd /boot/initrd.img

・normal
  GRUBメニューを表示する
  prefixで正しい場所を指定した後に実行

☆起動できない原因

確認したわかったのは、多くの場合は、ドライブの挿抜・追加・削除・新しいパーティションの作成・削除によってドライブの番号やパーティション番号がずれてしまって、grubの自動認識が失敗してしまっているようです。
問題の原因等の確認のパターンとしては次のようなものが考えられます
(電源断等でファイルシステムの一部が壊れてしまうケースもあると思いますが、まだそのような状況には遭遇しておらず、そういった対応については未記載です)

☆対策パターン1

たいていの場合 rootパーティションが設定と違って起動できないので

ls で extパーティションを探す。
extパーティションが見つかったら、extパーティションの中身をさらにlsして rootパーティションであることを確認する
例. Windowsが入ったドライブとは別ドライブにUbuntuをインストールしている場合(linuxがMBRでWindowsがGPTの場合))
ls
.... (hd0, msdos3) (hd0,msdos2) )hd0,msdos1) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1)
ls (hd0,msdos3)
type ext*
ls (hd0,msdos3)/
boot/
→boot ディレクトリがあるようであれば、 (hd0,msdos3)が rootファイルシステムであることが確定

set root=(hd0,XXX) (上の例なら (hd0,msdos3)
set prefix=/boot/grub
normal
でメニューが表示され、起動できる

sudo grub-install /dev/sda
 HDD/SSD先頭の grub情報を更新する

☆対策パターン2

ls で extパーティションを探す。
extパーティションの中身をさらにlsして rootパーティションであることを確認する
set root=(hdX,YYY)

ls /boot でカーネル、initrdのイメージをさがす

linux /boot/vmlinuz-XXX root=/dev/sdaY
 (hd0ならsda, hd1ならsdb, Yはmsdos/gpt番号)
initrd /boot/initrd.img-ZZZ
 (ファイルはtabで補間しながら探すと簡単)
boot

でカーネルを起動確認する

sudo grub-install /dev/sda
 HDD/SSD先頭の grub情報を更新する

☆対策パターン3
ls で extパーティションを探す。

外付けHDD/SSBを使用しているのにもかかわらず、lsしても外付けHDD/SSDに該当するextパーティションがはいったドライブが見つからない場合は、いったん外付けHDD/SSDを別のPCに接続して確認・修復
(他のPCに接続して、パーティション構成を確認して、元のPCに戻しただけでls で表示できるようになっている場合がありました)

BIOSの高速起動設定が外部デバイスの認識を不安定にする可能性もあるので、設定を無効にしておいたほうがよい

ーーー
おまけ

Linux起動後は、
sudo rm /var/crash/*
しておくと、過去の crashログによるダイアログ表示が消える

ーーー
2025/2/13 13:00 公開

ーーー 広告 ーーー





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2025.04.12 06:00:23
コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: