PR
日記

日記2026/5/16 ラズパイOSをカーネルをアップデートしたら起動しなくなった

アイキャッチ日記2-Linux 日記
記事内に広告が含まれています。
スポンサーリンク

問題発生

本サイトを運用しているRaspberry Pi 5(以下ラズパイ)で、

Bash
sudo apt update && sudo apt upgrade -y

でアップデートしたところ、カーネルのアップデートも含まれていたのですが、これが原因で起動できなくなりました。

環境としては、

  • Raspberry Pi 5 8GB
  • seed studiaのPCIe to dual M.2 hat for Raspberry Pi 5
  • M.2 SSD Samsung 980 と Netac NVMe SSDのRAID1

以下でRAID1から起動できるようにしています

復旧しようといろいろ試みましたが、結局はバックアップしてあった/boot/firmware に戻す結果になりました。(実際は旧カーネルバージョンで起動していた時にバックアップしてあったmicroSDカードに変えて起動)

スポンサーリンク

原因

GoogleのAIモードで質問したところ、

  1. PCIe パケットスイッチ配下の「デバイス列挙(Enumeration)バグ」
    カーネル 6.18 以降、PCIe コアドライバおよび初期化シーケンスのコードが刷新されました。これにより、1本の PCIe バスを複数に分岐させるスイッチチップ(Seeed の ASM1182e などのパケットスイッチ)の配下にあるデバイスを、起動初期(initramfs 段階)の限られた時間内に2台とも正しく認識(スキャン)しきれないバグが混入しています。
    1台目の SSD が認識された数ミリ秒〜数秒後に2台目が遅れて認識されるため、mdadm(RAID1)が「相方が見つからない」と判断し、タイムアウトして起動エラー(initramfs シェルへの脱落)になります。
  2. NVMe 電源管理(ASPM)のデグレードバグ
    GitHub の公式リポジトリ等での議論によると、カーネル 6.18.29 での PCIe 省電力(ASPM)制御の変更に伴い、「起動時や高負荷時に、NVMe ドライブの電源状態を正しく移行できない(D3hot ➔ D0 への復帰失敗)」という致命的なエラー(unable to change power state)が発生することが確認されました。これにより、ハードウェア的には正常でも、ソフトウェア側でランダムにドライブが切断されたり、初期認識に失敗する現象が多発しています。
  3. EEPROM(ブートローダー)との互換性
    問題最新カーネル 6.18.29 の PCIe 初期化ロジックは、ラズパイ 5 の EEPROM(ブートローダーファームウェア)のバージョンに強く依存していることが判明しました。EEPROM が古いバージョンのままカーネルだけを 6.18 にアップデートした場合、初期の PCIe リンクアップ自体に失敗して NVMe から一切ブートできなくなるケースも追加で報告されています。

    だそうです。修正をまつしかなさそうです。

    カーネルバージョン
    ×:6.18.29
    〇:6.12.75

    スポンサーリンク

    対策

    apt-markでのホールド

    Raspberry Piの公式GitHubにも挙がっており、修正を待つしかなさそうなので、カーネルとrpi-eepromのアップデートはロックしておきます。

    カーネルアップデートをロック
    sudo apt-mark hold linux-image-rpi-2712 linux-headers-rpi-2712 raspi-firmware
    sudo apt-mark hold linux-image-rpi-v8 linux-headers-rpi-v8 rpi-eeprom
    

    追加対策「APTピン留め」

    apt-markでホールドしたあったのにも関わらず、ある日

    Bash
    sudo apt update && sudo apt upgrade -y

    で、カーネルがアップデートされてしまい、起動できなくなってしまいました。
    再び、バックアップしてあった/boot/firmware に戻して起動し、以下の追加対策を行いました。

    設定ファイルを/etc/apt/preferences.d/block-kernel を作成
    sudo nano /etc/apt/preferences.d/block-kernel
    

    以下をはり付けます。(ここでは、カーネル6.18系、6.19系まで対象とします)

    /etc/apt/preferences.d/block-kernel の内容
    Package: linux-image-* linux-headers-* raspi-firmware rpi-eeprom
    Pin: version 6.18.*
    Pin-Priority: -1
    
    Package: linux-image-* linux-headers-* raspi-firmware rpi-eeprom
    Pin: version 6.19.*
    Pin-Priority: -1
    
    スポンサーリンク

    将来カーネルアップデートしたくなった場合

    上でやったロックを解除します

    /etc/apt/preferences.d/block-kernel を削除

    設定ファイルを/etc/apt/preferences.d/block-kernel を削除
    sudo rm /etc/apt/preferences.d/block-kernel
    

    apt-markでのホールド解除

    カーネルアップデートをロック
    sudo apt-mark unhold linux-image-rpi-2712 linux-headers-rpi-2712 raspi-firmware
    sudo apt-mark unhold linux-image-rpi-v8 linux-headers-rpi-v8 rpi-eeprom
    

    アップデート(アップグレード)

    Bash
    sudo apt update && sudo apt upgrade -y

    コメント

    タイトルとURLをコピーしました