LinuC Level1 v10.0 対策コース(パート1)7/39
Linuxシステムの起動におけるBIOS操作
こちらの記事ではLinuxの起動について解説します。
Linuxの起動シーケンス
- BIOSの起動
- ブートローダー
- カーネル
- 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の起動手順
- BIOSの起動
- ブートローダー
- カーネル
- initプロセス
デフォルトのブートターゲットの変更方法
systemctl set-default ブートターゲット名
ブートターゲットの変更方法
systemctl isolate ブートターゲット名
シャットダウン
systemctl halt
or
systemctl poweroff
再起動
systemctl reboot
システムの起動と終了の流れをしっかりと理解しておきましょう。
記事の内容は理解できましたか?