システムの起動とシャットダウン

はじめに

第37章はじめに

このビデオでは、この章で説明するトピックの概要を簡単に説明します。


学習目標
この章の終わりまでに、次のことができるようになります。

起動プロセスを説明できます。
いくつかの種類のブートローダーを特定できます。
BIOSの機能を説明できます。
関連する構成ファイルを特定できます。
システムがシャットダウンして再起動する方法を説明できます。


システムの起動とシャットダウン

ブート シーケンス
ブート シーケンスの基本的な手順は次のとおりです。

BIOS/UEFIは、ブート プログラムまたはブートローダーを見つけて実行します。
ブートローダーはカーネルをロードします。
カーネルは initプロセスを開始します（pid=1）。
initは、systemdまたは比較的古いUpstartやSysVinit起動スクリプトを使用して、システムの初期化を処理します。

コンピュータに電源が供給されると、コンピュータはBIOS（Basic Input Output System）が命令した操作を実行します。

まず、BIOSはPOST（Power On Self Test）を実行します。POSTは、メモリとハードウェアをチェックし、特定の場所またはデバイスでブート プログラムを探します。通常、ブート プログラムはデバイスのMBR（マスター ブート レコード）にあります。コンピュータの制御は、このブート プログラム（通常は GRUB）に移ります。

次に、ブート プログラムがカーネルをメモリにロードし、実行します。x86プラットフォーム（および他の多くのプラットフォーム）では、最初にカーネルを適切な場所で解凍する必要があります。次に、ハードウェア チェックを実行し、重要な周辺機器ハードウェアにアクセスし、最終的にinitプロセスを実行します。この最初のプロセスは、システムの起動を継続し、systemdまたはUpstartを管理します。またはSysVinitが使用されている場合は適切なinitスクリプトを実行します。

最近のコンピュータは、BIOSの代替として、多くの同じ機能を実行するUEFIに移行しています。

ブート シーケンス


BIOS
x86アーキテクチャでは、BIOSには、キーボード、ディスプレイ画面、ディスク ドライブ、シリアル通信、およびその他のさまざまな機能への、初期アクセスに必要なすべてのコードが含まれています。全システムが実行されると、これらのデバイスのほとんどは、専用のデバイス ドライバをロードして処理を引き継がせることで機能を強化します。

BIOSは通常、コンピュータ付属のROMチップに書き込まれています（多くの場合、ROM BIOSと呼ばれます）。これにより、BIOSは常に使用可能になり、ディスク障害によって損傷することはありません。そして、コンピュータが自分自身でブートすることも可能になります。

ブート プロセス中に、BIOSはMBRからブートローダーをロードします。


ブートローダー
クリックして各ボックスを展開し、Linuxで使用されるさまざまなブートローダーについて学習します。

ブートローダー

GRUB
事実上、（非組み込みの）すべての最新LinuxディストリビューションはGRUB（GRand Unified Boot Loader）を使用します。GRUBの機能には、複数のオペレーティング システムを起動する機能、シリアル ケーブルでの使いやすさを可能にするグラフィカルおよびテキスト ベースのインターフェイス、インタラクティブな設定のための強力なコマンド ライン インターフェイス、ネットワーク ベースのディスクレス ブート、およびその他の高度な機能が含まれます。

efibootmgr
efibootmgrは、実際にはブートローダーではなく、ブート マネージャーであり、マルチ ブートのEFIシステムでGRUBと組み合わせて使用されます。

LILO
Linux Loader（LILO）は古くて時代遅れです。

Das U-Boot
Das U-Bootは、組み込みLinuxシステム向けとして最も一般的なローダーです。他にもbarebootなどいくつかのブートローダーがあります。ただし、このコースでは組み込みに関しては説明しませんので省略します。


/etcの構成ファイル
以前に、Linuxディストリビューション同士の協力関係について説明しましたが、特定の種類のファイルをシステムの標準の場所に置くという合意に従うのもその1つと考えます。

特に、システム全体の構成ファイルは、通常/etcとそのサブディレクトリに置かれますが、ユーザー固有の構成ファイルは、多くの場合、個々のホーム ディレクトリに置かれます。でも、これは完全に正しいとは言えません。たとえば、デフォルトの構成情報は/usr/lib/systemdに保存されている場合がありますが、/etc/systemd内のファイルによって上書きされる可能性があるのです。

