パーティショニング

提供: ArchWiki
2021年9月23日 (木) 11:38時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (カテゴリを追加)
ナビゲーションに移動 検索に移動

関連記事

ハードドライブをパーティショニングして論理的なパーティションを作ることで他から独立してアクセスすることができるようになります。

ハードドライブ全体を1つのパーティションにすることもできますし、ハードドライブの容量を分割して複数のパーティションを作ることもできます。複数のパーティションが必要になる場合は様々です: 例えばデュアル・マルチブートや、スワップパーティションなど。他にも、パーティショニングは論理的にデータを分担する方法としても用いられ、オーディオ・ビデオファイルのためにパーティションを分割するようなことがあります。一般的なパーティショニング形態は下で詳しく記述しています。

それぞれのパーティションは使う前にファイルシステムでフォーマットしなければなりません。

パーティションテーブル

パーティションの情報はパーティションテーブルに保存されます。現在、主に使われている形式は2つ存在します。昔ながらの Master Boot Record と新しい GUID Partition Table。後者は MBR 形式に存在するいくつかの制限を取り除くように改良されています。

ノート: 既存のテーブルは parted /dev/sda print または fdisk -l /dev/sda で確認できます (/dev/sda はデバイス名に置き換えてください)。

Master Boot Record

Master Boot Record (MBR) は、ストレージデバイスの最初の512バイトです。 これには、オペレーティングシステムのブートローダーとストレージデバイスの Partition Table が含まれています。 BIOS システムの ブートプロセス で重要な役割を果たします。 MBR 構造については、Wikipedia:Master boot record#Diskpartitioning を参照してください。

ノート:
  • MBR はパーティションにありません。 これは、デバイスの最初のセクター(物理オフセット0)にあり、最初のパーティションの前にあります。
  • パーティションレスデバイスまたは個々のパーティション内に存在するブートセクターは、代わりに volume boot record (VBR) と呼ばれます。

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

この項目について詳しくは Wikipedia の記事を見て下さい: GUIDパーティションテーブル

パーティションタイプは 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

