Ubuntuサーバー、gptパーティションテーブル、mdadm、grubブートが失敗する


9

基本的な作業システムの詳細:

Ubuntu 12.04サーバーCDを使用してサーバーをインストールしました。

4つのディスクがあります。すべてのディスクで、このhowtoと同様に、次のことを行いました

  • 2GBのスワップパーティションを作成しました
  • 256 GBの/ bootパーティションを作成
  • 64 GB RAID10パーティションを作成(ルート用)
  • 残りのスペースを占める大きなRAID10パーティションを作成

ブートをext3としてフォーマットしました。ルートと大きなパーティションにRAID10をセットアップしました。ルートをext4でフォーマットしました。大きなボリューム上に論理ボリュームを作成し、ext4でフォーマットしました。

結果のシステムは正常に動作し、正常に起動します。

問題の詳細:

次に、失敗の手順を文書化することにしました。最初のステップとして、grubを再インストールすることにしました。

# grub-install /dev/sda
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
# grub-install /dev/sdb
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..

そのため、失敗したように見えますが、あきらめて変更を加えなかったようです。だから私は再起動しました。起動に失敗しました。黒い画面でハングし、カーソルが約4行下に点滅します。「Shift」キーを押しながら起動すると、カーソルの左側に「GRUB」という単語が表示されますが、インタラクティブなプロンプトは表示されません。

この時点で、私はこのレポートを生成するためにboot-repair-diskを使用しました:http : //paste.ubuntu.com/966531/

上記のレポートでは、ブートローダーがcore.imgの正しいセクターを指していないと記載されています。(sdaは仮想CDです。sdbはブートディスクです。sdcはsdbのミラーですが、ブートはミラーリングされていません。独立した無関係なパーティションがあり、フォーマットされたext3です。sddとsdeにはブート用のスペースがありますが、フォーマットされていません)

次に、UbuntuサーバーのCDから起動し、レスキューシステムを起動して、エラーなしで完了した次のコマンドを発行しました(sdaは仮想CD、b、c、d、eはa、b、cのディスクです) 、前のgrubコマンドのd):

# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

この時点で、私はこのレポートを生成するためにboot-repair-diskを使用しました:http : //paste.ubuntu.com/966561/

上記のレポートでは、core.imgに関する問題は解消されています。正しいセクターを指しているようです。

起動しようとすると、grubプロンプトが表示されます。「set」を実行すると、ルートが見つかり、設定されていることがわかります。「ls /」を実行すると、vmlinuzカーネルファイルを含むraidボリュームのルートディレクトリが表示されます。「ls / vmlinuz」と入力すると、「エラー:ファイルが見つかりません」と表示されます。「linux」コマンドを使用してカーネルをロードしようとすると、同じエラーが表示されます。「ls -l /」を使用すると、vmlinuzファイルがリストされません。

フォローしたい場合のために、過度に詳細な説明:

/boot/grub/grub.cfgもないことに気付いたので、実行しました

# grub-mkconfig -o /boot/grub/grub.cfg

しかし、問題は残っています。

「gptsync」ツールを使用しても、この動作に変更はありません。

EFIが有効なBIOSで起動するように要求するため、boot-repair-diskはシステムを修復しません。私はこれを簡単に調べましたが、それがどのように機能するのかわかりません。ブートオプションでUEFIシェルを見つけましたが、それについて何も知りません。そこからスタートアップを変更する方法がわかりません(たとえば、そのEFIシェルからCDをブートするなど)。

私もこのページを読みましたが、Ubuntuには「grub」コマンドが付属していないため、正確にフォローすることはできません。私は単にそのコマンドをインストールすることができましたが、別のセットアップをするのではなく、Ubuntuインストーラーがそれをインストールする方法を見つけたいと思っています。ブロックリストを使用しましたか?

boot-repair-diskで起動されたときのpartedの出力は次のとおりです(ここでsdbは最初のハードディスク、ディスクから起動された場合はsda、2番目の貼り付けリンクで「boot」は「bios_grub」に変わります)。