歴史的な経緯を見ると、Linuxディストリビューションは、/etcのどこに情報を置くかについて、独自のルールを進化させました。たとえば、すべてのRed Hat派生のシステムでは/etc/sysconfigを広範囲に使用していますが、Debianベースのシステムでは/etc/defaultを使用しています。興味深いことに、RHELとSUSEはその両方を使用しています。


/etc/sysconfig
このディレクトリとそのサブディレクトリ内のファイルは、多くのシステム ユーティリティ サービスが使用します。それらは、システムがサービスを開始したり停止したりするとき、または状態を照会するときに、問合せたり呼び出されたりします。

RHELシステムの場合：

$ ls /etc/sysconfig

/etc/sysconfig on RHEL 8の例

ここでは1つのファイルのスクリーンショットを示します。このファイルは、システムの起動時にこのファイルを読み取り、selinuxの設定をします。selinuxの設定を読み取って表示しています。

$ cat /etc/sysconfig/selinux

構成例：/etc/sysconfig/selinux


/etc/default
スクリーンショットは、Ubuntuシステムの/etc/defaultディレクトリを示しています。

このディレクトリの用途は、Red Hatの/etc/sysconfigの用途に似ています。

ファイルは、サービスを開始するときに追加のオプションを提供するために使用されます。
通常、環境変数を設定するコードが含まれています。
たとえば、ファイル/etc/default/useraddは、新しいユーザー アカウントの作成時に使用されるデフォルトを設定します。Red Hatベースのものを含むすべての重要なLinuxディストリビューションは、/etc/sysconfigがまだあるとしても/etc/defaultを使います。

/etc/defaultの例


シャットダウンと再起動
shutdownコマンドは、システムを安全な方法で停止するために使用します。システムが停止することをすべてのユーザーに通知してから、正常かつ安全な方法で停止します。シャットダウン後に、システムは停止または再起動されます。ここでいくつかのshutdownの例を示します。

$ sudo shutdown -h +1 "Power Failure imminent"
$ sudo shutdown -h now
$ sudo shutdown -r now
$ sudo shutdown now

オプションは、内蔵のヘルプ メッセージで簡単に表示できます。

shutdownコマンドの例

オプションの指定がない場合（たとえば、shutdown now）、デフォルトではシステムの電源を完全に切ります。Ubuntuなどの一部のディストリビューションはこれとは違い、電源を切る代わりにシングル ユーザー モードに移行します。

よくある間違いの1つは、時間の引数（nowや実際の時刻など）を指定しないことです。これは必須です。

また、多くのベテラン ユーザーが頻繁に使用する従来のコマンド、reboot、halt、poweroffも、このコマンドでできます。


演習

課題 37.1: シャットダウン vs. 停止（Halt） vs. リブート

🚩
以下のPDFドキュメントに埋め込まれた外部URLにアクセスする場合は、常に右クリックして新しいタブまたはウィンドウで開いてください。直接クリックしてURLを開こうとすると、コース ウィンドウ／タブが閉じます。

【【これ以降は橋本さんの訳を参照】】

NOTE: This exercise requires that it be run from the console (i.e., not over the network through SSH).

1.  Reboot the system using shutdown.

2.  Power off the system using shutdown.
3.  Power the system back up.

Solution 37.1

1.$ sudo shutdown -r now
2.$ sudo shutdown -h now
3.  Press the power button, or restart your virtual machine.


知識チェック

「第37章 - システムの起動とシャットダウン」を完遂しました。おめでとうございます。このクイズに答えて、これまでに学んだ概念の理解度をチェックしてください。

クイズ開始

問題 37.1
ブート シーケンスの基本ステップはどの順序が正しいですか？

i. initプロセスを開始します
ii. Linuxカーネルとinitrdまたはinitramfsのイメージがメモリにロードされ、カーネルが実行されます
iii. 追加のカーネル モジュール（デバイス ドライバを含む）が読み込まれ、システム サービスが開始されます
iv. ブートローダーが実行されます

A. i, ii, iv, iii
B. iv, ii, i, iii
C. iv. iii, i, ii
D. i, ii, iii, iv

