なんかかきたい

プログラミングなどの個人的なメモやサークル「ゆきいろパラソル」の情報を載せてます

Ubuntu 20.04 の /boot に使っているパーティションでext4拡張を有効にすると grub でブートできなくなる

Ubuntu 20.04 の /boot に使っているパーティションext4拡張を有効にすると grub でブートできなくなる

辛いけどこれが現実なのよね。

今回は grub rescue: unknown file system になってしまったのでご報告と復旧方法の共有です。

ソース

Debian Bug report logs - #866603 grub-common: enabling metadata_csum_seed feature on ext4 renders system unbootable

bugs.debian.org

grub2 doesn't recognize ext4 with metadata_csum_seed enabled

bugs.launchpad.net

補足

上記のページでは metadata_csum_seed に触れられていますが、launchpad ではもう少し詳しく以下のオプションを有効にすると grub が boot パーティションを認識しなくなるとあります。

  • metadata_csum_seed
  • ea_inode
  • large_dir
  • casefold

先日この問題にハマり、再起動後に grub rescue が起動して unknown file system となり、 ブートできずに焦ったので同じ状態になった人向けにまとめます

元に戻す方法はない

あなたが tune2fs を使って上記のオプションを有効にした場合、なんと元に戻す方法はありません。

EXT4-fs warning (device nvme1n1): ext4_dx_add_entry:XXX: Large directory feature is not enabled on this filesystem
EXT4-fs warning (device nvme1n1): ext4_dx_add_entry:XXX: Directory (ino: XXX) index full, reach max htree level :2

このようなログが出た場合に安易に large_dir を有効にするのは絶対にやめましょう。

man7.org

large_dir Increase the limit on the number of files per directory. Tune2fs currently only supports setting this file system feature.

large_dir は設定すると元に戻せません。

ワークアラウンド

あなたがディスクに詳しいのであれば、別のディスクに /boot を確保し、そちらからブートするのが手っ取り早い解決法です。 拡張ext4grubが認識できないため、vmlinuzinitrd に切り替えられないためにブートできないので、 別のパーティション/boot を新たに用意すれば起動できるようになります。(今の /boot は捨てる)

もし既存のディスクに空きがあるのであれば、gparted LiveCDなどでパーティションを後ろに新たに切ります。 /boot が入れば十分ですので、サイズは小さくて構いません。200MB程度もあれば十分でしょう。 拡張パーティションは利用できないので、プライマリパーティションで確保する必要があります。

gparted LiveCDを使えるのであれば、そのまま /boot を新たな /boot パーティションにコピーして、 ブートローダーも一緒にインストールすると良いでしょう。

パーティションへのブートローダーのインストールは chroot を使うと簡単に実現できます。

例えば以下のページのようにするとよいでしょう。

chroot環境下でホスト側のデバイス/devなどを使う。

takuya-1st.hatenablog.jp

終わりに

よく知らずにコマンドを打つと思わぬ罠に時間差で引っ掛かることがあるので要注意ですね。

large_dir を有効にする場合は、データディスク用に切ったパーティションに限定するのがよいでしょう。

そもそも、large_dir などの拡張オプションを使うのではなく、xfsなどのファイルシステムを使うか、 large_dir が必要なケース = 1ディレクトリに大量のファイルを置かないようにする、というのがそもそもよいでしょう。

幸いにも起きた問題に対して短時間で解決できましたが、ブートについてある程度の知識がないと普通は壊れたと思って諦めるでしょう。

おまけ

この半年で最も衝撃を受けた映画「劇場版 少女☆歌劇 レヴュースタァライト」をまだみていない方がいたらぜひみてください。

cinema.revuestarlight.com

12月にBDが発売されるので何卒よろしくお願いします。