1. ホーム
  2. コース一覧
  3. LinuC Level1 v10.0 対策コース(パート1)
  4. ブートシーケンスとパーティション

中級

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

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

ブートシーケンスとパーティション

こちらの記事ではディスクパーティションについて解説します。

システムブートシーケンス

まず、PCの電源を入れてからOSが起動するまでの流れ、システムブートシーケンス(system boot sequence)を簡単に確認します。

  1. PCの電源を入れます。

  2. ファームウェアが起動します。ファームウェアは接続されたハードウェアのテストや初期化を行います。

    ※ このテストのことをPOST(Power-On Self Test)と呼びます。後ほど解説します。

  3. その後、ファームウェアはブートローダーを起動し、ブートローダに制御を渡します。

  4. ブートローダーは、ブートドライブに保存されているカーネルをメモリ上に読み込みます。

  5. カーネルはメモリの初期化やシステムクロックの設定などを行い、RAM上にinitramfsを展開してルートファイルシステムをマウントします。

    ※ initramfsは、RAM上で展開されるイメージファイルです。後ほど解説します。

  6. 初期RAMディスクのシステム起動用デバイスドライバを使用してデバイスへアクセスします。

  7. ルートファイルシステムがマウントでき次第、カーネルはsystemd(init)を起動します。

それでは、それぞれのフェーズにおける重要なポイントについて解説していきます。

UEFI

フェーズ : 2~3

このフェーズでは、BIOSやUEFIといったファームウェアが活躍します。

UEFI(Unified Extensible Firmware Interface) はファームウェアの一つです。

※ ファームウェア(firmware)とはハードウェアを制御するソフトウェアのことで、変更が加えられることがほとんどないため、’firm’(堅い)’ware’(ソフトウェア)という名前がつけられています。

従来はBIOS(Basic Input Output System) が広く使われていましたが、現在ではUEFIが組み込まれることが多くなりました。

また、UEFIのことを”BIOS”や”EFI/UEFI”などと呼ぶこともあるので若干ややこしいです。

BIOSと比べてUEFIは、以下のような特徴があります。

  • セットアップがGUIベースで行える
  • 起動ドライブの容量無制限である
  • ディスクのブート方式にGPT(GUID Partition Table)を採用している(BIOSではMBRを採用)

Power-On Self Test

フェーズ2.では、Power-On Self Test(以下 POST)が実行されます。POSTは、コンピュータの電源をいれたときにファームウェアによって実行されるハードウェアの動作テストのことです。

ブートドライブ

ファームウェアは各デバイスのテストや初期化が完了すると、OSのプログラムコードを読み込むためのドライブを選択します。

※ 前提知識として、OSはもともとメモリ上にあるわけではなく、ディスクに格納されています。

このドライブのことをブートドライブ(boot drive・起動ドライブ)と呼びます。ブートドライブにはHDDやSSDのストレージやUSBメモリのほか、DVD-ROMなどを読み込む光学ドライブがあります。

ファームウェアは、そのブートドライブの先頭セクタをRAM上に読み出します。この先頭セクタをMBR(Master Boot Record)と言います。

※ その他の領域はパーティションテーブルとなっています。

ブートローダー

フェーズ : 4

その後、MBRに格納されている小さなプログラムに制御を渡します。

このプログラムのことをブートローダー(ブートストラップローダー) といいます。

RAM上に読み込まれたブートローダー(boot loader)は実行され、ディスクからOS(カーネル)をRAM上に読み込みます。

Linuxのブートローダーとしては、LILO(Linux Loader)とGRUB(Grand Unified Bootloader)の2つが代表的です。

initramfs

フェーズ : 5

このフェーズでは、RAM上に読み込まれたOSが実行されます。

カーネルは初期化処理を完了させ、initramfsを展開します。

initramfsを展開した領域に実際のルートファイルシステムを作成します。

initrd

initrd(/dev/initrd)は、initramfsが登場する以前に使われていたファイルシステムを起動するためのブロックデバイスです。(ブロックデバイスに関してはLinux基礎コースの下記解説記事をご覧ください。)

https://envader.plus/course/11/scenario/1014

GPT

GPT(GUID Partition Table)は、MBR(Master Boot Recod)に代わるディスクのブート方式です。

WindowsではほとんどがGPTを採用していますが、MBRの使用も可能です。

ESP

ESP(EFI System Partition)は、GPTによって指定されたパーティションです。

ESPにはブートローダーやデバイスドライバが格納されています。

パーティション

ハードディスクやSSDは、パーティションという論理的な区画に分割することができます。

パーティションに分割することによって、耐障害性が向上し、システムの可用性が高まります。

さらに、あるパーティションに第三者が不正侵入した場合にも、被害を最小限に抑えられます。

こちらでは、UEFIベースのパーティションをご説明します。

UEFIベースのパーティションには、2種類あります。

  • EFIシステムパーティション:他のパーティションを管理するパーティション
  • 基本(プライマリ)パーティション :ファイルシステムを格納するパーティション(1つ以上)

GPTではディスク容量が無制限で、最大128個のパーティションを作成できます。

fdiskコマンド

MBRにおいて、パーティションの作成・削除などを行う際にはfdiskコマンドを使用します。

fdisk [オプション] [デバイス名]

オプション

