1. ホーム
  2. コース一覧
  3. LinuC Level1 v10.0 対策コース(パート1)
  4. Linuxシステムの起動におけるBIOS操作

中級

LinuC Level1 v10.0 対策コース(パート1)

LinuC Level1 v10.0 対策コース(パート1)7/39

Linuxシステムの起動におけるBIOS操作

こちらの記事ではLinuxの起動について解説します。

Linuxの起動シーケンス

  1. BIOSの起動
  2. ブートローダー
  3. カーネル
  4. initプロセス

1. BIOSの起動

UEFI/BIOSについての説明はこちらの記事をご参照ください。

コンピュータの電源をONにすると不揮発性メモリに保存されているBIOSが起動し、POST(Power On Self Test)と呼ばれるプログラムによりハードウェアのチェックと初期化処理を行います。

次にオペレーティングシステムを起動させるためのプログラムが保存されているドライブ (ブートドライブ)を探します。使用するブートドライブが見つかったらそのブートドライブの先頭ブロックであるMBR(Master Boot Record)に格納されたブートローダを実行します。

2. ブートローダ

上述したようにブートローダはオペレーティングシステムを起動させるためのプログラムです。ブートローダは実際には2段階の異なるプログラムに分かれていることが多く、このように2段階に分かれている理由はMBRの領域が小さいことから格納されているブートローダのサイズが制限されており、ブートローダ全体を格納できないためです。

  • 1次ブートローダ
    • オペレーティングシステムを起動させるためのプログラムである2次ブートローダをメモリにロード&実行
  • 2次ブートローダ
    • 起動したいオペレーティングシステムが保存されているストレージからオペレーティングシステムの初期化プログラムをロード&実行
    • 制御をカーネルへ移行

Linuxの2次ブートローダには主にLILOかGRUBが採用されています。

  • LILO(Linux Loader)
    • 昔からLinux標準として使用されているブートローダ
    • ブートイメージの保存場所をハードディスク上の物理的な位置として認識する
  • GRUB(Grand Unified Bootloader)
    • ファイルシステムを認識できることで、カーネルのファイル自体にアクセスする

3. カーネル

カーネルはコンピュータの起動時は初期化処理を行い、普段はハードウェアの資源管理などを行っています。

起動時にはカーネルは自身の初期化シーケンスを実行したのちにinitrdまたはinitramfsを仮のルートファイルシステムとしてマウントします。そして、initrd・initramfsに含まれるカーネルモジュールを読み込むと、本物のルートファイルシステムが保存されているディスクをマウントするために必要なドライバを読み込み、ルートファイルシステムのマウントが出来るようになります。

以上の処理が成功するとinitrd・initramfsに含まれる/sbin/initを実行します。

4. initプロセス

/sbin/initを実行するとプロセスIDが1であるinitプロセスが起動し、/etc/inittabに記述されているプロセスを起動させるなどシステムの初期化を行います。

(最近はinitプロセスではなくsystemdによる起動が主流となっています)

デフォルトのブートターゲットの設定方法

Linuxの起動手順で説明した通り、最近のLinuxディストリビューションはカーネルが起動した後、システムを管理するためのデーモンであるsystemdが起動します。そして、systemdはサービスをunitという単位を用いて管理しており、複数のunitをグループにしたunitがブートターゲット(ターゲット)になります。ブートターゲットが必要な理由としてはシステムを起動する際にCUIだけでなくGUIやネットワークが必要かどうかに応じて起動する必要があるサービスが異なるからです。

ブートターゲットに似た概念としてランレベルがありますが、これはsystemdよりも前に採用されていたSysVinitで使用されていたものになります。

主なブートターゲットとしては以下のものがあります。runlevel2 ~ runlevel4まで同じである理由はsystemdよりも前に採用されていたSysVinitの名残です。

ブートターゲット概要
runlevel0.target, poweroff.targetシステムをシャットダウンしたのち電源をOFFにする
runlevel1.target, rescue.targetシングルユーザモード
runlevel2.target, multi-user.target非グラフィカルなマルチユーザーシステムを設定する
runlevel3.target, multi-user.target非グラフィカルなマルチユーザーシステムを設定する
runlevel4.target, multi-user.target非グラフィカルなマルチユーザーシステムを設定する
runlevel5.target, graphical.targetグラフィカルなマルチユーザーシステムを設定する
runlevel6.target, reboot.targetシステムをシャットダウンしたのち再起動する

次にデフォルトのブートターゲットを設定していきます。

まず、デフォルトでどのブートターゲットが設定されているのかを確認するには以下のコマンドを使用します。

systemctl get-default

また、利用可能なブートターゲットの確認には以下のコマンドを使用します。

systemctl list-units --type=target --all --no-pager

そして、デフォルトのブートターゲットの設定には以下のコマンドを使用します。設定できたら上記のデフォルトのブートターゲットを確認するコマンドを使用して確認してみてください。

systemctl set-default ブートターゲット名

ブートターゲットの変更方法

再起動せずにブートターゲットを変更したい場合は以下のコマンドを使用します。

systemctl isolate ブートターゲット名

コマンドラインからのシャットダウンおよびリブート方法

コマンドラインからのシャットダウンや再起動は以下のコマンドを使用します。

ただ、一部のシステムではshutdownコマンドが存在しない場合、haltかpoweroffコマンドを使用します。

説明コマンド
shutdownシャットダウンsystemctl shutdown or systemctl poweroff
halt電源を切らずにシャットダウンして停止systemctl halt
reboot再起動systemctl reboot
poweroff電源を切ってシャットダウンして停止systemctl poweroff

まとめ

この記事ではLinuxの起動シーケンスやブートターゲットなどについて解説しました。

Linuxの起動手順

  1. BIOSの起動
  2. ブートローダー
  3. カーネル
  4. initプロセス

デフォルトのブートターゲットの変更方法

systemctl set-default ブートターゲット名

ブートターゲットの変更方法

systemctl isolate ブートターゲット名

シャットダウン

systemctl halt
or
systemctl poweroff

再起動

systemctl reboot

システムの起動と終了の流れをしっかりと理解しておきましょう。

記事の内容は理解できましたか?