KernelPanic!!
2019-02-27-18:01
今回は,ManjaroLinuxで発生したカーネルパニックを直す機会があったので,
そのことについて書いていきます.


僕が経験したカーネルパニックは,Not syncing No init foundでした.

直し方の結論から言うと,GRUBがアップデートに対応できなかったのが原因なので,GRUBからsystemd-bootに変更すれば直ります.
手順は以下に書いて置きます.
まず,システムを修理するためにchrootで中身をいじる準備をします.

--chrootの手順--

まず,インストールメディアを用意します.最初のインストールに使ったものがあればそれを使用してください.
ない場合は,インストールメディアの作成をします.


  --インストールメディアの作成手順--

まずは,osを手に入れます.Manjaro公式ページからダウンロードします.

次に,空のUSB(4GB以上であれば何でも良いです)を用意して, それにosを書き込みます.書き込むには専用のソフトウェアが必要です.
色々種類はあるのですが, 僕のオススメはシンプルなGUIで使いやすいetcherです.
     
USbに書き込めたら,インストールメディアの作成はそれで終了です.

  -----------------------------------------------------

次に,インストールメディアを起動します.方法はbootメニューでインストールメディアのUSBを選択するだけです.
bootメニューに入る方法はpcによって違いますが,Thikpadの場合は起動時F12です.

起動したら色々設定できる画面が出てくるので,キーボード配列をjpに変えてからbootなんちゃらを押してManjaroを起動します.
起動が終わってデスクトップが表示されたら,一度ログアウト(シャットダウンではない)をします.
ログアウトが終わったら,ユーザー名にroot,パスワードにmanjaroと入力してrootユーザーでログインします.
ログインできたら,いよいよターミナルでの作業に入ります.

まずは,/ ディレクトリとbootディレクトリの場所を探します.

$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 300M 0 part /boot/efi
├─nvme0n1p2 259:2 0 229.4G 0 part /
└─nvme0n1p3 259:3 0 8.8G 0 part [SWAP]

このように,lsblkコマンドを使えば各ディレクトリがどこかわかります.
今回,僕の場合は,/が "mvme0n1p2",bootが "mvme0n1p1"ですね.
これがわかったら,あとはコマンドを打っていくだけです.

$ mount /dev/ルートディレクトリの場所 /mnt

$ mount /dev/ブートディレクトリの場所 /mnt/boot

$ cd /mnt

$ mount -t proc proc proc/

$ mount --rbind /sys sys/

$ mount --rbind /dev dev/

$ chroot /mnt /bin/bash

これで,chrootの手順の説明は終了です.

-----------------------

これから,カーネルパニックの原因であるgrubからsystemd-bootへの切り替え作業を行います.
まずは,

$ bootclt install

を入力,実行します.すると,色々なファイルが作成されるので,作成されたloader.confの中身を編集していきます.

$ nano /boot/loader/loader.conf

最初,loader.confの中身はこんな感じになっています.(違う場合もありますが,どうせ書き換えるので特に問題ないです.)

#timeout 3
default 43l34jkl32j4lk32

それを,こう書き換えてください.

default manjaro
timeout 3

書き終えたら,"CtrlとC", "Y", "Enter"を順に押してファイルを保存しnanoを終了します.
次は,confを作ります.

$ touch /boot/loader/entries/manjaro.conf

作成が終わったら,編集する前に/ディレクトリのUUIDやlinuxのバージョンなどを確認します.
まずはUUIDから確認します.

$ fdisk -l -o +UUID
Disk /dev/nvme0n1: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Disk model: LENSE20256GMSP34MEAT2TA
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: C00C21BA-5E58-4BA6-94A0-D7246616916D

Device Start End Sectors Size Type UUID
/dev/nvme0n1p1 4096 618495 614400 300M EFI 0A159E14-E587-41F9-A0B0-607A5A3CA62A
/dev/nvme0n1p2 618496 481648510 481030015 229.4G Linu A18CF7F5-121F-4DAC-A332-0632FF0D18A9
/dev/nvme0n1p3 481648511 500103449 18454939 8.8G Linu BC4A17B5-F6E2-4DB7-BBC4-6393B76DCEF4

これの,/ディレクトリの場所のUUID(16進数の文字列)をメモしておきます.
次に,linuxのバージョンを確認します.

$ ls /boot
efi
intel-ucode.img
grub
linux419-x86_64.kver
initramfs-4.19-x86_64-fallback.img
memtest86+
initramfs-4.19-x86_64.img
vmlinuz-4.19-x86_64

このvmlinuzのハイフンの後ろの部分の文字列と,initramfs(-fallbackがついていない方)のハイフンの後ろの文字列をメモしておきます.
そうしたら,manjaro.confを編集していきます.

$ nano /boot/loader/entries/manjaro.conf

中身はこのようにしてください.

title Manjarolinux
linux /vmlinuz-先程のvmlinuzのハイフンの後ろの文字列
initrd /initramfs-先程のinitramfsのハイフンの後ろの文字列.img
options root=PARTUUID=先程のルートディレクトリの場所のUUID

書き終えたら,"CtrlとC", "Y", "Enter"を順に押してファイルを保存しnanoを終了します.
最後に,

$ pacman -Rcnsu grub

を実行して,grubからsystemd-bootへの移行作業は終了です.
その後,

$ exit

$ reboot now

を実行して画面が真っ暗になったらUSBを抜き,そのまま少し待てばOS選択画面がでてくるので,
Manjarolinuxを選択して正常に起動することが確認できたらカーネルパニックの修理は完了です.
お疲れ様です.拙い文章でしたが長い間お付き合いしていただき,ありがとうございました.



最後に

今回はMinfaoxくんに色々助けてもらいました.本当にありがとうございました.