0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Linuxの起動に毎回30秒待たされた話

0
Last updated at Posted at 2024-07-12

きっかけ

古いPCを再利用して運用しているUbuntu Serverが、起動時に毎回GRUBの選択画面で30秒待たされるので、解決するために調査をした。

原因

GRUBにはrecordfailという機能がある。

起動時にGRUBがgrubenvにrecordfail=1を設定、
正常に起動するとgrub-common.serviceがgrubenvからrecordfailを削除する。

次回起動時にrecordfailが無ければGRUBの選択画面をスキップしすぐに起動、
recordfail=1の場合はgrub-common.serviceが削除していない=起動に失敗と判断し、選択画面が表示され、リカバリモードなどに入りやすくなる。

しかし、recordfailはブート時にgrubenvへの書き込みが必要なため、環境によっては動作しない。
今回の問題は、recordfailが動作しない環境だったのが原因だった。

詳細

/boot/grubが

  1. diskfilter | lvmに置かれている
  2. btrfs | cpiofs | newc | odc | romfs | squash4 | tarfs | zfsに置かれている

上記いずれかに該当する場合、recordfailが動作しない。
これに加えて、efiでインストールされている場合、GRUB_RECORDFAIL_TIMEOUTが使用され、選択画面がこの時間表示される。
GRUB_RECORDFAIL_TIMEOUTのデフォルト値は30秒。

解決方法

1. recordfailが動作するようにインストールし直す

これが一番良い解決方法だが、OSインストールからやり直す必要があるため、新規インストールの際に気を付けるのが良い。
/bootを分割し、ext4でフォーマットすると良さそう。

2. GRUB_RECORDFAIL_TIMEOUTを短くする

OSの再インストールをせずに解決できるので、既存のシステムで発覚した場合、この方法が安全。
/etc/default/grubにGRUB_RECORDFAIL_TIMEOUTを設定し、grub.cfgを更新するだけで良い。

3. grubenvに嘘の値を設定する (非推奨)

ファイルシステム等が上記のリストに一致しても、efiでなければ30秒の待ち時間は発生しない。
そのため、grubenvにgrub_platform=xなど、efi以外の値を設定し騙すことで選択画面をスキップできる。
ただし、この方法は他の場所でefi用に書かれたものも動かなくなるので、不具合が生じる可能性がある。
そのためこの方法は非推奨とする。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?