
パーティショニング
ページ作成日 2016/5/4
ページ更新日 2025/4/21
パーティショニングとは?
パーティショニングとは、ハードディスクやSSDなどの記憶装置(ストレージ)を、複数の独立した領域(パーティション)に論理的に分割する作業や技術のことです。
用語の整理
用語 | 意味・役割 |
---|---|
ディスク | HDDやSSDなどの物理的な記憶装置 |
パーティション | ディスクを分割した論理的な保存領域 |
ボリューム | パーティションに割り当てられる名前やラベル |
パーティショニングの主な目的とメリット
- データの整理・管理の効率化
- システムファイル、アプリケーション、ユーザーデータなどを別々のパーティションに分けて保存できるため、管理がしやすくなります。
- 複数OSの共存
- 一つの物理ディスクにWindowsとLinuxなど、異なるオペレーティングシステムをインストールして切り替えて使うことができます。
- 障害時のリスク分散
- システム障害やデータ破損が発生しても、影響を受けるのは一部のパーティションだけで済む場合があります。
Linuxにおけるパーティショニングの目的とメリット
Linuxでは、/home
、/var
、/boot
、/tmp
などを個別のパーティションとして分離することが一般的で、これにより以下のような実用的なメリットが得られます。
- アップグレードや再インストールが容易
-
たとえば
/home
を別パーティションにしておけば、OSを再インストールしてもユーザーデータを保持できます。 - ログや一時ファイルによるディスク圧迫を防止
-
/var
や/tmp
の容量を制限することで、ログ暴走やテンポラリファイル肥大化によるシステム全体の停止を防げます。 - ブートローダの安定性を確保
-
/boot
を独立したパーティションにすることで、カーネルや初期化ファイルの読み込みが安定し、マルチブート構成や暗号化ファイルシステムとの併用でも問題が起きにくくなります。 - セキュリティ強化
-
特定のマウントオプション(例:
noexec
,nosuid
,nodev
)をパーティションごとに設定することで、悪意のあるコードの実行や特権昇格のリスクを軽減できます。
たとえば、ユーザーが自由に書き込める/tmp
をnoexec
に設定すれば、そこに配置されたスクリプトの実行を防げます。
BIOSとUEFIの違い
パーティショニングは、ファームウェアと密接な関係があります。
ファームウェアは、以下の2種類があります。
- BIOS
-
古くから使われているファームウェア。
テキスト画面でキーボード操作により設定を行い、MBRパーティションを使用してOSを起動。 - UEFI
-
BIOSの後継として設計された新しいファームウェア。
GUI操作、高速起動、セキュアブート対応、GPTの利用など、最新のPC・サーバ環境に適している。
項目 | BIOS (Basic Input/Output System) |
UEFI (Unified Extensible Firmware Interface) |
---|---|---|
登場時期 | 1980年代 | 2000年代 |
起動方式 | レガシーブート (MBRベース) | UEFIブート (GPTベース) |
パーティションサポート | MBRのみ(最大2TiB、最大4パーティション) | GPT対応(最大8ZiB、最大128パーティション) |
インターフェース | テキストベース、キーボード操作のみ | GUI対応、マウス操作可能(機種による) |
ブート速度 | 遅め | 高速起動が可能 |
セキュリティ | 基本的な保護のみ | セキュアブートに対応(マルウェア対策) |
拡張性 | 限定的 | プラグイン対応など柔軟な拡張が可能 |
サポートOS | 古いOSも対応(Windows XPなど) | Windows 7(64bit)以降、Linux新バージョンなど |
パーティションの種類
パーティションテーブルには、主に MBR と GPT の2種類があります。
MBRは古くから使われている形式で、GPTはその後継として登場した新しい形式です。
使用する形式によって、作成できるパーティションの種類や構造が異なります。
MBR形式のパーティション
- プライマリパーティション
- 最大4つまで作成可能な基本パーティションで、OSのインストールや起動に使われます。
- 拡張パーティション
- プライマリパーティションの1つとして作成され、論理パーティションを内部に保持するためのコンテナです。1つのみ作成可能です。
- 論理パーティション
- 拡張パーティション内に作成されるパーティションで、複数作成できます。データ領域の分割に適しています。
GPT形式のパーティション
- 基本パーティション
- MBRのような区別(プライマリ/拡張/論理)はなく、すべて同じレベルで管理されます。
- パーティション数
- 通常128個まで作成可能で、OSによってはさらに拡張できます。
- 信頼性と冗長性
- パーティションテーブルがディスクの先頭と末尾の両方に記録され、CRCチェックにより整合性が保たれます。
- UEFIブート対応
- GPTはUEFIと組み合わせることで、最新のPCやサーバでの高速・セキュアな起動を可能にします。
MBRとGPTの比較
項目 | MBR | GPT |
---|---|---|
パーティション数 | 最大4つのプライマリ、または拡張+論理 | 最大128個(拡張可能) |
構造 | プライマリ/拡張/論理 | すべてが基本パーティション |
冗長性 | なし(MBRのみ) | 先頭と末尾の2箇所に記録 |
整合性検証 | なし | CRCによるチェックあり |
UEFI対応 | 非対応(BIOSのみ) | 対応(UEFI必須) |
GPTの主な利点
MBRでは32bitでセクタを管理するため、1セクタ512バイトとして計算すると最大2TiBまでしか扱えませんでした。
GPTでは64bit管理により、最大8ZiBまで対応可能となっています。
これにより以下の利点があります。
- 2TiBを超える大容量ディスクに対応可能。
- 最大128個のパーティションを作成可能(MBRの4個制限を解消)。
- パーティションテーブルが2箇所に保存され、片方が破損しても復旧可能(整合性チェック機能付き)。
パーティション設計
Linuxのパーティション作成の基本
まず基本のパーティショニングは、ディスク領域を/(ルート)とスワップ用の2つに分けます。
スワップ用のパーティションは必ず用意します。
Chris Down氏の「スワップの弁護:よくある誤解を解く」から要約を引用します。
- スワップを持つことは正しく機能するシステムのかなり重要なポイントです。 スワップが無ければ、まともなメモリ管理を実現することは難しくなります。
- スワップは一般的に緊急事態用のメモリを取得するためのものではなく、メモリの回収を平等に効率的に行うためのものです。 実のところ「緊急事態用のメモリ」は一般的に盛大に悪影響を及ぼします。
- スワップを無効にすることはメモリ争奪の状況下においてディスクI/Oが問題になることを回避してくれるわけではありません。 単にディスクI/Oスラッシングの対象をanonymousページからfileページにシフトさせるだけです。 これは効率が悪くなるだけでなく、回収元の選択対象となるページのプールが小さくなり、発端となっているメモリ争奪の状況をより悪化させることに寄与してしまいます。
- 4.0以前のカーネルのスワップ機構はたくさんの落とし穴がありました。そして、必要以上にやたらとページをスワップアウトしたがるせいでスワップについてネガティブな認識を多くの人が持つようになりました。4.0以降のカーネルでは状況ははるかに良くなっています。
- SSDではanonymousページをスワップアウトするのとfileページを回収するのはパフォーマンスとレイテンシの観点では実質的には同じです。より古い回転ディスクではスワップからの読み込みはランダムリードになるためより遅くなります。 ですので vm.swappiness をより低い値に設定することが理にかなっています(vm.swappiness については後述)。
- スワップを無効にすることはOOMが近いときにを病的な挙動を防いでくれるわけではありません。 一方、スワップがあればOOMの発動を引き延ばせる可能性があるのは事実です。 スワップありあるいはなしでシステムグローバルの OOM キラーが実行されるか、また実行される時期が早いか遅いか、に関わらず結果は同じです。 つまりあなたには挙動が予測できないシステムが残されることになります。 スワップを持たないことでこれを回避することはできません。
- cgroup v2 の memory.low などを使うことでメモリ逼迫の状況下でスワップの挙動を改善しスラッシングを防ぐことができます。
/以降を全て1つのパーティションにする
昨今は、/を1つのパーティションに割り当ててしまい、ディレクトリ単位でパーティションをマッピングするというのは、やらなくなりました。
もちろん、/homeを別パーティションにするのはアリです。
ストレージデバイスの確認
端末に実装されているストレージデバイスを確認しましょう。
以下のように、lsblk
というコマンドを実行します。
M.2 NVMe SSDの場合
root@darkstar:/# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOINTPOINT sda 8:0 1 14.5G 0 disk `-sda1 8:1 1 14.5G 0 part zram0 251:0 0 62.6G 0 disk [SWAP] nvme0n1 259:0 0 1.8T 0 disk
上記のような表示が出ます。
sdaで表示されているのは、USBのSlackwareインストーラーで、zram0がRAMディスク、nvme0n1がM.2 SSDになります。
M.2 SATA SSDの場合
root@darkstar:/# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOINTPOINT sda 8:0 0 953.9G 0 disk sdb 8:16 1 14.5G 0 disk `-sdb1 8:17 1 14.5G 0 part zram0 251:0 0 15.5G 0 disk [SWAP]
上記のような表示が出ます。
sdbで表示されているのは、USBのSlackwareインストーラーで、zram0がRAMディスク、sdaがM.2 SSDになります。
パーティショニングツール
Slackwareで使えるパーティショニングツールは、以下の3つです。
- cfdisk
-
cursesベースのTUI(テキストユーザーインターフェース)を持ち、矢印キーやメニュー操作でパーティション作成・削除・タイプ変更などが可能。
MBRとGPTの両方に対応していますが、基本的な操作に特化しており、詳細な設定や高度な機能は制限される。
USBメモリや外付けディスクの簡単なパーティション作成、初心者や直感的な操作を求めるユーザー向け。 - fdisk
-
コマンドラインベースの伝統的なパーティション管理ツール。
元々はMBR専用でしたが、現在はGPTにも対応。
対話的なコマンド入力で細かな操作が可能。
パーティションの作成・削除・タイプ変更・アクティブ設定など多彩な機能を持つ。
システムディスクや複数OSのインストール時など、詳細なパーティション管理が必要な場面で役立つ。 - gdisk
-
GPT(GUIDパーティションテーブル)専用のパーティション管理ツール。
fdiskと似たコマンド体系で、GPTに特化しており、MBRからGPTへの変換やバックアップ、修復などの高度な機能も備える。 2TB超の大容量ディスクやUEFIブート環境でのパーティション管理、GPT特有の操作が必要な場合で役立つ。
ツール名 | 主な用途・特徴 | 対応パーティションテーブル | 操作体系 | 主な利点・用途 |
---|---|---|---|---|
cfdisk | メニュー型TUIで直感的に操作できる | MBR, GPT | テキストUI | 初心者向け、視覚的に分かりやすい |
fdisk | コマンド入力型、伝統的なパーティション管理 | MBR, GPT(新しいバージョン) | コマンドライン | 柔軟で詳細な操作が可能、歴史が長い |
gdisk | GPT専用のパーティション管理 | GPTのみ | コマンドライン | GPTディスクの高度な管理に特化 |
gdiskとは
UEFI用のパーティショニングでは、gdiskを使います。 gdiskとは、GPT fdiskの略です。
gdiskのコマンド
gdiskを起動します。
gdiskは必ず引数でデバイスファイル名が必要です。
デバイスファイル名を入れないと、以下のように表示されます。
root@darkstar:/# gdisk GPT fdisk (gdisk) version 1.0.8 Type device filename, or press <Enter> to exit: _
Enterキーを押すことで、終了できます。
「インストールの前に」で、事前に自分のPCのストレージがどの種別か、BIOSで確認しましょうと説明しました。
lsblk
のコマンドの結果も踏まえて、もし、M.2のSSDにインストールするなら、gdisk /dev/nvme0n1
と入力してみましょう。
SSDなら、gdisk /dev/sda
と入力してみましょう。
root@slackware:/# gdisk /dev/nvme0n1 GPT fdisk (gdisk) version 1.0.10 Partition table scan: MBR: not present BSD: not present APM: not present GPT: not present Creating new GPT entries. Command (? for help): _
次にhelpを表示させてみましょう。?を入力します。
b backup GPT data to a file c change a partition's name d delete a partition i show detailed information on a partition l list known partition types n add a new partition o create a new empty GUID partition table (GPT) p print the partition talbe q quit without saving changes r recovery and transformation option (experts only) s sort partitions t change a partition's type code v verify disk w write table to disk and exit x extra functionality (experts only) ? print this menu Command (? for help): _
自分が正しいデバイスファイルを指定したか、確認しましょう。
pを入力すると、M.2 SSDだと、以下のような出力が表示されます。
Command (? for help): p Disk /dev/nvme0n1: 3907029168 sectors, 1.8 TiB Model: Samsung SSD 990 PRO 2TB Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): 686EA370-15AD-41F6-BF57-1BD6810F1E7E Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 1953525134 Partitions will be aligned on 2048-sector boundaries Total free space is 3907029168 sectors (1.8 TiB) Number Start (sector) End (sector) Size Code Name Command (? for help): _
SSDだと、こんな感じで表示されます。
Command (? for help): p Disk /dev/sda: 1000215216 sectors, 476.9 GiB Model: INTEL SSDSC2KW51 Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): 2152F182-D7FA-4B4E-8250-309151B25A07 Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 1000215182 Partitions will be aligned on 2048-sector boundaries Total free space is 1000215149 sectors (476.9 GiB) Number Start (sector) End (sector) Size Code Name Command (? for help): _
新しいGPTを作成する
まず最初にGUIDのパーティションテーブルを作成します。
この領域に、これから作成するパーティション情報が保存されます。
oを入力して、Enterキーを押します。
Command (? for help): o This option deletes all partitions and creates a new protective MBR. Proceed? (Y/N): Y
「全てのパーティションを削除し、新しい保護用MBRを作成しますか?」と質問されるので、Yを入力し、全てのパーティションを削除し、新しい保護用MBRを作成します。
EFIシステムパーティション
まず最初にEFIシステムパーティションを100MBで作成します。
Command (? for help): n <- nを入力して、Enterキーを押す Partition number (1-128, default 1): <- 何も入力せず、Enterキーを押す First sector (34-1953525134, default = 2048) or {+-}size{KMGTP}: <- 何も入力せず、Enterキーを押す Last sector (2048-1953525134, default = 1953525134) or {+-}size{KMGTP}: +100M <- 100MBをEFIシステム領域として確保 Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): EF00 <- EF00を入力して、Enterキーを押す Change type of partition to 'EFI System' Command (? for help): _
スワップ用パーティションの作成
スワップ領域は必ず作成します。
物理メモリの倍ぐらいで作りましょうというのが昔からの目安でしたが、現在は、もう少し計算式が複雑です。
"How Much Swap Should You Use in Linux?"では、RedHatやCentOSの推奨計算式を紹介しつつ、以下のようにまとめています。
RAMの容量 | スワップのサイズ(ハイバネーションを使わないサーバ用途の場合) | スワップのサイズ(ハイバネーションを使うデスクトップ用途の場合) |
---|---|---|
256MB | 256MB | 512MB |
512MB | 512MB | 1GB |
1GB | 1GB | 2GB |
2GB | 1GB | 3GB |
3GB | 2GB | 5GB |
4GB | 2GB | 6GB |
6GB | 2GB | 8GB |
8GB | 3GB | 11GB |
12GB | 3GB | 15GB |
16GB | 4GB | 20GB |
24GB | 5GB | 29GB |
32GB | 6GB | 38GB |
64GB | 8GB | 72GB |
128GB | 11GB | 139GB |
以下の例では、物理メモリ64GBのPCをデスクトップ用途で使うために、72GBのディスク領域をパーティションで切り、スワップ領域として作成しています。
Command (? for help): n <- nを入力して、Enterキーを押す Partition number (2-128, default 2): <- 何も入力せず、Enterキーを押す First sector (34-1953525134, default = 206848) or {+-}size{KMGTP}: <- 何も入力せず、Enterキーを押す Last sector (206848-1953525134, default = 1953525134) or {+-}size{KMGTP}: +72G <- この例では72GBをスワップ領域として確保 Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): 8200 <- 8200を入力して、Enterキーを押す Change type of partition to 'Linux swap' Command (? for help): _
スワップ領域用パーティションは、8200というコードになります。
/(ルート)用パーティションの作成
次に/(ルート)の領域を確保します。
30GBあれば十分ですが、余裕があるのであれば、100GBぐらいまで増やしても良いでしょう。
/varの領域は、ログを記録に、/tmpは一時的なファイルの書き込みやパッケージ作成などに使うので、ある程度余裕があった方が良いです。
以下の例では、残りの全領域をルート用パーティションとして作成しています。
Command (? for help): n <- nを入力して、Enterキーを押す Partition number (3-128, default 3): <- 何も入力せず、Enterキーを押す First sector (34-1953525134, default = 151201792) or {+-}size{KMGTP}: <- 何も入力せず、Enterキーを押す Last sector (151201792-1953525134, default = 1953525134) or {+-}size{KMGTP}: <- 何も入力せず、Enterキーを押す Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): <- 何も入力せず、Enterキーを押す Change type of partition to 'Linux filesystems' Command (? for help): _
作成したパーティションの確認と確定
最後にpを押して、作ったパーティションを確認します。
Command (? for help): p Disk /dev/nvme0n1: 1953525134 sectors, 931.5 GiB Model: Sabrent Rocket 4.0 1TB Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): 745D34CB-D312-4EFE-AA80-4501A5531CDD Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 1953525134 Partitions will be aligned on 2048-sector boundaries Total free space is 2014 sectors (1007.0 KiB) Number Start (sector) End (sector) Size Code Name 1 2048 206847 100.0 MiB EF00 EFI system partition 2 206848 151201791 72.0 GiB 8200 Linux swap 3 151201792 1953525134 859.4 GiB 8300 Linux filesystem Command (? for help):
これでパーティションを確定させます。
wを入力して、パーティションテーブルをディスクに書き込み、gdiskを終了させます。
Command (? for help): w
Final checks complete. Abount to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y <- Yを入力して、Enterキーを押す
OK; writing new GUID partition table (GPT) to /dev/nvme0n1.
The operation has completed successfully.
root@slackware:/# _
複数台の記憶装置を使う場合
もしも、複数台のSSDやHDD、M.2 SSDを搭載したPCを使い、別のデバイスに/homeや/varなどを割り当てるのであれば、gdisk /dev/sdbのように入力して、同じような作業を行います。
2台目以降はブート用デバイスではなく、データ保存専用デバイスとなるため、EFIシステムパーティションを作る必要はありません。
次は、パッケージの選択とインストールに進みます。