はじめに
長くLinuxを使っていると様々な要因でLinuxが正常起動しなくなることがあります.
特にWindowsとLinuxをデュアルブートして使っている方には,そういった経験があるのではないでしょうか.
本記事では,普段自分がそういった場合に行っているルーチンを紹介します.
注意:本記事ではGrubを使っていることを仮定しています.
準備
まずはじめに,起動可能なLinux環境(USB,CD-ROMなど)を用意します.オススメはArch LinuxのインストールISO(archlinux-20xx.xx.xx-x86_64.iso)です.シェルを立ち上げられるものなら,これ以外でも大丈夫です.
Linuxインストール時と同様の手順で起動し,シェルを立ち上げます.
実践
普段使っているLinux環境へアクセスし,環境の修復を試みます.
修復準備をその1・その2で行い,その3で修復を試みます.
その1:ディスクを読み込む(mount)
まず,インストール済みのディスクを以下のコマンドで確認します.
以下は自分の環境での実行例です.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 513.1M 1 loop /run/archiso/sfs/airootfs
sda 8:0 0 111.8G 0 disk
├─sda1 8:1 0 512M 0 part
└─sda2 8:2 0 111.3G 0 part
sdb 8:16 0 465.8G 0 disk
├─sdb1 8:17 0 450M 0 part
├─sdb2 8:18 0 100M 0 part
├─sdb3 8:19 0 16M 0 part
├─sdb4 8:20 0 463.4G 0 part
├─sdb5 8:21 0 564M 0 part
├─sdb6 8:22 0 788M 0 part
└─sdb7 8:23 0 507M 0 part
... (中略)
sde 8:64 1 15.1G 0 disk
├─sde1 8:65 1 627M 0 part /run/archiso/bootmnt
└─sde2 8:66 1 64M 0 part
この例の場合,/dev/sda2がrootパーティーション,/dev/sda1がbootパーティーションです.また,/dev/sdbがWindowsのディスクです.この構成は環境によって異なります.
容量で見分けがつかない場合はlsblk -f
でフォーマット形式を確認しながら判断します.
次に,これらのパーティーションを読み込みます.
以下に例を示します.
$ mount /dev/sda2 /mnt
$ mount /dev/sda1 /mnt/boot
Arch Linux以外のLive環境を使っている場合は,加えて次のコマンドを実行します.
$ mount -t proc /proc /mnt/proc
$ mount --rbind /sys /mnt/sys
$ mount --rbind /dev /mnt/dev
その2:普段の環境へアクセスする(chroot)
環境の修復をするために,普段使っているLinux環境へアクセスします.
Arch Linux ISOを使用する場合
$ arch-chroot /mnt
それ以外の場合
$ chroot /mnt /bin/bash
その3:修復
この時点で普段使っているLinux環境に移っています.
ここからは原因によって内容が変わりますが,ここでは一番ありがちなGrubのトラブルに対する対処方法を紹介します.
以下のコマンドをその1が適切に行われていないときに実行すると状況が悪化する場合があるので心配な場合は詳しい人に聞いてください.
次のコマンドでGrubを再インストール・再設定します.
$ grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck
$ grub-mkconfig -o /boot/grub/grub.cfg
その4:再起動
chroot環境を抜けて再起動します.
再起動時にUSB(またはCD-ROM)を抜き取ります.
$ exit
$ reboot
大抵はこれで直ります.
これで直らない場合は,その3からググりながら頑張ります.
英語で出てきたエラー文を含めてググると対処法が見つかりやすいです.
まとめ
本記事ではLinuxが突然起動しなくなったときに自分が行うことについて紹介しました.
皆さんのトラブル解決の参考になりましたら幸いです.