4.4 ハードディスクのレイアウト
Linux Essentials Online Text | 2021/07/14

1つのHDD上で論理的に分割された各領域のことをパーティションと言います。1つのHDDは、必ず最低1つ以上のパーティションで構成されます。

どのOSでも個人で使用する場合はあまり深く考えることはありません。なぜなら、インストーラが自動で調整してくれるからです。ただ、パーティション設計をインストーラの自動に任せてよいのは個人で利用する場合においてのみです。ビジネス等、目的をもって使用する場合はその目的に合った設定を行わなければならないケースが多くあります。ここではパーティションについて解説します。

Linuxの必須パーティション

Linuxをインストールするにあたり、最低でも以下2つのパーティションが必要です。

領域用途
/ルートファイルシステム(他のパーティション以外)
swap領域仮想メモリ領域

swapとはHDD内に設置されるメモリ領域で、メモリ容量が足りなくなった時にメモリの中で不要な部分(あまり使わないデータ)をswap領域に移動(スワップアウト) させ、メモリ領域を確保するために使用します。ちなみにHDDへのアクセスは遅いので、スワップアウトが多発するとパフォーマンスの低下に繋がります。

swap領域に割り当てるべき容量

上記の通り、swap領域はメモリ不足を補助するための領域です。そのため、搭載メモリ量と同等~2倍程度の割当が妥当です。ただし、上記の通り潤沢にメモリが搭載されている場合はその限りではありません。一般に8GB~64GBの場合は4GBもしくは搭載メモリの0.5倍、64GB以上の場合は状況によりますが、4GBは割り当てます。

パーティション分割の必要性

パーティション分割を行う理由はいくつかありますが、最も大きなメリットは、障害発生時に極力システムを再構築すること無く復旧できる点にあります。

ファイルシステム障害の局所化:

例えば、ルートディレクトリのみでパーティションを切っている場合、そのパーティションで障害が発生するとパーティション全体にアクセスできなくなる可能性があります。つまり、障害=全てのデータロストになってしまうのです。この時、それぞれのディレクトリごとにパーティションを区切っておけば、障害発生したパーティションだけ切り離せばよく、他のデータを守ることができます。

ディスク容量不足の際の回避策の簡素化:

例えば、/varディレクトリはログファイルを格納するディレクトリであるため、しばしばデータが肥大化してしまうケースがあります。この様な場合、/varディレクトリを別のHDDとしてパーティションを切っておけば、容量不足が生じてもより容量の大きいHDDにマウントし直すことで、システムを再構築すること無く回避することが可能です。

主なディレクトリと役割

パーティション分割を行うにあたり、分割したパーティションに割り当てることが出来るディレクトリと割り当てることが出来ない存在します。

Linuxで使用される主なディレクトリと分割可否を下記に列挙します。これらのディレクトリ名と役割はFHS (Filesystem Hierarchy Standard/ファイルシステム階層標準)によってある程度決められています。

領域分割可否用途
/bootカーネルやブートローダなど、OSの起動に必要なファイルが格納
/sbinシステム管理用のコマンドが格納
/bin一般ユーザ用のコマンドが格納
/etcシステムの設定ファイルを格納
/lib共有ライブラリを格納
/lib6464bit用プログラムの共有ライブラリを格納
/devデバイスファイルを格納
/sysデバイスやドライバの情報
/proc起動中のプロセスやハードウェア、リソース情報に関連するファイルを格納
/proc/プロセスIDプロセスID毎にディレクトリが作成
/proc/ハードウェアcpuinfo、meminfo等のリソース情報ファイルが存在
/varログファイルやユーザに届くメール等、頻繁な変更が多いファイルを格納
/var/log/各種ログファイルが格納
/var/cache/アプリケーションの一時ファイル等が格納
/usrユーザが作成したプログラムやその設定ファイルを格納
/usr/sbin/システムの起動に必須ではない一般ユーザ用コマンド
/usr/bin/システムの起動に必須ではないシステム管理用コマンド
/usr/lib//usr/bin,/usr/sbinのコマンドが必要とするライブラリ
/usr//lib64/usr/bin,/usr/sbinの64bit用コマンドが必要とするライブラリ
/usr/local/bin/ホスト固有使用のプログラム
/usr/local/etc//usr/local/binで使用されるプログラムの設定ファイル等
/usr/share/man/オンラインマニュアル
/opt追加でインストールしたパッケージを格納
/home一般ユーザのホームディレクトリを格納
/tmp一時ファイルを格納

主に、システムに関わりの深いファイルが格納されたディレクトリは分割したパーティションに割り当てることができません。/varや、/home、/opt、/user等、システムを使用していくうちにディレクトリの容量が肥大化するディレクトリや、頻繁に読み書きが発生するようなディレクトリは分割が可能です。

