Linux の起動とシャットダウン

May 08, 2018

システムが起動するまでの流れ

システムの電源を入れてから OS が起動するまでの流れはコンピュータアーキテクチャに依存するが、x86/x86_64 における起動の手順は以下。

  1. 電源を入れると BIOS/UEFI が起動する
  2. BIOS/UEFI はハードウェアのチェックや初期化を行い、起動デバイスに書き込まれたブートローダを読み出す
  3. ブートローダは起動デバイス上からカーネルをメモリ上にロードする
  4. カーネルはメモリの初期化やシステムクロックの設定などを行い、仮のルートファイルシステム (initramfs: 初期 RAM ディスク) をマウントする
  5. 初期 RAM ディスクはシステムの起動に必要なデバイスドライバが組み込まれており、これにより HDD 等のデバイスへアクセスができるようになる
  6. ルートファイルシステムが使用できるようになると、カーネルは init プロセスを実行する
  7. init は必要なサービスを順次起動し、最終的にログインプロンプトを表示する

起動時のイベント確認

dmesg コマンドにより、システム起動時に実行されるカーネルの処理が確認できる。

$ dmesg | head  
[    0.000000] Linux version 4.9.62-21.56.amzn1.x86_64 (mockbuild@gobi-build-64013) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)) #1 SMP Thu Nov 16 05:37:08 UTC 2017  
[    0.000000] Command line: root=LABEL=/ console=tty1 console=ttyS0 selinux=0 LANG=en_US.UTF-8 KEYTABLE=us  
[    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'  
[    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'  
[    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'  
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256  
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.  
[    0.000000] x86/fpu: Using 'eager' FPU context switches.  
[    0.000000] e820: BIOS-provided physical RAM map:  
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009dfff] usable  

dmesg はカーネルが出力いsたメッセージを一時的に保管するバッファの内容を表示する。
そのため、システム起動後にカーネルが出力したメッセージがバッファに収まり切らなくなると、古いメッセージは消える。
その際は、/var/log/messages や /var/log/dmesg 、また /var/log/boot.log 等を確認すると良い。

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

システムのシャットダウンや再起動は shutdown コマンドを用いる。

オプション 説明
-h シャットダウンする
-r シャットダウン後にシステムを再起動する
-f 次回起動時に fsck をスキップする
-F 次回起動時に fsck を強制する
-k 実際にはシャットダウンせず警告メッセージを通知
-c 現在実行中のシャットダウンをキャンセルする

以下の例では 5 分後にシステムを停止する。また、“Please logout immediately.” というメッセージをログインユーザーに通知する。

$ shutdown -h +5 "Please logout immediately."  
  
Broadcast message from ec2-user@ip-172-31-24-42  
	(/dev/pts/2) at 20:57 ...  
  
The system is going down for halt in 5 minutes!  
Please logout immediagely.   

また次の例では 22:00 にシャットダウンする。

$ shutdown -h 22:00  

他にも halt、poweroff といったコマンドでシャットダウンしたり、reboot コマンドでも再起動できる。
なお、systemd を採用したシステムでは shutdown コマンドの代わりに systemctl reboot で再起動、systemctl poweroff でシステムを終了する。
(現在はまだ shutdown コマンドも使える)


 © 2023, Dealing with Ambiguity