• ベストアンサー

grubのstage1_5がMBRの直後にない場合

CentOS 5を使っています。 grubでは通常、MBRにstage1が書き込まれ、その直後の約30KBの領域にstage1_5が書き込まれており、実行時にはstage1_5がファイルシステムを認識して/boot/grub/stage2を実行するものと理解しています。 そこで dd if=/dev/sda of=head.img bs=512 count=100 のようにしてディスク先頭を見てみたところ、MBR直後はほぼ0で埋まっており、stage1_5が見つかりませんでした。 この場合、stage1_5を飛ばしてstage2が実行されているのでしょうか? そうだとすると、stage2の位置がMBRに書き込まれているのでしょうか? rmコマンドでいったんstage2を削除、同名で同内容のファイルを作成した場合、起動できなくなりますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>grubでは通常、MBRにstage1が書き込まれ、その直後の約30KBの領域にstage1_5が書き込まれており、実行時にはstage1_5がファイルシステムを認識して/boot/grub/stage2を実行するものと理解しています。 その認識でOKかと。 >dd if=/dev/sda of=head.img bs=512 count=100 環境依存するのかどうかは不明ですが…当方のCentOS5.xの環境ではMBR直後から…ですね。 od -A x -t x1 /usr/share/grub/i386-redhat/e2fs_stage1_5 | head でstage1.5のバイナリを確認。 od -A x -t x1 head.img | grep " 52 56 be" で調べると、0x000200から(MBRの次のセクタから)書き込まれています。 4KセクターなHDDの場合はどうですかねぇ……。 http://www.gnu.org/software/parted/USER.jp によると、grubでもstage1.5を使用しないパターンもあるようで。

paraspor
質問者

お礼

ありがとうございます。 引き続き調べてみたところ、やはりstage1の中にstage2の第1セクタの位置が書かれていて、 stage2ファイルのセクタが変わってしまうと起動しなくなるようですね。 http://www.mtl.t.u-tokyo.ac.jp/~iizuka/linux/grub.html http://www.geocities.co.jp/SiliconValley-Bay/3897/grub/grub-6.html

