Linux起動問題の診断と解決:ステップバイステップガイド
ファームウェア、GRUB、カーネルパラメータ、ファイルシステム、initramfs、ログ、レスキューメディアを確認して、Linuxの起動障害を回復します。
Linux起動問題の診断と解決:ステップバイステップガイド
Linuxシステムは一般的に堅牢ですが、起動障害が発生すると重要な操作が停止する可能性があります。ブートプロセスを理解し、体系的なトラブルシューティング手順を知ることは、システム管理者にとって不可欠なスキルです。このガイドでは、ハードウェアチェックからブートローダーやカーネルステージの詳細な調査まで、Linux起動障害の根本原因を診断するための構造化されたアプローチを提供します。
起動問題を正常に解決するには、忍耐と系統的な調査が必要です。Linuxブートシーケンスの典型的なフェーズをカバーし、障害が一般的に発生する場所を特定し、システムを回復するために必要な実践的な手順とコマンドを詳しく説明します。
Linuxブートシーケンスの理解
トラブルシューティングを行う前に、何が起こるべきかを理解することが重要です。Linuxのブートプロセスは順序立てて行われ、どのステップで失敗してもシステムはログインプロンプトに到達できません。主要な段階は次のとおりです。
- BIOS/UEFI初期化: ハードウェアPOST(Power-On Self-Test)。
- ブートローダーステージ(例:GRUB): カーネルと初期RAMディスク(initrd/initramfs)をロードします。
- カーネル初期化: カーネルが起動し、ルートファイルシステムをマウントし、必須ドライバーを初期化します。
- Initシステムステージ(例:systemd、SysVinit): ユーザースペースプロセスが開始され、ログインプロンプトに至る最終段階。
ほとんどの起動障害は、ステージ2、3、または4で発生します。
フェーズ1:初期診断(ブートローダー前)
システムがGRUBメニューにすら到達しない場合、問題はハードウェア関連またはファームウェアレベルである可能性が高いです。
ハードウェアチェック
- 電源と周辺機器: 電源が安定しており、不要な周辺機器が接続されていないことを確認します。故障したハードドライブや不良RAMは、起動障害として現れることがあります。
- BIOS/UEFI設定: 正しいブートデバイスがプライマリとして選択されていることを確認します。最近ハードウェアを変更した場合は、ファームウェアがドライブを認識していることを確認します。
ブートメッセージの検査(部分的に表示される場合)
ハードフリーズや再起動の前に短いメッセージが表示された場合は、それらを書き留めてください。ディスクコントローラーやメモリ割り当てに関連するエラーを探します。
フェーズ2:ブートローダー(GRUB/LILO)のトラブルシューティング
GRUBメニューが表示されるが、エントリを選択すると失敗する(例:カーネルパニックやハングアップ)場合、ブートローダーの設定またはカーネル/initrdイメージが破損している可能性があります。
GRUBメニューへのアクセス
起動時に、Shift(BIOSシステムの場合)またはEsc(UEFIシステムの場合)を繰り返し押して、GRUBメニューが表示されるようにします。表示されない場合は、ブートセクターまたはUEFIエントリを修復する必要があるかもしれません(以下の回復で説明)。
GRUBエントリの編集
メニューが表示されたら、目的のカーネルエントリを強調表示し、eを押して編集します。これにより、永続的な損傷を与えることなく一時的に変更できます。
確認すべき主要パラメータ:
linuxまたはlinuxefi行: カーネルイメージ(vmlinuz-*)へのパスを確認します。root=パラメータ: これがルートファイルシステムパーティション(例:root=/dev/sda2)を正しく指していることを確認します。UUIDを使用する場合は、それらが正しいことを確認します。
シングルユーザーモード(リカバリモード)での起動
多くのスタートアップサービスをスキップして最小限のシェル環境に入るには、次のディレクティブをカーネル行の最後に追加します。
init=/bin/bash
# または
single
# または(systemdシステムの場合)
systemd.unit=rescue.target
システムがルートシェルプロンプト(#)で起動した場合、カーネルは正常にロードされており、問題はサービス起動シーケンスまたはファイルシステムの整合性にあります。
フェーズ3:ファイルシステムとカーネルの問題
シェルに正常にドロップした場合(またはシステムがinitramfsステージでハングアップした場合)、焦点はルートファイルシステムの整合性または欠落しているモジュールに移ります。
ファイルシステムの整合性チェック
システムが早期にハングアップする場合、多くの場合、破損が原因でルートファイルシステムをマウントできない可能性があります。パーティションを読み取り/書き込みでマウントできない可能性が高いため、リカバリ環境(Live CD/USBやシングルユーザーモードシェルなど)を使用する必要があります。
破損したパーティション(例:/dev/sda2)でファイルシステムチェック(FSCK)を実行します。
# リカバリ環境にいて、パーティションがマウントされていないと仮定
fsck -f /dev/sda2
パーティションがマウントされている場合(例:シングルユーザーモード)、最初に読み取り専用で再マウントするか、外部メディアから起動する必要があるかもしれません。
Initramfsの欠落または破損
initramfs(初期RAMファイルシステム)には、実際のルートファイルシステムをマウントするために必要なドライバーが含まれています。これが破損していると、システムは早期にハングアップします。
解決策: 動作環境(Live CDまたはレスキューシェル)からinitramfsを再構築します。
ルートパーティションが/mntにマウントされていると仮定します。
# インストールされたシステムにchroot
for i in /dev /dev/pts /proc /sys /run; do sudo mount --bind $i /mnt$i; done
chroot /mnt
# 現在のカーネルバージョンのinitramfsを再構築
update-initramfs -u -k all
# または(RHEL/CentOSシステムの場合)
dracut -f
exit
# アンマウントして再起動
フェーズ4:ライブ環境を使用したリカバリ
シングルユーザーモードにまったく到達できない場合、最も信頼性の高いリカバリ方法は、Live Linux USB/CD(例:Ubuntu Live、CentOS Rescue Image)から起動することです。
ステップ1:ライブ環境への起動
外部メディアを使用してシステムを起動し、コマンドラインにアクセスできることを確認します。
ステップ2:システムパーティションのマウント
ルートパーティションを特定します(lsblkまたはfdisk -lを使用)。一時的な場所(例:/mnt/rescue)にマウントします。
# 例:ルートが/dev/sda2の場合
mkdir /mnt/rescue
mount /dev/sda2 /mnt/rescue
別の/bootパーティションがある場合は、それもマウントします。
mount /dev/sda1 /mnt/rescue/boot
ステップ3:Chrootと修復
chrootを使用して、シェルのルートディレクトリをインストールされたシステムに切り替えます。これにより、システムのネイティブツールを実行できます。
# 必須のシステムディレクトリをバインド
for dir in dev proc sys run; do mount --bind /$dir /mnt/rescue/$dir; done
# システムの環境に入る
chroot /mnt/rescue
chroot環境(#)内に入ると、修復コマンドを実行できます。
- ログの確認:
journalctl -xb(systemdが利用可能な場合)。 - GRUBの再インストール/更新: これにより、ブートセクターの問題が修正されます。
grub-install /dev/sda update-grub # または grub2-mkconfig -o /boot/grub2/grub.cfg - Initramfsの再構築(上記参照):
update-initramfs -u -k all
ステップ4:クリーンアップと再起動
chrootを終了し(exit)、すべてのパーティションをアンマウントし、Liveメディアなしで再起動します。
ベストプラクティス: Live環境を使用している場合でも、主要な修復を試みる前に、重要な設定ファイル(
/etc/fstab、/boot/grub/grub.cfg)を常にバックアップしてください。
一般的なエラー表示
| 症状 | 考えられる原因 | 推奨されるアクション |
|---|---|---|
| すぐにブラックスクリーン、GRUBメニューなし | ハードウェア障害、BIOS/UEFI設定、MBR/EFIパーティションのGRUB破損 | ハードウェア接続を確認し、Live CDを使用してGRUB修復を試みる。 |
| GRUBメニューエントリ表示後にハングアップ | 誤ったカーネルパラメータ、破損したinitrd |
GRUBエントリを編集(e)してroot=を変更するか、singleを追加する。 |
initramfsプロンプトにドロップ |
ファイルシステムドライバーの欠落、ファイルシステムの破損 | システムをマウントした後、fsckを実行するか、initramfsを再構築する。 |
| 起動するがサービスが開始しない | /etc/fstabの問題またはサービス障害 |
rescue.targetで起動し、ログを確認する(journalctl)。 |
下から上に向かって作業します:ファームウェア、ブートローダー、カーネル、ファイルシステム、そしてサービス。この順序により、実際の問題が不良な/etc/fstab行や修復が必要なファイルシステムである場合に、GRUBを再構築することを防げます。