ただし、実際にどのディレクトリを分割し、どれだけの容量を割り当てるかは構築するシステムによって異なります。例えば、多くのユーザに使ってもらうWebサーバを構築する場合は/homeが肥大化することが予測できるため、このディレクトリを分割します。/homeを分割しておくことで、システムに障害が発生してもこのディレクトリだけを切り離してデータを守ることができます。また、ネットワーク内の様々な機器のログを集め、保存しておくようなサーバであれば/varディレクトリが肥大化することが予測できるため、このディレクトリの分割が必須で、多くの容量を割り当てることになります。

このように、使用するシステムによって分割の仕方や、ディスクの割当などが異なってきます。

● /bootディレクトリ

/bootディレクトリには、OSを起動させるためのデータが格納されています。厳密には、カーネルやinitrdイメージ、ブードローダ(GRUBやGRUB2)などが該当します。
起動後は使用されないことからパーティションを分けるケースが多いディレクトリです。

● /sbin、/bin、/usr/sbin、/usr/binディレクトリ

いずれもコマンドが格納されていますが、重要度により格納される場所が異なります。システム起動及び管理に必要なコマンドは/sbinに格納されます。/binには一般ユーザ用のコマンドが格納されています。/usrの配下にも/sbin、/binがありますが役割は一緒です。ただし、システムの起動に不要なコマンドが格納されます。

● /etcディレクトリ

/etcディレクトリには、Linuxで動作する各種プログラムの設定ファイルが格納されているディレクトリです。設定ファイルのことをConfigファイルと呼びます。そのため、○○.conf、または〇〇.cfgと言うファイル名が多く存在します。
そのため、例えば「hogehoge」というアプリケーションがある場合、この設定ファイルは、/etc/hogehoge.conf、または/etc/hogehoge/hogehoge.conf等であると、ある程度予測することができます。

● /libディレクトリ

/sbinや/bin等のプログラムファイルの実行に必要な共有ライブラリが格納されています。
64bitプログラム用のライブラリは、/lib64という別ディレクトリに格納されます。

● /devディレクトリ

/devはデバイスファイルが保存されているディレクトリです。基本的に全てのハードウェアがこのディレクトリ配下で対応したファイルとして認識しています。/dev配下にあるファイルをデバイスファイルと呼びます。

● /sysディレクトリ

/sysディレクトリは、デバイスやドライバの情報が格納されるディレクトリです。システムにUSBデバイス等の新しい機器が接続された時、それを認識してデバイスやドライバ情報をファイル化して格納します。
ただし、このディレクトリはカーネルしかアクセスできないため、sysfsという仮想ファイルを作成しています。このディレクトリはudevという機能と深い関わりがあるディレクトリです。

● /procディレクトリ

/procには、プロセスIDをファイル化したものと、各ハードウェアのリソース情報が格納されています。ハードウェア構成を確認する場合、/procにある各種ハードウェアのリソース情報を参照することで確認できます。

● /tmpディレクトリ

/tmpは、一時的(temporary)なファイルを置くディレクトリです。プログラムが動作する際に一時的に利用するファイルを保存する際に使用します。このディレクトリは複数のユーザが共用で使用しますが、この時、作成したファイルやディレクトリが他のユーザ(プロセス)から削除されることが無いように、「スティッキービット」という特殊な権限が設定されています。
これは、「自身の所有者権限であるファイルやディレクトリのみを削除できる」という特殊な動作をします。

このディレクトリに保存されたファイルやディレクトリは、アクセスが無いまま10日間が経過するか、システム再起動のタイミングで消去されます。よく似た機能を持つディレクトリとして「/var/tmp」があります。このディレクトリも一時ファイルを保存するディレクトリで、10日ではなく30日間アクセスがない場合に対象を削除します。また、システムを再起動しても消去されませんので注意が必要です。

パーティション分割(MBR)

サーバの用途からパーティション分割のデザインが決まったら、インストールを行う際にHDDのパーティションを区切り、それぞれのディレクトリを割り当てていくことになります。パーティションには「基本領域(primary partition)」「拡張領域(extended partition)」「論理領域(logical partition)」の3種類の領域があり、それぞれの仕様に応じてパーティションを設定する必要があります。

パーティションの仕様は以下のとおりです。

領域説明
基本領域
(primary partition)
1つのHDDにつき最大4個まで作成可。 いずれか1つだけ「アクティブパーティション」にできます。アクティブパーティションはブートフラグを立てた起動可能なパーティションのことです。
拡張領域
(extended partition)
基本領域の特殊形態で、中に論理領域を作成することができる領域。1つのHDDにつき1つしか作成できず、拡張領域単独では機能しません。
論理領域
(logical partition)
拡張領域内に作成することが可能な領域。基本領域と異なり、作成できる数に制限はありません。ただし、全て拡張領域内に作成しなければなりません。

MBRによるパーティション設定では基本領域の作成数制限があるため、5以上のパーティション分割を想定する場合は、うち1つを拡張領域として設定する必要があります。

通常、ブートフラグを立てた基本領域にOSをインストールしなければなりませんが、Linuxのブートローダはブートフラグを無視することができるので、どの領域にインストールされていても起動することができます。

ちなみに、この基本領域作成数の制限はMBR形式の場合に発生するもので、GPT形式であればこのような制限はありません。

PAGE TOP