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?

initramfsにNvidiaドライバモジュールが混入してブートに失敗

0
Last updated at Posted at 2026-04-03

経緯

2026年4月2日、sudo apt upgradeしてリブートをしたところ、ブート時にroot fsのマウントに失敗しブートできない旨が表示された。
P_20260402_203757.jpg

ホストを再起動してgrub画面に入り、過去のカーネルを選択したところ正常にブートすることに成功。
直前にパッケージアップデートを行ったときにinitramfsが正常に作成できなかったのではないかと疑い調査開始。
Nvidia製のGPUを搭載したラップトップであるため当初から特にNvidiaドライバが悪さをしているのではと疑っていた。

環境

ホスト名: YSPX-14IAH7
タイプ: ノートPC (Yoga Slim Pro X, Lenovo)
CPUモデル: 12th Gen Intel(R) Core(TM) i7-12700H (Pコア6, Eコア8, 20スレッド)
メモリ: 32GB
ローカルディスク: 2TB (購入時の1TBから独自に入れ替え済み)
OS: Linux (Ubuntu 24.04)
カーネル: 6.14.0-37-generic
GPU: GeForce RTX 3050 Mobile (4GB)

ホストに存在するカーネルとinitramfs(find /boot -maxdepth 1 -type f | grep -e vmlinuz -e initrd | sort実行結果)

/boot/initrd.img-6.11.0-29-generic
/boot/initrd.img-6.14.0-37-generic
/boot/initrd.img-6.17.0-14-generic
/boot/initrd.img-6.17.0-19-generic
/boot/initrd.img-6.8.0-52-generic
/boot/vmlinuz-6.11.0-29-generic
/boot/vmlinuz-6.14.0-37-generic
/boot/vmlinuz-6.17.0-14-generic
/boot/vmlinuz-6.17.0-19-generic
/boot/vmlinuz-6.8.0-52-generic

カーネルバージョン6.17.0-19-genericでの起動に失敗。
6.17.0.14-genericは試していないがおそらく失敗すると考え、
grub画面で6.14.0-37-genericを選択して起動に成功。

調査

2026年3月1日の記事でこんなものが。
Ubuntu24.04アップデート後カーネルパニック(6.17.0-14) - 対処法 #Linux - Qiita

こちらではVirtualBoxのビルドに失敗していたようで、あまり参考にならなさそうだと思いつつも、トラブルシューティングの流れについては参考になった。
zcat /var/log/apt/term.log.*を実行し、claudeに聞いたところ以下のような内容があった。

  • 2026年3月2日と3月7日に6.17.0-14のカーネル更新がなかったにもかかわらずinitramfsが生成されていた。
  • ls -lh /boot/initrd.img-* /boot/vmlinuz-*を実行したところ、他のinitramfsはサイズが80MB前後であるのに対して6.17.0-19のinitramfsは223Mと明らかに異常で、
    initramfsに不要なものが紛れ込んでいるか、生成途中で失敗して破損している可能性が高い。

sudo update-initramfs -u -k 6.17.0-19-genericを実行してinitramfsの再生成を実行してリブートしたが再び起動に失敗した。再生成の前後でもinitramfsのサイズに変化はなし。

lsinitramfsというコマンドでinitramfsの中に入っているものを見られるらしい。
lsinitramfs /boot/initrd.img-6.14.0-37-generic | grep -i nvidia(起動に成功している方)での出力結果は以下の通り。

usr/lib/modules/6.14.0-37-generic/kernel/drivers/hid/hid-nvidia-shield.ko.zst
usr/lib/modules/6.14.0-37-generic/kernel/drivers/net/ethernet/nvidia
usr/lib/modules/6.14.0-37-generic/kernel/drivers/net/ethernet/nvidia/forcedeth.ko.zst
usr/lib/modules/6.14.0-37-generic/kernel/drivers/usb/typec/altmodes/typec_nvidia.ko.zst
etc/modprobe.d/nvidia-graphics-drivers-kms.conf
usr/lib/modprobe.d/nvidia-graphics-drivers.conf
usr/lib/modprobe.d/nvidia-kms.conf
usr/lib/modprobe.d/nvidia-runtimepm.conf

