はじめに
DebianにNVIDIAドライバをインストールした後、PCを起動しようとすると Application failed, r = 1 というエラーが出てカーネルパニックを起こし、OSが立ち上がらなくなる現象に遭遇しました。
この記事では、この問題の根本原因である「巨大化しすぎた起動ファイル」のダイエット方法と、それに伴う「Bluetoothキーボードの無反応」や「GPU初期化の遅延」を防ぐための安定化設定についてまとめます。
起動エラーの原因と「initramfs」のダイエット
NVIDIAドライバなどを導入すると、OSの起動に必要なファイルをまとめた「初期起動イメージ(initrd.img)」が肥大化します。これがマザーボードの確保できるメモリ枠をオーバーすると、読み込みエラー(r = 1)が発生します。
これを解決するため、起動ファイルの作成ルールを「全部入り」から「必要なものだけ」に変更し、サイズを大幅に削ります。
# 設定ファイルを開く
sudo nano /etc/initramfs-tools/initramfs.conf
ファイル内の設定を以下のように書き換えます。
-
MODULES=mostをMODULES=depに変更 - (任意)
COMPRESSの項目をより強力なCOMPRESS=xzに変更
書き換えたら、以下のコマンドで起動ファイルを再構築します。
# 全てのバージョンのinitrd.imgを軽量な設定で上書き生成
sudo update-initramfs -u -k all
# ブートローダー(GRUB)に変更を認識させる
sudo update-grub
# サイズが小さくなったか確認(私の環境では約1/4に減少しました)
ls -lh /boot/initrd.img*
スリム化による副作用の懸念と「保険」の設定
MODULES=dep で極限まで削ったため、OSが「起動に必須ではない」と判断したデバイス(BluetoothなどのUSB通信系やGPUの一部)の読み込みが後回しにされ、不安定になることがあります。これを防ぐため、3つの「保険」をかけます。
1. Bluetoothの省電力機能(オートサスペンド)無効化
スリープ復帰時の無反応を防ぐため、USBの省電力機能をオフにします。
# GRUBの設定ファイルを開く
sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT の行の末尾に btusb.enable_autosuspend=0 を追記します。
(例:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash btusb.enable_autosuspend=0")
# 保存後、GRUBを更新して適用
sudo update-grub
2. GPUの「Persistence Mode」有効化
高負荷ツールを立ち上げる際の初期化モタつきを防ぐため、常に臨戦態勢(Persistence Mode)にしておきます。
# 永続化サービスを有効化し、即時起動
sudo systemctl enable --now nvidia-persistenced
3. 重要モジュールの「強制読み込み」指定
「BluetoothとNVIDIAのドライバだけは絶対に最初の段階で読み込め」と明示的に指定しておきます。
# 強制読み込みリストを開く
sudo nano /etc/initramfs-tools/modules
ファイルの一番下に以下の2行を追記して保存します。
btusb
nvidia
設定の最終反映と再起動
最後に、追記した「強制読み込みリスト」を反映させるため、もう一度起動ファイルを作り直します。
# お守り設定を含めた状態で再度スリム化&上書き
sudo update-initramfs -u -k all
完了したらPCを再起動し、エラーなく起動すること、Bluetoothキーボードが即座に反応することを確認します。
おわりに
「エラーを消すためにファイルを削る」という根本対応と、削りすぎたことによる副作用へのケアをセットで行うことで、安定した環境が構築できました。
NVIDIA環境特有の起動トラブルや、Bluetoothのもたつきに悩んでいる方の参考になれば幸いです。