パーティショニング
ハードドライブをパーティショニングして論理的なパーティションを作ることで他から独立してアクセスすることができるようになります。
ハードドライブ全体を1つのパーティションにすることもできますし、ハードドライブの容量を分割して複数のパーティションを作ることもできます。複数のパーティションが必要になる場合は様々です: 例えばデュアル・マルチブートや、スワップパーティションなど。他にも、パーティショニングは論理的にデータを分担する方法としても用いられ、オーディオ・ビデオファイルのためにパーティションを分割するようなことがあります。一般的なパーティショニング形態は下で詳しく記述しています。
それぞれのパーティションは使う前にファイルシステムでフォーマットしなければなりません。
パーティションテーブル
パーティションの情報はパーティションテーブルに保存されます。現在、主に使われている形式は2つ存在します。昔ながらの Master Boot Record と新しい GUID Partition Table。後者は MBR 形式に存在するいくつかの制限を取り除くように改良されています。
Master Boot Record
Master Boot Record (MBR) は、ストレージデバイスの最初の512バイトです。 これには、オペレーティングシステムのブートローダーとストレージデバイスの Partition Table が含まれています。 BIOS システムの ブートプロセス で重要な役割を果たします。 MBR 構造については、Wikipedia:Master boot record#Diskpartitioning を参照してください。
Master Boot Record (bootstrap code)
MBRの最初の440バイトは、bootstrap code 領域 です。 BIOS システムでは、通常、ブートローダーの最初のステージが含まれています。 bootstrap code は、バックアップ、バックアップからの復元、または消去することができます usingdd
Master Boot Record (partition table)
MBR Partition Table (DOS または MS-DOS Partition Table とも呼ばれます) には、次の3種類のパーティションがあります。
- Primary (プライマリ)
- Extended (拡張)
- Logical (論理)
GUID Partition Table
パーティションタイプは Primary しかありません。ディスクや RAID ボリュームごとに作れるパーティションの数には制限がありません。
GPT か MBR の選択
GUID Partition Table (GPT) は新しい、最新のパーティションスタイルです。古い Master Boot Record (MBR) システムを置き換えることを目指しています。GPT には、MS-DOS が使われていた時代にタイムスリップしてしまったような癖がある MBR に対してメリットがいくつかあります。フォーマッティングツールである fdisk (MBR) と gdisk (GPT) の最近の開発によって、同じくらい簡単に GPT や MBR を使うことができパフォーマンスを最適化できます。
要約すると:
- ブートローダに GRUB Legacy を使う場合、MBR を使うべきです。
- 古い BIOS を使う Windows (32ビット、64ビット両方) とのデュアルブートをするなら、MBR を使うべきです。
- BIOS の代わりに UEFI を使う64ビットの Windows とデュアルブートをするなら、GPT を使うべきです。
- 古いハードウェアにインストールする場合 (特にノートパソコンにインストールする場合)、BIOS が GPT をサポートしていない可能性があるので MBR を選択しましょう。
- 上の条件に当てはまらないなら、自由に GPT と MBR を選んでください。GPT の方が新しいので、ここでの推奨は GPT です。
- UEFI ブートではいつでも GPT を使うことが推奨されます。UEFI ファームウェアによっては UEFI-MBR ブートが出来ないからです。
Partitionless disk
パーティションレスディスク別名 what-is-a-superfloppysuperfloppy は、ストレージデバイス全体を占める1つのファイルシステムを持つパーティションテーブルです。 パーティションレスデバイスに存在するブートセクタは、volume boot record (VBR) と呼ばれます。
Btrfs パーティショニング
Btrfs はデータストレージデバイス全体を占有して MBR や GPT パーティションスキームを置き換えることができます。詳しい説明は Btrfs#パーティショニング を見て下さい。
パーティション形態
ハードドライブをパーティショニングするのに厳格なルールはありませんが、以下に一般的なガイダンスを記します。どうパーティショニングするかは、使用できるディスク容量の制限のほかに、求められる柔軟性・スピード・セキュリティなどの理由で決定されます。ユーザーの決定はコンピュータを使う癖や条件によって様々なものになりえます。Arch Linux と Windows OS のデュアルブートを考えているのなら、Windows と Arch のデュアルブートを読んでください。
シングル root パーティション
このスキームが一番シンプルで、ほとんどの場合これで十分です。必要に応じてスワップファイルを作成することもでき、簡単にサイズを変更できます。一般的に、まず1つのパーティション /
で初めて、それから、RAID や暗号化、共有メディアパーティションなどの目的にあわせてパーティションを分割するのは道理にかなっています。GPT でパーティションされた BIOS システムに GRUB をインストールするときは追加の BIOS boot パーティションが必要になるので注意してください。
パーティションを分割する
パーティションをパス毎に分割することで異なるファイルシステムとマウントオプションが使えるようになります。メディアパーティションなどの場合、オペレーティングシステム間で共有できます。
マウントポイント
パーティションを分割すると以下のマウントポイントを選ぶことができます、実際の必要にあわせて決めてください。
Root パーティション
root ディレクトリは階層のトップであり、プライマリファイルシステムがマウントされ他の全てのファイルシステムの幹になります。すべてのファイルとディレクトリは root ディレクトリ /
の下に表示されます、それらが異なる物理デバイスに保存されている場合でも同様です。root ファイルシステムには、システムのブート・リストア・リカバー・リペアに必要なものがなければなりません。そのため、/
下の特定ディレクトリは分割パーティションになりえません。
/
パーティション、または root パーティションは必須の、一番重要なパーティションです。このパーティションで他の全てのパーティションを置き換えることができます。
/boot
/boot
ディレクトリにはブートローダの設定ファイルや実行領域だけでなく、カーネルや ramdisk イメージも入ります。またカーネルがユーザースペースのプログラムを起動する前に使われるデータも保存されます。/boot
は通常のシステムオペレーションには必要ありませんが、起動中やカーネルアップグレードの時(initial ramdisk を再生成する時)だけ使われます。
ソフトウェア RAID0 (ストライプ) をインストールするには /boot
パーティションを分割して作る必要があります。
/home
/home
ディレクトリにはユーザー設定ファイル("ドットファイル"と呼ばれます)、キャッシュ、アプリケーションのデータ、メディアファイルが含まれます。
/home
を分割することで /
を別個にパーティションしなおすことができますが、分割してなくとも /home
に触れずに Arch を再インストールすることはできます - 他のトップレベルディレクトリは削除する必要があり、それから pacstrap を実行することができます。
異なるディストリビューションのユーザー間で home ディレクトリを共有するべきではありません、なぜならソフトウェアのバージョンやパッチによって互換性がないことがあるからです。代わりに、メディアパーティションを共有したり、少なくとも、同じ /home
パーティションにある別の home ディレクトリを使うなどしてください。
/var
/var
ディレクトリにはスプールディレクトリ・ファイル、管理用のログデータ、pacman のキャッシュ、ABS ツリーなどの可変データが置かれます。キャッシングやロギングなどに使われるため頻繁に読み書きされます。分割したパーティションに配置することで、ログなどによってディスク容量が不足するのを回避できます。
/usr
を読み込み専用でマウントするための選択肢としても存在します。歴史的に、(インストールやシステムメンテナンスと対照的に)システムオペレーションでは /var
に置かれるものは全て /usr
に書き出されます。
/tmp
systemd によって tmpfs
としてマウントされることで、デフォルトで分割パーティションになっています。
スワップ
スワップパーティションは仮想メモリを提供します。スワップファイルを使うことも考えてください、パーティションを作るのに比べてパフォーマンスのオーバーヘッドがないばかりでなく、必要に応じてより簡単にリサイズできます。swap パーティションは基本的にオペレーションシステム間で共有することができますが、ハイバネーションが使われる場合はそうでありません。
パーティションの大きさはどうすればいいですか?
パーティションのサイズは個々人の好みによりますが、以下の情報が約に立つかもしれません:
- /boot — 200 MB
/boot
パーティションに必要な容量は約 100 MB です。ただし複数のカーネル・ブートイメージを使うことを考えると、200 から 300 MB がベターでしょう。- / — 15-20 GB
- root ファイルシステム (
/
) には基本的に/usr
ディレクトリが含まれるので、必要な容量はインストールするソフトウェアの数によります。最近のハードディスクを使うユーザーのほとんどは 15-20 GB で十分だと思います。このパーティションにスワップファイルを保存する予定ならば、サイズをやや大きめにする必要があるでしょう。 - /var — 8-12 GB
/var
ファイルシステムには ABS ツリーや pacman キャッシュなどのデータを収納します。パッケージのキャッシュを保持することはダウングレードをするときなどに役立つので、/var
はサイズが増えていく傾向があります。特に pacman のキャッシュはシステムを拡張したりアップデートするときに増加します。ただし、容量が足らなくなったときは問題なくキャッシュを削除可能です。デスクトップシステムでは/var
に必要な容量は 8-12GB ほどで、インストールされるソフトウェアの数によります。- /home — [不定]
/home
ファイルシステムは一般的にユーザーのデータ(ダウンロードしたファイル・マルチメディアなど)を置くところです。デスクトップシステムでは、/home
はドライブの中で一番大きなファイルシステムにするのが普通です。- swap — [不定]
- 歴史的に、物理メモリの容量の2倍のスワップパーティションを用意するべきという一般法則がありました。より大容量のメモリがコンピュータに積まれるようになり、この法則はすでに現状にあてはまりません。メモリが 512 MB 以下のマシンでは、2倍ルールが基本的に適合します。大容量のメモリ(1024MB 以上)を積んでいるときは、スワップパーティションは小さく、または作らなくてもかまわないでしょう。2GB 以上の物理 RAM を持っているなら、スワップパーティションがないほうが一般的に良いパフォーマンスを発揮すると思われます。
- /data - [不定]
- 全てのユーザーによって共有するファイルを置くために "data" パーティションをマウントしても良いでしょう。同じ目的で
/home
パーティションを使ってもかまいません。
パーティショニングツール
- fdisk — Linux に含まれているターミナルパーティショニングツール。
- cfdisk — ncurses ライブラリを使ったターミナルパーティショニングツール。
- cgdisk — cfdisk の GPT バージョン。
- sgdisk — gdisk のスクリプタブルバージョン。
- GNU Parted — ターミナルパーティショニングツール。
- GParted — GTK によるグラフィカルツール。
- Partitionmanager — Qt によるグラフィカルツール。
ユーティリティを選択するときは以下の表を参考にしてください:
ユーザーの操作 | MBR | GPT |
---|---|---|
ダイアログ | fdisk parted |
fdisk gdisk parted |
擬似グラフィック | cfdisk | cfdisk cgdisk |
非インタラクティブ | sfdisk parted |
sfdisk sgdisk parted |
グラフィカル | GParted partitionmanager |
GParted partitionmanager |
パーティションアライメント
パフォーマンスや寿命を最適化するのに、正しいパーティションアライメントを設定することは重要です。これはファイルシステムレベルだけでなくハードウェアレベルでも全ての I/O 操作に決まったブロックがあるためです。アライメントの鍵は、使用しているハードウェアに応じて、特定のブロックサイズにあわせてパーティショニングすることです。パーティションがブロックサイズの倍数で始まるように整列されてない場合、パーティションの開始オフセットによって全てが歪むので、ファイルシステムのアライメントは無意味になってしまいます。
ハードディスクドライブ
伝統的に、ハードドライブを扱うときには、読み書きするデータのシリンダー・ヘッド・セクタを指定していました (CHS アドレッシング)。これらは放射状に位置していて、ドライブヘッド(=プラッタ)とデータの軸位置は別々でした。現在のロジカルブロックアドレッシングでは、ハードドライブ全体が1つの連続したデータストリームとして扱われており、セクタという言葉はアドレス指定できる一番小さな単位を示しています。
標準のセクタサイズは 512B ですが、最近の高容量なハードドライブはもっと大きな値、大抵は 4KiB を使っています。512B より大きい値を使うことは Advanced Format と呼ばれます。
ソリッドステートドライブ
ソリッドステートドライブはフラッシュメモリを使用しているため、ハードドライブとは事情が大きく異なります。ランダムアクセスによる読み取りが可能な一方、消去 (書き換えとランダム書き込み) はブロック単位でしか行うことができません。さらに、消去ブロックサイズ (erase block size, EBS) は標準のブロックサイズよりもずっと大きくなっており、例えば 128KiB と 4KiB だったりするため、EBS の倍数にアライメントする必要があります。NVMe ドライブの中には 4KiB にアライメントする必要があるドライブがありますが、全てではありません。
パーティショニングツール
過去、正しいアライメントをするにはパーティションの際に手動で計算して設定する必要がありました。最近のパーティションツールはほとんど自動的にパーティションアライメントを実行します:
- fdisk
- gdisk
- gparted
- parted
既存のパーティションが存在する場合、parted を使ってデバイスのパーティションのアライメントを確認できます。例えば、/dev/sda
の1番目のパーティションのアライメントを確認するには:
# parted /dev/sda (parted) align-check optimal 1 1 aligned
GPT カーネルサポート
カーネル構成の CONFIG_EFI_PARTITION
オプションは、カーネルでの GPT サポートを有効にします(名前は EFI PARTITION ですが) このオプションはカーネルに組み込まれている必要があり、ロード可能なモジュールとしてコンパイルされてはなりません。 このオプションは、 GPT ディスクがデータストレージのみに使用され、起動には使用されない場合でも必要です。 このオプションは、すべての Arch の 公式にサポートされているカーネル でデフォルトで有効になっています。 カスタムカーネルの場合は、 CONFIG_EFI_PARTITION=y
を実行してこのオプションを有効にします。
トラブルシューティング
古い BIOS をだまして GPT から起動させる
一部の古い BIOS (2010年以前のもの) は、ブートセクターを解析しようとし、ブート可能な MBR パーティションが含まれていない場合はブートを拒否します。これは、このディスクでGPTを使用する場合に問題になります。これは、 BIOS の観点から、タイプee
の起動不可能な MBR パーティションが1つだけ含まれているためです(つまり、保護 MBR パーティション) fdisk -t mbr /dev/sda
を使用して、保護MBRエントリを起動可能としてマークできます。これは一部の BIOS で機能します。ただし、 UEFI 仕様では、保護 MBR パーティションエントリを起動できないように禁止されており、 UEFI ベースのボードはレガシーブートモードでもこれを考慮します。したがって、これは、最新の UEFI ベースのボードと起動可能な MBR パーティションの検索を要求する古い BIOS の両方で起動することになっている GPT ベースの USB フラッシュドライブを作成する場合に重要です。 fdisk や gdisk などの従来のツールを使用してこの問題を解決することはできませんが、両方の種類の BIOS に適した偽の MBR パーティションエントリをバイトシーケンスとして手動で作成することはできます。
以下のコマンドは、2番目の MBR パーティションスロットを上書きし、タイプ0 (つまり未使用) の起動可能なパーティションを追加して、デバイスの最初のセクターのみをカバーします。 GPT や、通常は保護 MBR パーティションを含む最初の MBR パーティションエントリには干渉しません。
# printf '\200\0\0\0\0\0\0\0\0\0\0\0\001\0\0\0' | dd of=/dev/sda bs=1 seek=462
最終的に次のようになります:
# fdisk -t mbr -l /dev/sda
Disk /dev/sda: 232.9 GiB, 250059350016 bytes, 488397168 sectors Disk model: ST3250820AS Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Device Boot Start End Sectors Size Id Type /dev/sda1 1 488397167 488397167 232.9G ee GPT /dev/sda2 * 0 0 1 512B 0 Empty Partition table entries are not in disk order.