qshinoの日記

Powershell関係と徒然なこと

grub2

grub2 console

linux のブートに利用される grub。何らかの理由で、下記の様な表示で止まった場合の対策。

基本は単純、下記コマンドを打つだけ。しかし、問題は、... の部分。

  1. set root=...
  2. linux ...
  3. initrd ...
  4. boot

以下は、この... を決める為の作業。 例えば、

  1. set root=(hd0,1)
  2. linux /boot/vmlinuz.img root=/dev/sda1
  3. initrd /boot/initrd.img
  4. boot

その前に、それぞれ...が何かを確認。

  1. 起動パーティション
  2. linuxカーネル
  3. 起動ラムディスクイメージ

さて、どの様にして...を決めていくのか。先ずは、lsにて。

(hd0) (hd0,msdos2) (hd0,msdos1)

この様に、grubが認識しているパーティションが表示される。

パーティションの中味は、

  • ls (hd0,1)/
  • 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

ファイルの内容が見たければ、

そんなこんなで、前記の...に埋める内容を見つける。

最後に、おまけ。

  • set pager=1
  • help

help を読みつつ、復旧させよう。

起動後

どうにかこうにか起動したら、grub復旧。

/dev/sda は起動ディスクでパーティションでは無いことに注意。

関連ファイル

  • /boot/grub/menu.lst ; grub1用
  •  /boot/grub/grub.cfg ; 自動生成 by update-grub
  • /etc/defaults/grub ; 編集用
  • /etc/grub.d/* ; 編集用

/etc/defaults/grub

これはまた別の機会に。

grub rescue>の場合

  • set prefix=(hd0,1)/etc/grub
  • set root=...
  • insmod normal
  • normal
  • insmod linux

以後は先程と同じ。set prefixは次項に。

  • linux ...
  • initrd ...
  • boot

set prefix

/boot/grub をフルパスで設定する。通常は設定済。rescue で上がって来るのは、この変数が設定されていない、あるいはこのディレクトリからモジュールがロードできなかった場合。

(hd2,4)書式について

Grubではドライブやパーティションに対して (hdn,m) といった書式の命名法を採用しています。 n はドライブ番号、  m はパーティション番号。 ドライブはゼロから数え始めます。 プライマリパーティション番号は1から数え始め、拡張パーティションは5から数え始めます。 かつてのバージョンでは共にゼロから数え始めていましたが、今はそうではないので注意してください。 例えばパーティション sda1 は (hd0,1) となり、パーティション sdb3 は (hd1,3) となります。 Linux システムでの取り扱いとは違って GRUB では CD-ROM ドライブをハードドライブとしては扱いません。 例えば CD が hdb であり2番めのハードドライブが hdc であった場合、2番めのハードドライブは (hd1) と表記されます。

参考

https://jp.linux.com/news/linuxcom-exclusive/418274-lco20140625

http://itref.fc2web.com/unix/linux/grub.html

http://archive.linux.or.jp/JF/JFdocs/LFS-BOOK/chapter08/grub.html