オプション説明
-lパーティションを一覧表示する
-tパーティションタイプを変更する
-nパーティションを作成する
-dパーティションを削除する
-pパーティションテーブルを表示する
-aブートフラグを切り替える
-wパーティションテーブルの変更を保存・終了する
-qパーティションテーブルを変更を保存せずに終了する
-mヘルプメニューを表示する

※ パーティションテーブルとは、パーティションの構成情報やそれらの情報を管理している領域のことです。

連続してfdiskを使用する場合は、fdiskコマンドをいちいち叩かなくても、オプションのみ(ハイフンなし)を実行していけば次々と操作できます。

gdiskコマンド

GPTに対応したパーティションを作成、削除するには、gdiskコマンドを使用します。

gdisk [オプション] [デバイス名]

オプション一覧

オプション説明
-lパーティションタイプを一覧表示
-tパーティションタイプを変更
-nパーティションを作成
-dパーティションを削除
-pパーティションテーブルを表示
-aブートフラグを切り替え
-wパーティションテーブルの変更を保存・終了
-qパーティションテーブルを変更を保存せずに終了
-mヘルプメニューを表示

fdiskコマンド同様、連続してgdiskを使用する場合は、gdiskコマンドをいちいち叩かなくても、オプションのみ(ハイフンなし)を実行していけば次々と操作できます。

gdisk [デバイス名]

コマンド実行後に、以下のオプションが使用できます。

オプション説明
pパーティションテーブルを表示する
nパーティションを作成する
dパーティションを削除する
tパーティションタイプを変更する
lパーティションタイプを一覧表示する
sパーティションテーブルをソートする
r回復モードへ移行する
vパーティションテーブルを検証する
wパーティションテーブルの変更を保存・終了する
qパーティションテーブルを変更を保存せずに終了する

partedコマンド

partedは、MBRおよびGPTに対応したパーティションを作成・削除するコマンドです。

サブコマンド

サブコマンド説明
checkファイルシステムを簡易的にチェックする
mklabel新たなパーティションテーブルを作成する
printパーティションテーブルを表示する
mkpart指定したタイプのパーティションを作成する
rm指定したパーティションを削除する
quit終了する

パーティションの割り当て

以下のディレクトリは、それぞれ独立したパーティションを割り当てることが推奨されています。

/ (ルートディレクトリ)

ルートファイルシステムは、/(ルートディレクトリ)を含むパーティションです。

ルートファイルシステムにもしも障害があった場合、/ の容量が小さい方が復旧がラクになります。

/var

/varには、多くのログファイルが保存されます。

ログファイルは、急増することもあり、ルートファイルシステムと同じパーティションにあるとシステムリソースを使い尽くしてしまう可能性があります。

もし仮に /varがパンクしてもパーティションが別であればリソースも切り分けられ、被害も最小限に抑えられます。

/home

Linuxは複数人で利用することを前提に設計されています。

/homeにはそれぞれのユーザーが利用するファイルやディレクトリが格納されるため、複数のユーザーが同一システム上に存在する場合、それぞれ別のパーティションに分けておいた方が管理しやすくなります。

/boot

/bootはパーティションとして分割し、RAIDを実現するためのディスク領域として使用されます。RAID(Redundant Arrays of Inexpensive Disks、または Redundant Arrays of Independent Disks)とは、複数のディスクにデータを分散して格納したりディスクのコピーを用意したりすることで、データの冗長性を高める手法です。

スワップ領域

メモリには、物理メモリの他に仮想メモリがあります。仮想メモリは、物理メモリの容量が不足した場合にディスクの一部をメモリとして使用するためにあります。

スワップ領域(swap space)は、ディスク上に作成される独立したパーティションであり、主に仮想メモリとして使われます。

LVM(Logical Volume Manager)

ボリューム(volume)とは、連続した一つの記憶領域のことです。そんなボリュームには物理ボリューム(Physical Volume)論理ボリューム(Logical Volume) があります。

物理ボリュームとは、/devに配置される個々のデバイスファイルのことです。そして、複数の物理ボリュームをまとめたものをボリュームグループと言います。

論理ボリュームとは、そのボリュームグループの中に作成されたボリュームのことです。

LVM(Logical Volume Manager)では、パーティションにそのままファイルシステムを作成するのではなく、物理ボリュームから仮想ディスク(ボリュームグループ)を作成し、その仮想ディスクに仮想パーティション(論理ボリューム)を作成します。

LVMを利用することで、ディスクをより効率的に使えたり、バックアップをより柔軟に行えたりして大変便利です。 また、システムを停止することなくパーティション容量を動的に変更(拡張・縮小)することができます。

スナップショット

ここでのスナップショットは、ある時点のデータの状態もしくは、その状態をコピーして保存することを意味します。

スナップショットは、そのまま保存しておけばバックアップとなりますし、データが破損した場合などにはデータの復旧(フェイルバック・フェールバック)に役立ちます。

LVMでは、常に論理ボリュームのデータを監視しており、いずれかのデータに変更があったタイミングでのスナップショット時に変更のあったデータ部分の値のコピーがスナップショットボリュームという専用のボリュームに保存されます。論理ボリュームの変更を加えたデータ部分には変更された新たな値が保存されます。

まとめ

ディスクパーティションについて解説しました。

パーティションやLVMは論理的で概念的な部分なので、すぐに理解することは困難かもしれません。ひとつひとつ順を追って整理していくことが大切です。

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