パーティショニング
ハードドライブをパーティショニングして論理的なパーティションを作ることで他から独立してアクセスすることができるようになります。
ハードドライブ全体を1つのパーティションにすることもできますし、ハードドライブの容量を分割して複数のパーティションを作ることもできます。複数のパーティションが必要になる場合は様々です: 例えばデュアル・マルチブートや、スワップパーティションなど。他にも、パーティショニングは論理的にデータを分担する方法としても用いられ、オーディオ・ビデオファイルのためにパーティションを分割するようなことがあります。一般的なパーティショニング形態は下で詳しく記述しています。
それぞれのパーティションは使う前にファイルシステムでフォーマットしなければなりません。
目次
パーティションテーブル
パーティションの情報はパーティションテーブルに保存されます。現在、主に使われている形式は2つ存在します。昔ながらの Master Boot Record と新しい GUID Partition Table。後者は MBR 形式に存在するいくつかの制限を取り除くように改良されています。
Master Boot Record
MBR はもともとパーティションを4つまでサポートしていましたが、後になって、この制限を回避するために拡張・論理パーティションが導入されました。
パーティションには3つのタイプがあります:
- Primary (プライマリ)
- Extended (拡張)
- Logical (論理)
プライマリパーティションは起動することができるパーティションで、1つのディスクもしくは RAID ボリュームに対して4つまでプライマリパーティションを作成できます (MBR)。パーティションを4つ以上作りたいときは、拡張パーティションを用いてその中に論理パーティションを内包する形で構成する必要があります。拡張パーティションは論理パーティションのコンテナにすることができます。1つのハードディスクに作れる拡張パーティションは1つだけです。拡張パーティションはプライマリパーティションとしてもカウントされます。もしディスクに拡張パーティションがあるなら、作れるプライマリパーティションは3つになります(3つのプライマリと1つの拡張で合計4つ)。論理パーティションの数は他のパーティションと違って制限がありません。Windows とのデュアルブートをするには Windows 本体をプライマリパーティションに含める必要があります。
ディスクをパーティション番号には、次のような法則があります。まずプライマリーパーティションを sda1
から sda2
、sda3
と言う順番で番号を振っていき、拡張パーティションは sda4
になります。sda4
上の論理パーティションが sda5
, sda6
,... という具合につづきます。
GUID Partition Table
パーティションタイプは Primary しかありません。ディスクや RAID ボリュームごとに作れるパーティションの数には制限がありません。
Btrfs パーティショニング
Btrfs はデータストレージデバイス全体を占有して MBR や GPT パーティションスキームを置き換えることができます。詳しい説明は Btrfs パーティショニングを見て下さい。
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 を使うべきです。
- 上の条件に当てはまらないなら、自由に GPT と MBR を選んでください。GPT の方が新しいので、ここでの推奨は GPT です。
- UEFI ブートではいつでも GPT を使うことが推奨されます。UEFI ファームウェアによっては UEFI-MBR ブートが出来ないからです。
パーティション形態
ハードドライブをパーティショニングするのに厳格なルールはありませんが、以下に一般的なガイダンスを記します。どうパーティショニングするかは、使用できるディスク容量の制限のほかに、求められる柔軟性・スピード・セキュリティなどの理由で決定されます。ユーザーの決定はコンピュータを使う癖や条件によって様々なものになりえます。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 がベターでしょう。- /root — 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 ライブラリを使ったターミナルパーティショニングツール。
- gdisk — fdisk の GPT バージョン。
- cgdisk — cfdisk の GPT バージョン。
- sgdisk — gdisk のスクリプタブルバージョン。
- GNU Parted — ターミナルパーティショニングツール。
- GParted — GTK によるグラフィカルツール。
- Partitionmanager — Qt によるグラフィカルツール。
- QtParted — Partitionmanager の類似ツール、AUR から利用可能。
パーティションアライメント
パフォーマンスや寿命を最適化するのに、正しいパーティションアライメントを設定することは重要です。これはファイルシステムレベルだけでなくハードウェアレベルでも全ての I/O 操作に決まったブロックがあるためです。アライメントの鍵は、使用しているハードウェアに応じて、特定のブロックサイズにあわせてパーティショニングすることです。パーティションがブロックサイズの倍数で始まるように整列されてない場合、パーティションの開始オフセットによって全てが歪むので、ファイルシステムのアライメントは無意味になってしまいます。
ハードディスクドライブ
伝統的に、ハードドライブを扱うときには、読み書きするデータのシリンダー・ヘッド・セクタを指定していました (CHS アドレッシング)。これらは放射状に位置していて、ドライブヘッド(=プラッタ)とデータの軸位置は別々でした。現在のロジカルブロックアドレッシングでは、ハードドライブ全体が1つの連続したデータストリームとして扱われており、セクタという言葉はアドレス指定できる一番小さな単位を示しています。
標準のセクタサイズは 512B ですが、最近の高容量なハードドライブはもっと大きな値、大抵は 4KiB を使っています。512B より大きい値を使うことは Advanced Format と呼ばれます。
ソリッドステートドライブ
ソリッドステートドライブはフラッシュメモリを使用しているため、ハードドライブとは事情が大きく異なります。ランダムアクセスによる読み取りが可能な一方、消去 (書き換えとランダム書き込み) はブロック単位でしか行うことができません。さらに、消去ブロックサイズ (erase block size, EBS) は標準のブロックサイズよりもずっと大きくなっており、例えば 128KiB と 4KiB だったりするため、EBS の倍数にアライメントする必要があります。
パーティショニングツール
過去、正しいアライメントをするにはパーティションの際に手動で計算して設定する必要がありました。最近のパーティションツールはほとんど自動的にパーティションアライメントを実行します:
- fdisk
- gdisk
- gparted
- parted
パーティションが整列しているか確認するには、以下のように /usr/bin/blockdev
を使って確かめて下さい。'0' が帰ってくるならば、パーティションはアライメントされています:
# blockdev --getalignoff /dev/<partition> 0
GPT を使う - 新しい方法
Gdisk の使い方
fdisk
と同じ機能を持つ GPT 用のツールである、gdisk
によって、ほとんどの全ての SSD と互換性のある 2048 セクター (または 1024KiB) ブロックサイズベースの自動パーティションアライメントができます。GNU parted も GPT をサポートしていますが、パーティションのアライニングについてはあまりユーザーフレンドリーとは言えません。Arch のインストール ISO による環境には gdisk コマンドが含まれています。インストールした後に必要ならば、gptfdisk パッケージで gdisk を利用することができます。
gdisk の典型的な使用方法の概要:
- root であなたのドライブに対して
gdisk
を起動して下さい (disk-device は/dev/sda
などに置き換えて下さい):
# gdisk disk-device
- ドライブが新品の時や、やり直しをしたい場合は、空の GUID パーティションテーブル (GPT) を
o
コマンドで作成します。 n
コマンドで新しいパーティションを作ります (プライマリ/最初のパーティション)。- 新規パーティションの場合、gdisk は一番高いアライメントを選択します。そうでない場合は、全てのパーティションオフセットを分ける2つのうち大きい方を選択します。
- 2048番目より前のセクタから開始するよう選択したときは gdisk は自動的に2048番目のディスクセクタからパーティションが始まるように移動します。2048セクタのアライメントを確実にするためです (1セクタは 512B なので、どんな SSD の NAND 消去ブロックにも丁度合う 1024KiB アライメントになります)。
+x{M,G}
形式を使ってパーティションを x メビバイト・ギガバイトまで拡張します。アライメントのサイズ (1024kiB) の倍数でないサイズを選んだ場合、gdisk はパーティションを一番近い倍数にまで縮小させます。例えば、15 GiB のパーティションを作りたい場合は、+15G
と入力してください。残り容量全て使うときは、エンターだけ押すか、+0
と入力します。- パーティションの type id を選択します、ほとんどの場合はデフォルトの
Linux filesystem
(コード8300
) で問題ありません。L
を押せばコードの一覧が表示されます。LVM を使うつもりならばLinux LVM
(8e00
) を選択してください。 - 同じようにして他のパーティションも割り振ります。
- テーブルをディスクに書き込み
w
コマンドで終了します。 - ファイルシステムで新しいパーティションをフォーマットしてください。
MBR を使う - レガシーな方法
MBR を使う場合、パーティションテーブルを編集するためのユーティリティは fdisk と呼ばれています。最近のバージョンの fdisk はデフォルトの表示単位にシリンダーを使用する古いシステムのサポートや、MS-DOS との互換性をデフォルトで廃止しています。最新の fdisk は自動的に全てのパーティションを2048セクタ (1024 KiB) にアライメントをするため、SSD メーカーによって使用されている EBS サイズ全てで問題なく整列されます。つまりデフォルト設定で正しいアライメントが行われます。
昔の fdisk は、デフォルトの表示単位にシリンダーを使っていて、SSD のアライメントと干渉する MS-DOS との互換性も残っていました。そのため、2008-2009年あたりのインターネットのガイドを調べたら、大げさに書かれているのが見て取れると思います。最新の fdisk では、物事はもっとシンプルになり、そのことはこの記事にも反映されています。
Fdisk の使い方
- あなたのドライブを指定して
fdisk
を root で起動します (disk-device は/dev/sda
などに置き換えて下さい):
# fdisk disk-device
- ドライブが新品の時や、やり直しをしたい場合は、空の DOS パーティションテーブルを
o
コマンドで作成します。 n
コマンドで新しいパーティションを作ります (プライマリ/最初のパーティション)。+xG
形式を使ってパーティションを x ギガバイトまで拡張します。例えば、15 GiB のパーティションを作りたい場合は、+15G
と入力してください。t
コマンドで、パーティションのシステム ID を Linux のデフォルトタイプ (type 83
) から望ましいタイプに変更してください。これは任意のステップであり、スワップ、NTFS、LVM などの異なるタイプのパーティションを作りたいときにしてください。l
コマンドを使うことで利用できるパーティションタイプを全て一覧することができます。- 同じようにして他のパーティションも割り振ります。
w
コマンドでテーブルをディスクに書き込み終了します。- ファイルシステムで新しいパーティションをフォーマットしてください。