Model: ATA Hitachi HUA72303 (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name   Flags
1      17.4kB  2000MB  2000MB  linux-swap(v1)  swap1
2      2000MB  2256MB  256MB   ext3            boot1  boot (this says bios_grub in 2nd link)
3      2256MB  66.3GB  64.0GB                  root1  raid
4      66.3GB  3001GB  2934GB                  data1  raid

これは、比較のための無関係な超古い仮想マシンです(boot-repair-diskに慣れていない人向け):http : //paste.ubuntu.com/966799/

上記のgrub-mkconfigを実行し、「bios_grub」を「boot」に戻した後の、問題のあるシステムからの最新の貼り付けは次のとおりです。 http://paste.ubuntu.com/966808/

2つを比較すると、これは興味深いように見えます。

sdb2: __________________________________________________________________________

File system:       
Boot sector type:  Grub2's core.img
Boot sector info: 
Mounting failed:   mount: unknown filesystem type ''

md/bcserver8:0: ________________________________________________________________

File system:       ext4
Boot sector type:  -
Boot sector info: 
Operating System:  Ubuntu 12.04 LTS
Boot files:        /boot/grub/grub.cfg /etc/fstab /boot/grub/core.img

raidにブートファイルがあり、sdb2がフォーマットされていないようです。(これにもかかわらず、grub-installを実行する前にシステムが起動しました)。レスキューCDから、「mount -t ext3 / dev / sdb2 / boot」が失敗します。しかし、grubはパーティション2を明示的に使用するため(bios_grubをオンに設定するpartedコマンドの2)、これは混乱を招くのは当然です。

だから私はこのようなことをしました:

# mkfs.ext3 -L boot1 /dev/sdb2
# mv boot boot_on_root
# mkdir boot
# mount /dev/sdb2 boot
# rsync -avHP boot_on_root/ boot/
# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

その後、再起動すると、再び黒い画面が表示され、プロンプトは表示されません。 http://paste.ubuntu.com/966848/

したがって、この時点で、私の推測では、bios_grubが設定されている場合、grubはMBRにインストールされず、ext3のext3ファイルシステムにはインストールされず、パーティション自体にインストールされます。そこにext3ファイルシステムをセットアップします。EFIについての簡単な説明から、EFIは最初のパーティションがブートであると想定しているようですが、私の場合、最初のパーティションはスワップであり、マウントできないものではなくFATである必要があります...感覚、私はまだ手掛かりなしで完全に失われています。[編集:今私は手がかりを持っています...更新のために少しスキップしてください]

そして今、boot-repair-diskrepairをクリックすると、別の質問が表示されます。前回、エラーがウィンドウの下に隠れていたので、それを表示するためにもう一方をドラッグしなければなりませんでした。今回はメインウィンドウがなくなり、新しいウィンドウには次のように表示されます。

GPT detected.       You may want to retry after creating a
BIOS-Boot partition (>1Mo, flag). Do you want to continue?

だから私は「はい」をクリックすると、それは正常に修復されたと言い、別のペーストを作成しました:http : //paste.ubuntu.com/966862/

しかし、まだカーソルが点滅している黒い画面があります。

今私の理論は、ブートが非脂肪で非EFIの物によって上書きされたというものです。これは、以前はセクター0〜63にあったはずの単なるコードです。幸いにも、このページで非常に明確な声明に出くわしました。おそらく、これがすべての意味を理解できたと思います。そして、私がそれを見つけた後、ジェレミーは答えを投稿しました。真の場合、これは欠けている重要な概念であることを確認します。 http://blog.psych0tik.net/2011/08/grub-embedding-blocklists-and-bios_grub-partitions/

質問:

何が起こっている?grubが起動しないのはなぜですか?「ファイルが見つかりません」と表示されるのはなぜですか?

partedで設定したこの設定(Ubuntuインストーラーによって設定されなかった)なしでgrubがインストールしないのはなぜですか?ルートはRAIDにあり、パーティションテーブルはGPTなので、インストールに必要なのは、LVMにもソフトウェアRAIDにもない個別の/ bootだけだと思いました。

Ubuntu CDインストーラーは、この問題なしで、bios_grub設定なしでどのようにインストールしますか?

EFIの使用も検討します。これが良いアイデアであり、標準的な設定方法がある場合、私は常に新しいことを学ぶ用意があります。

すべての質問に答えなくても私を幸せにする最も速い答えは、インストールCDが行ったのと同じ方法でブートローダーを修正するためにレスキューCDから実行できる一連のコマンドです。CDの代わりに、起動したシステムで実行できれば、さらにすばらしいでしょう。


partedからの印刷出力を追加できますか?
ジェレミー

993行の2つの貼り付けリンクでそれを確認できますが、リクエストごとに、質問に追加します。
Peter

回答:


8

解決策は、/ bootパーティションと同じではないbios_grubパーティションを使用することです。

デフォルトでは、bios_grubパーティションは1MiBであり、bios_grubのフラグが立てられている必要があります。私のディスクは私のディスクの最初のパーティションです。partedが示唆するように、パーティション2が実際に/ bootである場合、それは正しくないため、別の1MiBパーティションを作成する必要があります。

GPTとGRUB2を使用すると、最小ファイルシステムには3つのパーティション(bios_grub、root、swap)があります。(完全にスワップが必要かどうかはわかりません)

「grub-install」を実行しただけでgrubが起動しないのはなぜですか?

不明...埋め込みできないため機能しないことが明確に示されていれば、何も変更しないと思います。

「ファイルが見つかりません」と表示されるのはなぜですか?

/ vmlinuzは、ブートパーティションを使用するシンボリックリンクであり、ブートパーティションが破損しています。bios_grubコードは、そのext3構造の上に作成されました。これはおそらく/ bootがマウントされておらず、そこに見られるgrubファイルが実際にはルートシステム上にあり、カーネルが含まれていないことを意味します。

なぜ私はpartedで設定したこの設定なしにGRUBがインストールしたくないのですか?

GPTパーティションテーブルには、MBRとは異なり、ブートローダー用のスペースがありません。したがって、ブートコードを保持するために特定のパーティションを作成する必要があります。「grub-install」を実行する前に、次のコマンドでこのパーティションを指定してください:

    parted /dev/sda set 1 bios_grub on

必要なのは別の/ bootだけだと思っていました。Ubuntu CDインストーラーはbios_grub設定なしでどのようにインストールしますか?

この要件は、Ubuntuインストーラーに必要なすべてのようですが、簡単に壊れる非標準のシステムを作成します。

GRUBが「このGPTパーティションラベルにはBIOSブートパーティションがありません」と言っている場合、それは/ bootではなくbios_grubパーティションを意味します。


ありがとうございました。これは実際、私が現在取り組んでいることに非常に近いものです。私の「私はまだ手掛かりなしで完全に迷子になっています」を参照してください。上記のセクション。今私の理論は、ブートが非脂肪で非EFIの物によって上書きされたというものです。これは、以前はセクター0〜63にあったはずの単なるコードです。私は実験に取り組んでおり、それがどうなるかをあなたに知らせます。
Peter

Ubuntuを使用していますか?Ubuntuインストーラーがbios_grubパーティションを使用して正しくインストールできる方法はありますか?
Peter

@Peter私はUbuntuを使用しています。ガイド付きのパーティション分割を行う場合、インストーラーは正しくセットアップする必要があります。11.10インストーラーでそれが私のためにしたことを知っています。
ジェレミー

どうもありがとうございました。これが答えです。次に、より複雑な設定(ブート時のRAIDとLVM)を試してから、詳細を使用して回答を編集します。
Peter
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.