--- title: "カーネルアップデート失敗からの復帰" date: 2021-01-20T10:55:17+09:00 draft: false tags: ["tech","diary"] --- 本日午前8時頃。いつものように淹れたてのコーヒーを片手に意気揚々とArch Linuxを立ち上げようとしたが、エラーにより起動しなかった。画面上には`Faild to open file: initramfs-linux-zen.img`の文字。対象となっているファイルの名称からブート関連の障害と推定される。 そういえば、昨日行ったアップデートにカーネルの更新が含まれていたような気がする。恐らくこの過程でなんらかの問題が生じたのだろう。 本記事では日記を兼ねて復帰までの手順を簡単に記す。 ## 1.レスキューUSBドライブから起動 聞いた話ではクラウドストレージやスマートフォンの普及が原因で、PCユーザであってもUSBメモリを一つも持っていない人が今や珍しくないらしい。一昔前はいざとなればコンビニに行けば手に入ったが、最近はこの風潮のせいか取り扱わない店舗も増えてきている。 問題が発生した後にネットで注文していては遅いのでUSBメモリは**絶対に**用意しておこう。レスキューUSBドライブの作成方法は面倒なので割愛する。Arch LinuxユーザであればそれのインストールUSBドライブをレスキュー用として使うとより効率的だ。 ## 2.ファイルの修正 さっそく修正対象のデバイスをマウントする。なお、デバイス名は当方の環境のものなので各自対応されたし。 ```shell $ mount /dev/sdb2 /mnt $ mount /dev/sdb1 /mnt/boot #注意:このマウントの順番には意味がある。EFIパーティションはrootパーティションの後にマウントしないと正しく認識されない。また、/mnt/bootは予め作成する必要がある。 $ arch-chroot /mnt ``` bootディレクトリでlsコマンドを打ったところ、当初のエラーが示すとおり`initramfs-linux-zen.img`が存在していないことが判った。これは起動に必須のファイル(初期RAMディスク)なので無ければ起動できない。通常、カーネルアップデートの際にこのファイルは自動生成されるが、昨日はなんらかの問題でその処理が正常に行われなかったのだろう。以下のコマンドで改めて手動生成する。 ```shell $ mkinitcpio -p linux-zen $ mkinitcpio -p linux #ZENカーネル環境以外 ``` ほどなくして再生成が完了し、対象のディレクトリに必要なファイルが配置された。 思いのほか楽勝だったなと鼻歌を口ずさみながらデバイスをアンマウントして再起動をかけると、今度はGUIが立ち上がらない。ここで僕はこの種のファイルをいじった時にはnVidiaドライバの更新も必要になることを思い出した。nVidia製以外のグラフィックスカードを使っている場合、下記の作業は不要と思われる。 ## 3.nVidiaドライバの更新(Optional) ```shell #一旦、nVidia関連のパッケージを完全に削除する。僕の環境ではZENカーネルを使用しているので名称に多少の違いがある。 $ pacman -Rsn nvidia-dkms $ rm -r /var/lib/dkms/nvidia $ pacman -S nvidia-dmks ``` 再び再起動するとSDDMの美しいログイン画面が映し出され、当該の問題は解決した。先ほどラップトップの方にも同様のカーネルアップデートを適用したが、そちらではこの問題は発生しなかった。 結局、初期RAMディスクが自動生成されなかった理由は未だ不明であるものの、対処の難易度はそう高くないことが解ったのでとりあえず良しとする。