Linuxブートプロセスの基本ガイド

Linux PCを起動するたびに、最終的にログイン画面が表示され、ユーザー名またはパスワードの入力を促しますが、その前に一連の段階を経ます。一般的な起動プロセスでは、すべてのLinuxディストリビューションが4つの異なる段階を経ます。

User Login Prompt

このガイドでは、Linux OSが電源を入れてからログインするまでのさまざまな手順について説明します。このガイドでは、現在ほとんどのモダンLinuxディストリビューションで使用されているGRUB2ブートローダーとsystemdイニシャライザーのみを考慮しています。

起動プロセスは次の4つのステップで行われ、以下で詳細に説明します:

  • BIOSインテグリティチェック(POST)
  • ブートローダー(GRUB2)のロード
  • カーネルの初期化
  • すべてのプロセスの親であるsystemdの開始

1. BIOSインテグリティチェック(POST)

通常、起動プロセスはユーザーが電源ボタンを押すか(PCがすでにシャットダウンされている場合)またはGUIまたはコマンドラインでシステムを再起動すると初期化されます。

Linuxシステムが起動すると、BIOSBasic Input Output System)が起動し、Power On Self TestPOST)を実行します。これは、さまざまな診断チェックを実行する整合性チェックです。

POSTは、HDDSSDキーボードRAMUSBポートなどのコンポーネントのハードウェア操作可能性を調べます。ハードウェアデバイスが検出されない場合や、HDDやSSDが壊れているなどのデバイスに不具合がある場合、エラーメッセージが画面に表示され、介入が求められます。

一部の場合、RAMモジュールが欠落しているとビープ音が鳴ることがあります。ただし、期待されるハードウェアが存在し、期待どおりに機能している場合、ブートプロセスは次の段階に進みます。

2. ブートローダー(GRUB2)

POSTが完了し、全てが問題なければ、BIOSMBRMaster Boot Record)を調べ、ブートローダーとディスクのパーティション情報を探します。

MBRは、通常は/dev/sdaまたは/dev/hdaにあるハードドライブの最初のセクターにある512バイトのコードです。ただし、MBRは、LinuxのLive USBまたはDVDインストールにある場合もあります。

Linuxには3種類のブートローダーがあります:LILOGRUB、およびGRUB2。最新のプライマリブートローダーであるGRUB2ブートローダーが、現代のLinuxディストリビューションで使用されています。そのため、時代遅れになった他の2つを省略することにしました。

GRUB2は、GRand Unified Bootloaderのバージョン2を表します。一度BIOSがgrub2ブートローダーを見つけると、それを実行してメインメモリ(RAM)にロードします。

grub2メニューでは、いくつかのことを行うことができます。使用するLinuxカーネルバージョンを選択できます。システムを何度かアップグレードしている場合、異なるカーネルバージョンがリストされている可能性があります。また、キーボードのキーの組み合わせを押すことで、一部のカーネルパラメータを編集する機能も提供します。

Select Kernel Version

また、複数のOSインストールがあるデュアルブートのセットアップでは、grubメニューから起動するOSを選択できます。GRUB2の設定ファイルは/boot/grub2/grub2.cfgファイルです。GRUBの主な目的はLinuxカーネルをメインメモリにロードすることです。

3. カーネルの初期化

カーネルは、任意のLinuxシステムのコアです。PCのハードウェアと基本プロセスをインターフェイスします。カーネルはLinuxシステム上のすべてのプロセスを制御します。ブートローダーによって選択されたLinuxカーネルがロードされると、どんなタスクを行う前に、その圧縮されたバージョンから自己抽出しなければなりません。自己抽出が行われると、選択されたカーネルがルートファイルシステムをマウントし、一般に/sbin/initプログラムとして参照されるinitを初期化します。

Kernel Initialization Process

Initは常に最初に実行されるプログラムであり、プロセスIDまたはPIDが1に割り当てられます。さまざまなデーモンを生成し、/etc/fstabファイルで指定されたすべてのパーティションをマウントするのがinitプロセスです。

その後、カーネルは初期RAMディスク(initrd)をマウントします。これは実際のルートファイルシステムがマウントされるまでの一時的なルートファイルシステムです。すべてのカーネルは、初期RAMディスクイメージとともに/bootディレクトリにあります。

4.Systemdの起動

最終的に、カーネルは古いSysV initの代わりにSystemdをロードします。 SystemdはすべてのLinuxプロセスの母であり、ファイルシステムのマウント、サービスの開始と停止などを管理します。

Systemdは/etc/systemd/system/default.targetファイルを使用して、Linuxシステムが起動する状態またはターゲットを決定します。

  • デスクトップワークステーション(GUI付き)の場合、デフォルトのターゲット値は5であり、古いSystemV initのランレベル5に相当します。
  • サーバーの場合、デフォルトのターゲットはmulti-user.targetであり、これはSysV initのランレベル3に対応します。

以下は、systemdのターゲットの概要です:

  • poweroff.target (runlevel 0): システムのシャットダウン。
  • rescue.target (runlevel 1): レスキューシェルセッションを起動します。
  • multi-user.target (runlevel 2,3,4): システムを非グラフィカル(コンソール)のマルチユーザーシステムに設定します。
  • graphical.target(ランレベル5):システムをグラフィカルなマルチユーザーインターフェースとネットワークサービスを使用するように設定します。
  • reboot.target(ランレベル6):システムを再起動します。

システム上の現在のターゲットを確認するには、次のコマンドを実行します:

$ systemctl get-default
Check Run Level

ターミナルで次のコマンドを実行することで、1つのターゲットから別のターゲットに切り替えることができます:

$ init runlevel-value

たとえば、init 3はシステムを非グラフィカルな状態に設定します。

init 6コマンドはシステムを再起動し、init 0はシステムを終了します。これらの2つのターゲットに切り替える場合は、sudoコマンドを呼び出すことを忘れないでください。

起動プロセスは、systemdがすべてのデーモンを読み込み、ターゲットまたはランレベルの値を設定したときに終了します。この時点で、ユーザー名とパスワードが求められ、Linuxシステムに入ることができます。

Source:
https://www.tecmint.com/linux-boot-process/