lsinitramfs /boot/initrd.img-6.17.0-19-generic | grep -i nvidia(起動に失敗した方)では以下の通り。

usr/lib/modules/6.17.0-19-generic/kernel/drivers/hid/hid-nvidia-shield.ko.zst
usr/lib/modules/6.17.0-19-generic/kernel/drivers/net/ethernet/nvidia
usr/lib/modules/6.17.0-19-generic/kernel/drivers/net/ethernet/nvidia/forcedeth.ko.zst
usr/lib/modules/6.17.0-19-generic/kernel/drivers/usb/typec/altmodes/typec_nvidia.ko.zst
etc/modprobe.d/nvidia-graphics-drivers-kms.conf
usr/lib/firmware/nvidia
usr/lib/firmware/nvidia/570.211.01
usr/lib/firmware/nvidia/570.211.01/gsp_ga10x.bin
usr/lib/firmware/nvidia/570.211.01/gsp_tu10x.bin
usr/lib/modprobe.d/nvidia-graphics-drivers.conf
usr/lib/modprobe.d/nvidia-kms.conf
usr/lib/modprobe.d/nvidia-runtimepm.conf
usr/lib/modules/6.17.0-19-generic/updates/dkms/nvidia-drm.ko
usr/lib/modules/6.17.0-19-generic/updates/dkms/nvidia-modeset.ko
usr/lib/modules/6.17.0-19-generic/updates/dkms/nvidia-peermem.ko
usr/lib/modules/6.17.0-19-generic/updates/dkms/nvidia-uvm.ko
usr/lib/modules/6.17.0-19-generic/updates/dkms/nvidia.ko

正常に起動できている方ではNvidiaのDKMSモジュールがinitramfsに含まれていない。
Nvidiaドライバは本来initramfsに入れる必要がなく、systemdが起動した後にロードされるべきものである。initramfs内で.ko(非圧縮)として取り込まれ、ブート早期に誤ってロードされようとして失敗し、その副作用で NVMe の認識に支障が出た可能性があるとのこと。

claudeから以下のファイルをcatやgrepで調べるよう指示が出る。

  • /etc/modprobe.d/nvidia-graphics-drivers-kms.conf
  • /etc/initramfs-tools/modules
  • /etc/initramfs-tools/initramfs.conf
    grep -r "MODULES" /etc/initramfs-tools/initramfs.confを実行したところ、以下のようにマッチ。
# MODULES: [ most | netboot | dep | list ]
MODULES=most

man initramfs.confでは以下のように記載されている。

