パーティションレス Btrfs が突然 GRUB レスキューを起動する

パーティションレス Btrfs が突然 GRUB レスキューを起動する

問題

私は 8 ディスクの Btrfs RAID10 ボリュームから Arch Linux を起動するマシンを持っています。最近、再起動すると、次の GRUB レスキュー プロンプトが表示されました。

GRUB へようこそ! エラー: そのようなデバイスはありません: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX。 エラー: 不明なファイルシステムです。レスキュー モードに入ります... grub rescue> ls (hd0) (hd1) (hd2) (hd3) (hd4) (hd5) grub rescue> ls (hd5) (hd5): ファイルシステムが不明です。 grub rescue> ls (hd4) (hd4): ファイルシステムが不明です。 grub rescue> insmod btrfs grub rescue> ls (hd0) (hd0): ファイルシステムが不明です。 grub rescue>

何が原因なのか正確にはわかりません。前回の起動以降、pacman -Syu少なくとも 2 回はアップデート ( ) をインストールし、GRUB の再インストールなど、システムに他の変更を加えた可能性があります。専用のブートディスクを追加すればシステムを起動できます。

その理論

#archlinux IRCチャンネルの親切なメンバーと一緒にトラブルシューティングをしているときに、Arch wikiのこのメモ:

パーティションオフセット

オフセットの問題は、パーティション化されたディスクに core.img を埋め込もうとしたときに発生する可能性があります。つまり、パーティションのないディスク (/dev/sdX など) 上の Btrfs プールに grub の core.img を直接埋め込むことは問題ありません。GRUB は Btrfs パーティションを起動できますが、モジュールは他のファイル システムよりも大きくなる可能性があります。また、grub-install によって作成された core.img ファイルは、MBR と最初のパーティション間のドライブの最初の 63 セクター (31.5KiB) に収まらない可能性があります。fdisk や gdisk などの最新のパーティション ツールは、最初のパーティションを約 1MiB または 2MiB オフセットすることでこの問題を回避します。

これは、パーティション化されたシステムにGRUBをインストールすると問題が発生する可能性があることを示唆しているようです。そしてパーティションのないディスク。新しいパーティション ツールでは、ディスクの先頭に余分な領域を残すことで (現時点では) この問題を軽減しています。

GRUB wikiページはより直接的です:

パーティションまたはパーティションなしのディスクにインストールする

警告:グラブ強くお勧めしませんGRUB LegacyやSyslinuxのようにパーティションブートセクターまたはパーティションレスディスクにインストールします。この設定は、特に更新中に破損する傾向があり、サポートされていませんArch 開発者による。

まあ、残念だ。

ちなみに、grub-install -v出力には次の行が含まれます:

grub-install: info: the total module size is 0xa07c.

これは約 41K で、上記の 31.5KiB の制限を大幅に超えていますが、GRUB を十分に理解していないため、これが問題の原因であると確信できません。

質問

  1. もしこれが問題は、それをどのように証明できるか、そして、grub-installもしそうなら、なぜ大声で失敗しないのかということです。

  2. 今後、起動可能な Btrfs ディスクをフォーマットする正しい方法は何でしょうか? MBR ですか? GPT ですか? — 専用のブート ディスクは魅力的ですが、ボリューム内のすべてのデバイスに冗長ブートローダーがある方がよいと思います。

  3. 各ディスクを消去して実行するよりも、各ディスクをパーティション テーブルに移行するより良い方法はありますかbtrfs replace?

答え1

昔、たとえば fdisk を使用して MBR パーティション テーブルを作成すると、デフォルトでは最初の 63 セクターはそのまま残されていました。そこに GRUB やその他のブートローダーをインストールできます。

現代に目を向けると、同じツール (fdisk) でさらに多くの未使用領域が残ります。これは、GRUB2 が BTRFS サポート付きのステージ 1 をインストールするのに十分な量です。オフセットはデフォルトで約 1 MB であると思います。これはセクター単位で何にでも相当します。

grub-installなぜ失敗しないのかは分かりませんが、ブートセクターのサイズをチェックしていないのだと思います。パーティションがなければ、どうやってそれができるのでしょうか。

冗長ブートローダを持つことに問題はないと思います。手動で管理する必要がありますが、GRUB2 のステージ 1 は頻繁に変更されません。ただし、パーティションが必要になります。

ディスクを移行してパーティション テーブルを追加できるツールは知りません。問題は、ファイル システムがディスク上のセクターに結び付けられており、パーティション テーブルを追加するとそれらのセクターが変更されることです。BTRFS ファイル システムが LVM 上にある場合は、ファイル システムが「仮想セクター」に結び付けられるため、確かに移動できます。そうすべきだと言っているのではなく、問題が何であるかを説明しているだけです。

関連情報