関連するQ&A

  • grubについて教えてください。

    fedoraとcentosのデュアルブートにしています。 MBRにgrubをインストールしたのですが centosの/boot/grub.confを見に行くようになっている みたいです。 grubのstage1にどこのパーティションの/boot/grub.confを 見に行くようにするのか設定する方法が あるのでしょうか? 情報があれば教えていただけないでしょうか?

  • grub2をインストールして、何個かコマンドを打ちこむと起動不可能になりました

    ふとgrubでなくgrub2が必要になりインストールした後、メッセージに表示されていたupgrade-from-grub-lagacyというコマンドを打ちこんでしまい、恐らくMBRが書きかえられたようで起動不可能になりました。 私はこのコマンドがgrubの設定をgrub2でも使えるようにしてくれるコマンドかと思っていたのですが、違ったようです。(よく英語のメッセージを読んでなかった。。。) 今の所起動すると「Error 15」と表示されるのみでgrubの選択画面に行きません。 UbuntuのLive CDでマウントしてみた所、ファイルシステム自体は壊れていないようです。 とりあえず色んなファイルをバックアップしている途中なのですが、できればMBRの書き変えのみで済むととてもうれしいです。 パーティションテーブルは、fdisk -lした所 Disk /dev/sda: 200.0 GB, 200049647616 bytes 255 heads, 63 sectors/track, 24321 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes Disk identifier: 0xd39fe876 デバイス Boot Start End Blocks Id System /dev/sda1 1 192 1536000 27 不明 Partition 1 does not end on cylinder boundary. /dev/sda2 * 192 13246 104857600 7 HPFS/NTFS /dev/sda3 13247 24321 88959937+ 5 拡張領域 /dev/sda5 13247 13743 3992121 82 Linux swap / Solaris /dev/sda6 13744 21710 63994896 83 Linux /dev/sda7 21711 24321 20972826 b W95 FAT32 と出ました。(手打ちなのでちょっと違う所があるかもしれませんが。。。) /dev/sda[23]はWindows Vistaを入れています。 /dev/sda1はそれのリカバリ領域だったと思います。 メーカー製だったので変な領域がついてますが。。。 /dev/sda7はWindowsとLinux両用のための領域です。 それで/dev/sda5がswap領域で/dev/sda6が肝心のUbuntuをインストールしている領域です。 この領域をブートするようにしたいのです。 ブートできればgrub2をアンインストールしてgrubを入れなおすなど何かできるかもしれません。。。 ググってみたところ、一番自分の症状と似てるのは↓の最初のページです。 http://74.125.153.132/search?q=cache:vNLpbmOaCKwJ:yyatsuo.com/grub2-setting.php+grub2+error+15&cd=1&hl=ja&ct=clnk&gl=jp&lr=lang_ja http://groups.google.co.jp/group/linux.debian.user/browse_thread/thread/9c20f3d6297dd9fb http://www.google.co.jp/search?hl=ja&safe=off&q=grub2+error+15&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja&aq=f&oq= 今このページの通りに grub> root (hd0, 5) grub> kernel /boot/vmlinuz-2.6.28-15-generic root=/dev/sda5 と打った所、Segmentation faultしてしまいました。やはりUbuntuのLiveCDでは無理なのでしょうか。 また、grubの知識は「色んなコマンドで設定を変更し、setupで実際にMBRの書き変えを行う」というような曖昧な知識のみです。。。 今日もこのノートPCを使うのでかなり困ってます。。。誰かご教授願えないでしょうか。 ちょっと焦っているので乱文乱筆すいませんm(_ _)m

  • fedora19でgrubステージ1をインストール

    パーティションの先頭セクタに格納するにはどうしたらいいのでしょうか? fedora19ではgrubステージ1はmbrにしか配置できないのでしょうか? fedora17まではインストールのときにインストールパーティションの先頭セクタに配置できたのですがfedora18からはインストール画面からそのような選択肢が無くなりました。 よろしくお願いします。

  • /dev/hda と /dev/hda1

    /dev/hda と /dev/hda1 はそれぞれどのような位置を指しているのでしょうか? 例えば、grub-install /dev/hda (つまり、MBR にインストール) とやった場合と grub-install /dev/hda1 (Linux パーティションの最初のセクタ) とやった場合では、GRUB がインストールされる位置が異なるようです。 プライマリ・マスタ・ディスクの先頭にあるパーティションの最初のセクタ=MBR だと思っていたのですが、 # dd if=/dev/hda of=mbr.dat count=1 bs=512 # dd if=/dev/hda1 of=top.dat count=1 bs=512 # diff -c mbr.dat top.dat とやると、2つのファイルは異なっているようですので、/dev/hda の最初の 1 ブロックと /dev/hda1 の最初の 1 ブロックは異なっているようです。 例えば、/dev/hda の 1 ブロックの直後に /dev/hda1 の 1 ブロックが来ているなどの構造について教えていただけないでしょうか。(URL 参照でも構いません) また、ブートローダを /dev/hda1 にインストールしてしまった場合、/dev/hda1 が空っぽでなかったとすると、/dev/hda1 の最初のセクタにあったデータが壊れてしまう等の問題が発生する可能性はあるのでしょうか? よろしくお願いいたします。

  • UbuntuのGrub修復について

     Windows XPとUbuntu8.04LTSを別パーティションのダブルブートで使用していたのですが、UbuntoのパーティションにPuppyLinux4.11をFregalインストールしてMBRをインストールしたらUbuntuが起動できなくなりました。  Ubuntuを起動できるようにするには、どうしたらよいでしょうか。 dev/sda1 Windows XP Cドライブ dev/sda2 拡張パーティション  +--dev/sda5 Windows Dドライブ +--dev/sda6 Ubuntu 本体(9GB) +--dev/sda7 Linux Swap (800MB) dev/sda3 Ubuntu /boot (300MB) UbuntuのGrubはdev/sda3にインストールしました。 Windows と Ubuntu の切り替えは Free のブートローダー MBM を使用しています。 Puppy Linux でインストールしたのは dev/sda6のLinux スーパーブロックです。 dev/sda3 のgrub のmenu.lst は正常に表示されますが、Ubuntuを選択すると、ファイルがないとのメッセージがでます。 ブート関係を元に戻せばよいと思うのですが、どうしたらよいかわかりません。 よろしくおねがいします。

  • grub-installが不可能なので、違う方法がありますか?

    Vine Linux 3.0 をインストールしました。 システムコマンダーからブートできないため、試行錯誤しています まず、/sbin/grub-install /dev/hda が comand not found となり、何をどうすれば良いか知識がありません。 となれば、Linux専用MBRファイルを作成するのが良いかと思い付きました。 hda1 WinME(20GB)とシステムコマンダー8.0 hda2 WinXP(30GB) hda3 /boot(47MB) hda4 拡張 hda5 /(26GB) hda6 swap(1024MB) 現在は、GRUBをFDよりブートし、Vine が起動できています。 title Linux root (hd0,2) kernel /vmlinuz root=/dev/hda5 ro #initrd /boot/initrd.img そこで、FDブートではなく、MBRファイルを作成し、システムコマンダーよりMBR指定での起動としたいのです。 # dd if=/dev/hda of=/bootlnx bs=512 count=1 このようなコマンドでよろしいでしょうか。 ただ、bootlnxファイルをバイナリで見ても全て 00 の表示のような感じでしたが、正常に作成されていないのでしょうか。 何か良いアドバイスありましたら宣しくお願いします。

  • Fedora20をインストールしたいのですが

    Fedora17ぐらいまではGRUBの1stステージを MBR(sda)ではなくPBR(sda2,sda3,…)に配置できましたが Fedora18からはGRUBの1stステージを MBRにしか格納できません Fedora20のGRUBの1stステージを PBRに配置する方法はあるでしょうか?

  • MBRを復旧してもパーティションが見えない

    Windows と Linux が混在している HDD の Windows の部分のみ(リカバリ領域も含めて)をバックアップしようと思い 作業する中で遭遇したトラブルについての質問です。 まず、/media/linux-backup/ でマウントされているUSBに dd if=/dev/sda of=/media/linux-backup/MBR--2014-04-10.bu bs=512 count=1 とやって MBR を保存し、 fsarchiver で Linux の各パーティションをセーブした後に、 Linux のパーティションを全て削除し、 clonezilla で HDD 全体のバックアップイメージを取りました。 その後、 dd if=/media/linux-backup/MBR--2014-04-10.bu of=/dev/sda bs=512 count=1 とやってまずは MBR を復旧できたと思ったのですが、 Linux の各パーティションの存在が gParted で見えません。 再起動してみても、 やはり gParted でパーティションが見えない状態です。 一つの方法としては HDD の現在空き領域になっている部分でパーティションを切り直して、例えば sda10 などの番号を 元々その目的の Linuxディストリビューション が入っていたパーティションの番号と 一致するようにさえしておけば (sda10 が HDD 上で実際に存在する位置が CHS の情報として以前とは異なっていても) fsarchiver でリストアして、 その後に問題なくそのパーティションから起動・操作できるだろうとは思います。 (gPartedでパーティションを移動させるのと同じなので) ただ、なるべく以前と(CHSが)完全に一致するパーティションの配置を復旧する方法を知りたいです。 どなたか原因と対策がお分かりになる方は ご教授下さい。 よろしくお願いします。

  • partition情報をMBRに書き込んで復旧

    http://okwave.jp/qa/q8404421.html に書いてある操作で USB の MBR を消去しようとしていたのに $ dd if=/dev/zero of=/dev/sda bs=512 count=1 として、間違えてHDDのMBRを消去してしまいました! 今のところ、LinuxMintは サスペンドとそこからの復旧はできています。gdiskの結果は次のとおりです。 dizzy@PC03 ~ $ sudo gdisk -l /dev/sda [sudo] password for shin: GPT fdisk (gdisk) version 0.8.1 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Disk /dev/sda: 1250263728 sectors, 596.2 GiB Logical sector size: 512 bytes Disk identifier (GUID): (略) Partition table holds up to 128 entries First usable sector is 34, last usable sector is 1250263694 Partitions will be aligned on 2048-sector boundaries Total free space is 1250263661 sectors (596.2 GiB) Number Start (sector) End (sector) Size Code Name 再起動をしてしまったら、MBRが消失しているのですから grub rescue のメッセージさえ出ないと思われますので、サスペンドしか今のところできません。 Gpartedでディスクの修復をしようとすると、 「ディスク全体をスキャンする必要があります。 このスキャンには非常に長い時間がかかるかもしれません。」 と出ますので、できれば他の方法を使いたいし、知っておきたいです。 dizzy@PC03 ~ $ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda10 20G 11G 7.8G 58% / udev 1.9G 4.0K 1.9G 1% /dev tmpfs 773M 1.1M 772M 1% /run none 5.0M 0 5.0M 0% /run/lock none 1.9G 312K 1.9G 1% /run/shm /dev/sda6 90G 12G 79G 13% /media/DATAFAT32_ /dev/sda9 20G 6.2G 13G 33% /media/Debian /dev/sda8 9.9G 6.8G 2.6G 73% /media/Ubuntu /dev/sda2 15G 7.3G 7.5G 50% /media/Recovery ファイルマネージャからも Recovery(Windows),Debian,Ubuntu,FAT32のデータ保存用パーティション が見えていて、中身のファイルを読み込むこともできています。 これらのパーティションのHDDの中での位置を Gparted,gdiskなどに分からせることができれば 残りの領域にどういうパーティションがあるかだけ検査させれば良いでしょうから、 HDD全体を最初からスキャンさせるより効率的になると思うのですが、 どうすればよいでしょうか? どうぞよろしくお願いいたします。 あと、grub-install の結果は次のとおりです。 dizzy@PC03 ~ $ sudo grub-install --recheck /dev/sda /usr/sbin/grub-probe: エラー: cannot find a GRUB drive for /dev/sda10. Check your device.map. Auto-detection of a filesystem of /dev/sda10 failed. Try with --recheck. If the problem persists please report this together with the output of "/usr/sbin/grub-probe --device-map="/boot/grub/device.map" --target=fs -v /boot/grub" to <bug-grub@gnu.org> dizzy@PC03 ~ $ sudo /usr/sbin/grub-probe --device-map="/boot/grub/device.map" --target=fs -v /boot/grub /usr/sbin/grub-probe: 情報: `/boot/grub/device.map' を開けません. /usr/sbin/grub-probe: 情報: Scanning for dmraid_nv RAID devices on disk hd0. /usr/sbin/grub-probe: 情報: the size of hd0 is 1250263728. /usr/sbin/grub-probe: 情報: the size of hd0 is 1250263728. /usr/sbin/grub-probe: 情報: Scanning for dmraid_nv RAID devices on disk hd1. /usr/sbin/grub-probe: 情報: the size of hd1 is 3915776. /usr/sbin/grub-probe: 情報: the size of hd1 is 3915776. /usr/sbin/grub-probe: 情報: scanning hd0 for LVM. /usr/sbin/grub-probe: 情報: the size of hd0 is 1250263728. /usr/sbin/grub-probe: 情報: no LVM signature found. /usr/sbin/grub-probe: 情報: the size of hd0 is 1250263728. /usr/sbin/grub-probe: 情報: scanning hd1 for LVM. /usr/sbin/grub-probe: 情報: the size of hd1 is 3915776. /usr/sbin/grub-probe: 情報: no LVM signature found. /usr/sbin/grub-probe: 情報: the size of hd1 is 3915776. /usr/sbin/grub-probe: 情報: Scanning for mdraid09 RAID devices on disk hd0. (字数制限のため中略) /usr/sbin/grub-probe: 情報: scanning hd0 for LVM. /usr/sbin/grub-probe: 情報: the size of hd0 is 1250263728. /usr/sbin/grub-probe: 情報: no LVM signature found. /usr/sbin/grub-probe: 情報: the size of hd0 is 1250263728. /usr/sbin/grub-probe: 情報: scanning hd1 for LVM. /usr/sbin/grub-probe: 情報: the size of hd1 is 3915776. /usr/sbin/grub-probe: 情報: no LVM signature found. /usr/sbin/grub-probe: 情報: the size of hd1 is 3915776. /usr/sbin/grub-probe: 情報: /dev/sda10 starts from 283576320. /usr/sbin/grub-probe: 情報: opening the device hd0. /usr/sbin/grub-probe: 情報: the size of hd0 is 1250263728. /usr/sbin/grub-probe: エラー: cannot find a GRUB drive for /dev/sda10. Check your device.map.

  • Fedora 20 のマシンに、新たに Windo

    RAIDで構築してある Fedora 20 のマシンに、新たに Windows 7 をインストールする事にしました。 Windows を後からインストールすると MBR が書き換えられ Fedora が起動できなくなるようなので、以下のような手順で 作業しようと計画しています。 以下の作業手順で問題になりそうな所や、不足している所、 余分な所がありましたら、ご指摘いただければ幸いです。 構成 RAIDデバイス  実デバイス   マウントポイント RAID1-boot sda5,sdb5 /boot RAID1-system sda2,sdb2 / RAID1-swap sda3,sdb3 swap RAID1-home sda1,sdb1 /home RAID1-VirtualBox sda6,sdb6 /VirtualBox なし sda7 Android-x86 作業手順 1. /VirtualBox を非RAID化し、/dev/sdb6 を /VirtualBox  として使用し、/dev/sda6 に Windows 7 をインストールする 2. /boot のディスクイメージをバックアップする 例 dd if=/dev/md/RAID1-boot of=/mnt/usb/grub-bup/fedora-boot.img bs=512 count=1 3. /boot を非RAID化する 例   umount /dev/md/RAID1-boot vi /etc/fstab で /boot 部分をコメントアウトする mdadm --misc --stop /dev/md/RAID1-boot mdadm /dev/md/RAID1-boot -r /dev/sda5 -r /dev/sdb5 mdadm --misc --zero-superblock /dev/sda5 /dev/sdb5 4. /dev/sda6 の領域を fdisk コマンドで解放する 5.念の為 /dev/sdb の HDD の電源を切っておく 6. 空いた領域に Windows 7 をインストールする 4の作業で /dev/sda7 が /dev/sda6 になるので /dev/sda7 に  インストールされる??? 7.Windos 7 の正常起動を確認する。 8. /dev/sdb の電源も入れて Fedora Live CD で起動する。 9. USBメモリにバックアップしたディスクイメージを書き戻す。  例 dd if=/mnt/usb/grub-bup/fedora-boot.img of=/dev/sda5 bs=512 count=1 dd if=/mnt/usb/grub-bup/fedora-boot.img of=/dev/sdb5 bs=512 count=1 10.HDD から Fedora を起動する。 11. /boot をRAID化する。  例 mdadm /dev/md/RAID1-boot --add /dev/sda5 --add /dev/sdb5 12. /dev/md/RAID1-boot の UUID が変わっているか確認して    /etc/fstab を編集する。(現状 UUID で記述しているためです) 12.grub2-mkconfig で /boot/grub2/grub.cfg を再作成する。 作業手順 9 辺りから、かなり不安で何度も頭で演習して 80% 位こんな物かと 思っています。 11 で add する前に、もう一度 create する必要はない??? Fedora Live CD から起動して、RAID化されているディスクに直接書き込めれば いいのですが、やり方がわかりません。 そのため、一度非RAID化しております。 最悪 Fedora を再インストールしてバックアップから戻して復旧するという 事も視野に入れていますが、できれば短時間で済ませたいです。 識者のご助言を頂ければ幸いです。