この記事またはセクションは加筆を必要としています。
理由: Explain when one might want to use a partitionless disk (e.g. in VMs) and when not and why. (議論: トーク:パーティショニング#)

パーティションレスディスク別名 what-is-a-superfloppysuperfloppy は、ストレージデバイス全体を占める1つのファイルシステムを持つパーティションテーブルです。 パーティションレスデバイスに存在するブートセクタは、volume boot record (VBR) と呼ばれます。

Btrfs パーティショニング

この項目について詳しくは Wikipedia の記事を見て下さい: Btrfs

Btrfs はデータストレージデバイス全体を占有して MBRGPT パーティションスキームを置き換えることができます。詳しい説明は Btrfs#パーティショニング を見て下さい。

パーティション形態

ハードドライブをパーティショニングするのに厳格なルールはありませんが、以下に一般的なガイダンスを記します。どうパーティショニングするかは、使用できるディスク容量の制限のほかに、求められる柔軟性・スピード・セキュリティなどの理由で決定されます。ユーザーの決定はコンピュータを使う癖や条件によって様々なものになりえます。Arch Linux と Windows OS のデュアルブートを考えているのなら、Windows と Arch のデュアルブートを読んでください。

警告: ブートローダのための領域を残しておくことを忘れないで下さい。MBR や GRUB-Legacy では問題になりませんでしたが、最近のパーティションスキームでは特別な、小さなパーティションが必要になることがあります。

シングル root パーティション

このスキームが一番シンプルで、ほとんどの場合これで十分です。必要に応じてスワップファイルを作成することもでき、簡単にサイズを変更できます。一般的に、まず1つのパーティション / で初めて、それから、RAID や暗号化、共有メディアパーティションなどの目的にあわせてパーティションを分割するのは道理にかなっています。GPT でパーティションされた BIOS システムに GRUB をインストールするときは追加の BIOS boot パーティションが必要になるので注意してください。

パーティションを分割する

パーティションをパス毎に分割することで異なるファイルシステムとマウントオプションが使えるようになります。メディアパーティションなどの場合、オペレーティングシステム間で共有できます。

マウントポイント

パーティションを分割すると以下のマウントポイントを選ぶことができます、実際の必要にあわせて決めてください。

Root パーティション

root ディレクトリは階層のトップであり、プライマリファイルシステムがマウントされ他の全てのファイルシステムの幹になります。すべてのファイルとディレクトリは root ディレクトリ / の下に表示されます、それらが異なる物理デバイスに保存されている場合でも同様です。root ファイルシステムには、システムのブート・リストア・リカバー・リペアに必要なものがなければなりません。そのため、/ 下の特定ディレクトリは分割パーティションになりえません。

/ パーティション、または root パーティションは必須の、一番重要なパーティションです。このパーティションで他の全てのパーティションを置き換えることができます。

警告: (/boot 以外の) 起動に必要なディレクトリはかならず同じパーティション /initramfs によってユーザースペースの初期にマウントされるパーティションに配置されなくてはなりません。起動に必要なディレクトリ: /etc/usr [1]

/boot

/boot ディレクトリにはブートローダの設定ファイルや実行領域だけでなく、カーネルや ramdisk イメージも入ります。またカーネルがユーザースペースのプログラムを起動する前に使われるデータも保存されます。/boot は通常のシステムオペレーションには必要ありませんが、起動中やカーネルアップグレードの時(initial ramdisk を再生成する時)だけ使われます。

ソフトウェア RAID0 (ストライプ) をインストールするには /boot パーティションを分割して作る必要があります。

ノート: 他のファイルシステムのドライバーを含んでいない UEFI ブートローダーを使用してブートする場合、ESP/boot にマウントすることが推奨されます。例えば EFISTUBsystemd-boot などのローダーが該当します。

/home

/home ディレクトリにはユーザー設定ファイル("ドットファイル"と呼ばれます)、キャッシュ、アプリケーションのデータ、メディアファイルが含まれます。

/home を分割することで / を別個にパーティションしなおすことができますが、分割してなくとも /home に触れずに Arch を再インストールすることはできます - 他のトップレベルディレクトリは削除する必要があり、それから pacstrap を実行することができます。

異なるディストリビューションのユーザー間で home ディレクトリを共有するべきではありません、なぜならソフトウェアのバージョンやパッチによって互換性がないことがあるからです。代わりに、メディアパーティションを共有したり、少なくとも、同じ /home パーティションにある別の home ディレクトリを使うなどしてください。

/var

/var ディレクトリにはスプールディレクトリ・ファイル、管理用のログデータ、pacman のキャッシュ、ABS ツリーなどの可変データが置かれます。キャッシングやロギングなどに使われるため頻繁に読み書きされます。分割したパーティションに配置することで、ログなどによってディスク容量が不足するのを回避できます。

/usr を読み込み専用でマウントするための選択肢としても存在します。歴史的に、(インストールやシステムメンテナンスと対照的に)システムオペレーションでは /var に置かれるものは全て /usr に書き出されます。

ノート: /var には小さいファイルが多く入ります。もしパーティションを分割するなら、ファイルシステムタイプ(下を見て下さい)の選択ではこのことを考えて下さい。

/tmp

systemd によって tmpfs としてマウントされることで、デフォルトで分割パーティションになっています。

スワップ

スワップパーティションは仮想メモリを提供します。スワップファイルを使うことも考えてください、パーティションを作るのに比べてパフォーマンスのオーバーヘッドがないばかりでなく、必要に応じてより簡単にリサイズできます。swap パーティションは基本的にオペレーションシステム間で共有することができますが、ハイバネーションが使われる場合はそうでありません。

ノート: スワップパーティションサイズについての古い法則は suspend-to-disk を使う場合はあてはまりません。サスペンドメソッドはデフォルトで利用できるメモリの 40% のイメージを使います。TuxOnIce では、atomic コピーは圧縮して通常約 70% だけ使います。[2]

パーティションの大きさはどうすればいいですか?

ノート:
  • 以下はただの推奨事項です。パーティションのサイズに関する厳格なルールは存在しません。
  • 可能であれば、それぞれのファイルシステムに 25% の容量を加えて、フラグメンテーションを防いだり将来の拡張のために余剰を残して下さい。

パーティションのサイズは個々人の好みによりますが、以下の情報が約に立つかもしれません:

/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 に含まれているターミナルパーティショニングツール。
https://www.kernel.org/ || util-linux
  • cfdisk — ncurses ライブラリを使ったターミナルパーティショニングツール。
https://www.kernel.org/ || util-linux
  • gdisk — fdisk の GPT バージョン。
http://www.rodsbooks.com/gdisk/ || gptfdisk
  • cgdisk — cfdisk の GPT バージョン。
http://www.rodsbooks.com/gdisk/ || gptfdisk
  • sgdisk — gdisk のスクリプタブルバージョン。
http://www.rodsbooks.com/gdisk/sgdisk-walkthrough.html || gptfdisk
  • GNU Parted — ターミナルパーティショニングツール。
https://www.gnu.org/software/parted/parted.html || parted
  • GParted — GTK によるグラフィカルツール。
http://gparted.sourceforge.net/ || gparted
  • Partitionmanager — Qt によるグラフィカルツール。
https://sourceforge.net/projects/partitionman/ || partitionmanager

ユーティリティを選択するときは以下の表を参考にしてください:

ユーザーの操作 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
警告: /usr/bin/blockdev--getalignoff オプションを使ってパーティションのアライメントを確認する方法は信頼性がない という報告があります。

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 フラッシュドライブを作成する場合に重要です。 fdiskgdisk などの従来のツールを使用してこの問題を解決することはできませんが、両方の種類の 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.

参照