MODULES
      Specifies the modules for the initramfs image.

      Modules listed in /etc/initramfs-tools/modules and /usr/share/initramfs-tools/modules.d/* are always included in the initramfs, and are loaded early in the boot process.

      list doesn't load any additional modules at boot time, other than those listed in the above files.

      most adds most file system, all ata, sata, scsi and usb drivers.

      dep tries to guess which modules are necessary for the running box and only adds those modules.

      netboot adds the base and network modules, but skips block devices.

      The default setting is most.

mostを指定すると必要そうなドライバを広く含める、という動作になる。
sudo sed -i 's/^MODULES=most/MODULES=dep/depに書き換えて、sudo update-initramfs -u -k 6.17.0-19-genericを実行してinitramfsを再生成したが、依然として175Mとサイズは大きいまま。
lsinitramfs /boot/initrd.img-6.17.0-19-generic | grep -i "dkms/nvidia"の出力結果は以下の通りで、Nvidiaモジュールも残ったまま。

usr/lib/modules/6.17.0-19-generic/updates/dkms/nvidia-drm.ko
usr/lib/modules/6.17.0-19-generic/updates/dkms/nvidia-modeset.ko
usr/lib/modules/6.17.0-19-generic/updates/dkms/nvidia-peermem.ko
usr/lib/modules/6.17.0-19-generic/updates/dkms/nvidia-uvm.ko
usr/lib/modules/6.17.0-19-generic/updates/dkms/nvidia.ko

以下のファイル、ディレクトリ配下のファイルを調べるように言われる。

  • /etc/modprobe.d/dkms.conf
  • /boot/initrd.img-6.17.0-19-generic (lsinitramfsで)
  • /usr/share/initramfs-tools/hooks/ 配下 (特に/usr/share/initramfs-tools/hooks/nvidia)
  • /etc/initramfs-tools/hooks/ 配下

ls /usr/share/initramfs-tools/hooks/ | grep -i nvを実行したところ、framebuffer-nvidiaがマッチ。cat /usr/share/initramfs-tools/hooks/framebuffer-nvidiaで中身を調べたところ以下の通り。

#!/bin/sh

OPTION=FRAMEBUFFER
PREREQ=""

prereqs()
{
        echo "$PREREQ"
}

case $1 in
# get pre-requisites
prereqs)
        prereqs
        exit 0
        ;;
esac

. /usr/share/initramfs-tools/hook-functions


# Copy entire subtrees to the initramfs as long as they match a pattern
copy_modules_dir_filter()
{
    local kmod exclude
    local dir="$1"
    shift
    local pattern="$1"
    shift

    if ! [ -d "${MODULESDIR}/${dir}" ]; then
        return;
    fi
    if [ "${verbose}" = "y" ]; then
        echo "Copying module directory ${dir}"
        if [ $# -ge 1 ]; then
            echo "(excluding $*)"
        fi
    fi
    while [ $# -ge 1 ]; do
        exclude="${exclude:-} -name $1 -prune -o "
        shift
    done
    for kmod in $(find "${MODULESDIR}/${dir}" ${exclude:-} -name "$pattern*.ko" -print); do
        manual_add_modules $(basename ${kmod} .ko)
    done
}

copy_modules_dir_filter updates/dkms nvidia

このフックスクリプトの最終行が犯人のようで、updates/dkms/ディレクトリ内のnvidiaで始まる全モジュールをinitramfsにコピーする処理になっている。MODULES=depに変更してもこのフックが明示的に追加するため除外できなかったようである。

対処

sudo chmod -x /usr/share/initramfs-tools/hooks/framebuffer-nvidiaでフックを無効化した。削除するよりも安全なため実行権限だけ外すのが良いとのこと。
このあとsudo update-initramfs -u -k 6.17.0-19-genericを実行してinitramfsを再生成した。
lsinitramfs /boot/initrd.img-6.17.0-19-generic | grep -i "dkms/nvidia"で確認したところinitramfsでは何もマッチせず。
ls -lh /boot/initrd.img-6.17.0-19-generic でサイズを確認したところ33Mと正常なinitramfsと比べてもかなり小さめのサイズになった。これは/etc/initramfs-tools/initramfs.confMODULES=depに変更したままであるため。
この状態でシステムを再起動したところ、無事にブート成功。uname -rでも6.17.0-19-genericと表示された。MODULES=mostに直して再度initramfsを生成したところ81Mと正常な範囲に収まりブートにも成功した。

このフックスクリプトはdpkg -S /usr/share/initramfs-tools/hooks/framebuffer-nvidiaでどのパッケージから提供されているのか調べたところ、nvidia-kernel-common-570から提供されていることがわかった。
Nvidiaドライバの更新が行われるとDKMSの再ビルドが生じ、同様の問題が生じる可能性がある。
パッケージのバグまたはカーネルとの相性問題としてバグトラッカーに報告する価値があるとのこと。
ubuntu-bug nvidia-kernel-common-570を実行してlaunchpadで報告済み。

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?