Arch Linux インストール (2)

はじめに
ここからは、HDD/SSD などのストレージに Arch Linux をインストールするための準備を行います。

新品のディスクに新規にインストールする場合、以下の処理をすべて行う必要がありますが、ディスクの構成はそのままで OS のみ再インストールしたい場合は、一部行わなくてもよい処理があります。
パーティショニング
パーティショニングは、HDD などのディスクを、複数の領域に分割します。
一度もパーティショニングしていない新品のディスクの場合や、ディスク全体をすべて消去してパーティショニングをやり直したい場合に行う必要があります。

すでにパーティショニングが済んでいる状態で、現在のパーティション状態を維持したまま、OS だけ再インストールしたい場合は、行う必要はありません。
フォーマット
フォーマットは、各パーティションを実際に使えるようにするための初期化処理です。
パーティションの中身をクリアして、空の状態にし、ファイルシステム別に情報を書き込みます。

パーティショニングした後など、一度もフォーマットしてないパーティションがある場合は、そのパーティションを使う前に行う必要があります。
(パーティションごとにそれぞれフォーマットを行います)

OS のインストール先となるパーティションは、インストールする前にそのパーティションを空の状態にする必要があるため、常にフォーマットを行う必要があります。

データ用など、OS システムとは関係ないパーティションに関しては、すぐに使わないならフォーマットしなくても構いません。
(インストール後の Linux 上で後からフォーマットすることもできる)

データ用などのパーティションにおいて、すでにフォーマット済みでファイルを置いて使用している場合、そのままの状態にしておきたいなら、フォーマットする必要はありません。
パーティションについて
パーティションの説明
HDD などのディスクは、全体の容量を分割し、複数の 「パーティション」 と呼ばれる領域に分けて、それぞれを独立して使うことができます。
例えば、OS システム用やデータ保存用など、使用用途別にパーティションを分けて使うことができます。

決められた制限内で自由に数やサイズを決められますが、UEFI + GPT 環境ではブート (起動) 用のパーティションが一つ必要になるなど、一部必須となるパーティションがあります。
Linux の場合、他にも、スワップや /boot、/home、/var などは、一つのパーティションに割り当てることができます。

一つのディスクに複数の OS をインストールして使いたい場合は、一つのパーティションに一つの OS をインストールすることになります。

必須となるパーティションは別として、最低でも、「Arch Linux インストール用」 と 「データ用」 の2つのパーティションを作った方が良いでしょう。
普段から、データ用のパーティションに常に保存しておきたいファイルを置いておけば、再インストールする際に、いちいちデータをバックアップしたりする必要がなくなります。
注意点
パーティショニングは、新品のディスクを新しく設定する時や、ディスクを全消去してパーティショニングを一からやり直したい時に行います。

一度設定してしまうと、後からサイズなどを変更するのはリスクが高いので、最初のパーティショニング時に数やサイズをすべて決めておいた方が良いです。

ディスクの容量に余裕がある場合、後から新しいパーティションが欲しくなった時のために、予備のパーティションを作っておいてもよいでしょう。
パーティションテーブル
ディスク内の先頭部分に 「パーティションテーブル」 と呼ばれる情報を書き込むことで、パーティションを設定することができます。

パーティションテーブルには、主に2つのフォーマットがあり、好きな方を選択することができます。
MBR (Master Boot Record)」 は古く、「GPT (GUID Partition Table)」 は新しいフォーマットです。

MBR
  • ディスク全体の容量は 2 TB までしか認識しない。
  • 一つのディスク内に、プライマリパーティション (メインのパーティション) は 4 つまで。
  • パーティションを 4 つ以上作る場合は、プライマリパーティションの一つを拡張パーティションとして作成し、その中に論理パーティションを複数作る。
  • Windows OS がインストールできるのは、プライマリパーティションだけ。
    (Linux は論理パーティションでもインストール可能)
  • BIOS モードで使うなら、こちらを使うべき。
GPT
  • ディスク全体の容量は 8 ZB まで認識できる。
    (ZB = 2 の 70 乗バイト。ZB > EB > PB > TB > GB)
  • パーティションは最大 128 個まで作成できる (すべてプライマリパーティション扱い)。
  • BIOS モードでは使えない場合があるので、UEFI モードで使うべき。
  • UEFI に対応していない古い Windows OS では使えない。

MBR は古い規格のため、制限が厳しいですが、古い Windows OS などでも使えます。
GPT は新しいため色々と便利ですが、古いパソコンや OS では使えない場合があります。

基本的に、BIOS モードを使うなら MBR、UEFI を使うなら GPT を選択することになります。
(Windows の場合は、この2通りの選択肢しかない。Linux の場合、UEFI + MBR、BIOS + GPT も使える場合はあるが、推奨されない)

パソコンが比較的新しく、UEFI に対応しているなら、GPT を使うのがベストです。
古いパソコン (UEFI に対応していない) や、古い Windows OS とデュアルブートしたい場合などは、MBR を使うことになります。
パーティショニングの基本
>> パーティショニング - ArchWiki

すでにディスクがパーティショニング済みで、その状態を維持したい場合、パーティショニングは行わずにフォーマットへ進んでください。
コマンド
パーティショニングを行うためのコマンドは、インストールシステム内にいくつか用意されています。

MBR なら fdisk、cfdisk
GPT なら gdisk、cgdisk
parted は両方で使えます。

コマンドによって使い方は異なりますが、fdisk/gdisk はコマンドを入力していくタイプで、cfdisk/cgdisk は簡単なメニューが出て選択していくタイプです。

cfdisk/cgdisk の方が多少わかりやすいですが、デフォルトで UEFI のパーティションが作成されていたりするので、今回はあえて真っさらな状態から構築したいため、fdisk/gdisk を使って説明していきます。
ディスクのデバイス名を調べる
まずは、パーティショニングしたいディスクのデバイス名を調べます。

lsblk コマンドで、ブロックデバイスの一覧を表示できます。
ls」 は list の略で、「blk」 は block device を表しています。

# lsblk

NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0   7:0    0 409.5M  1 loop /run/archiso/sfs/airootfs
sda     8:0    0    80G  0 disk
sr0    11:0    1   516M  0 rom  /run/archiso/bootmnt

loop0 と sr0 は無視してください。
TYPE が disk になっているのが、目的となるディスクドライブです。
VirtualBox で 80 GB の仮想 HDD を作成したので、SIZE が 80 GB になっています。
この場合は、NAME 欄の sda が名前となります。

複数のディスクがある場合、名前は sdb, sdc, sdd... というように増えていきます。
ディスクが複数ある場合は、サイズや順番などから判断してください。
fdisk/gdisk の起動
sda のディスクをパーティショニングする場合は、以下のようになります。
デバイス名は、/dev/sda というように、先頭に /dev/ を付けて指定します。

MBR の場合は fdisk、GPT の場合は gdisk コマンドを使います。
コマンド名を間違えないようにしてください。

(GPT の場合)
# gdisk /dev/sda

(MBR の場合)
# fdisk /dev/sda

メッセージの後、「Command (? for help):」 または 「Command (m for help):」 が表示され、そこでカーソルが点滅しています。
ここでコマンドを入力することになります。

gdisk では ?、fdisk では m を入力して Enter を押すと、コマンドのヘルプが表示されます。
fdisk/gdisk では、コマンドとして1文字のアルファベットを入力し、Enter で実行していきます。

英語なのでわかりづらいですが、主に使うのは、以下のコマンドです。
主要なコマンドは、fdisk/gdisk で共通しています。

o新しいパーティションテーブルを作成
n新しいパーティションを追加
p現在のパーティション状態を表示
tパーティションのタイプを変更
lパーティションタイプのリストを表示
wパーティションテーブルをディスクに書き込んで終了
q変更を保存せずに終了 (キャンセル)

各操作は、実行後すぐにディスクに書き込まれるわけではありません。
最後に w コマンドを実行して、パーティションテーブル全体をまとめてディスクに書き込む形になるため、途中で操作を間違えても、すぐに修正やキャンセルができます。
新規パーティションテーブルの作成について
新品のディスクや、ディスク全体を消去してパーティショニングをやり直したい場合は、まず、o コマンドで、空の状態のパーティションテーブルを作成します。

o を入力して Enter を押します。
gdisk の場合、メッセージが出て Yes/No が聞かれるので、y を入力して Enter を押します。
パーティションの作成について
新しいパーティションを追加するには、n を入力して Enter を押します。

以降は、パーティションの情報を入力していくことになるので、各項目の入力後、Enter を押してください。
何も入力せずに Enter だけ押して値を省略すると、default で書かれている値が指定されたことになります。

gdisk の場合
Partition number (1-128, default 1):
First sector (34-167772126, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-167772126, default = 167772126) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):

fdisk の場合
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p):
Partition number (1-4, default 1):
First sector (2048-104857599, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-104857599, default 104857599):

Partition type
(fdisk)
MBR の場合、パーティションには プライマリ/拡張/論理 の3つのタイプがあるので、作成するタイプを指定します。

作りたいパーティションが4つ以内なら、すべてプライマリで構いません。
4つ以上作りたい場合は、どこかで一つ拡張パーティションを作成し、その後、論理パーティションを作ります。
Partition number新しく作成するパーティションの番号です。

デフォルトで一番最後の番号が指定されるので、パーティションを追加するたびに +1 されます。
通常は省略で構いません。
パーティションが一つもない状態では、デフォルトは1となります。
First sector
Last sector
パーティションの先頭位置と終端位置を指定します。

***-*** は、指定可能なセクタ単位の数値の範囲です。ディスクによって数値は異なります。

単位を付けずに数値のみ入力した場合、セクタ単位によるディスク内の絶対位置となります。
数値の前に +- を付けた場合は、現在位置からの相対的な値となります。
数値の後に K/M/G/T/P のいずれかを付けた場合は、サイズの単位の指定となります。
(K=KB、M=MB、G=GB...)

先頭位置 (First sector)

デフォルトで最後のパーティションの終端位置が指定されるので、続けてパーティションを追加していく場合は、省略で構いません。

終端位置 (Last sector)

パーティションのサイズを決めることになるので、重要です。
通常は + を付けて、パーティションのサイズを単位付きで指定します。
512 MB のサイズのパーティションにする場合は、「+512M」 とします。
+ を書き忘れないように注意してください。

デフォルトはディスク全体の終端位置となっているので、最後のパーティションで残りの容量すべてを使いたい場合は、省略します。
Hex code or GUID
(gdisk)
パーティションの使用タイプを、コード番号 (4桁の16進数) で指定します。
パーティションの用途によって適切なタイプを指定しないと、正しく動作しない場合があります。

L + Enter を入力すると、タイプの一覧が表示できます。
画面に表示しきれない場合は、Enter で続きを表示します。

GPT の主なタイプ

8200 : Linux swap (Linux スワップ用のパーティション)
8300 : Linux filesystem (Linux 用のパーティション。OS 用やデータ用に使う、汎用的なタイプ)
ef00 : EFI System (UEFI 用のブートパーティション)

なお、fdisk (MBR) の場合は、デフォルトで 83 (Linux) が指定されます。
変更したい場合は、t コマンドを使います。
終了時
パーティションがすべて作成できたら、w コマンドで実際にパーティションテーブルを書き込み、終了します。

書き込まずに操作をキャンセルしたい場合は、q コマンドを実行します。
スワップについて
>> スワップ - ArchWiki

スワップ (swap)」 は、メモリが足りない場合に、ディスクの一部の領域をメモリの代わりとして使う機能です。

メモリが 1 GB 以下など、容量に余裕がない場合は、スワップを作ったほうが良いですが、メモリがそれ以上あって余裕がある場合は、基本的にスワップはない方が良いです。

以前はスワップ用にパーティションを一つ作って割り当てていましたが、現在は 「スワップファイル」 を使うことができ、そちらの方が使いやすいので、基本的にスワップ用としてパーティションを作る必要はありません。

(スワップファイルは、スワップ用に任意のサイズのファイルを一つ作成して、その領域をスワップとして使う方法です。作成・削除・リサイズが簡単なので、便利です)

ただし、OS 用のパーティションに Btrfs ファイルシステムを使う場合、現状ではスワップファイルをサポートしていないので、Btrfs でスワップを使う場合は、スワップ用のパーティションを作ることになります。
(現状でもできないことはないですが、少し手間がかかります)
UEFI + GPT でパーティショニング
gdisk を使って、UEFI + GPT でパーティショニングを行う場合の手順を説明します。
UEFI ブートパーティションについて
UEFI + GPT の場合、UEFI のブートファイルを置くためのパーティションが一つ必要になります。

OS をインストールすると、指定パーティションに各 OS ごとのブートファイル (*.efi) が置かれます。
パソコンを起動すると、UEFI がそれを読み込んでブートローダーを起動します。

一つのディスクに複数の OS をインストールする場合、基本的に一つの OS ごとにブートファイルが作成されるため (正確には各 OS のブートローダーごと)、インストールする OS の数だけ UEFI ブートパーティションの容量が必要になります。
また、GRUB などのブートローダのファイルもこのパーティション上に置くことになります。

上記の理由から、UEFI ブートパーティションのサイズには、少し余裕を持たせる必要があります。
Arch Linux では、512 MB が推奨されています。

ブートローダーに GRUB を使う場合、*.efi のファイルが 240 KB 程度、GRUB 自体のファイルが 50 MB くらいとなります。
このことから、複数の OS をインストールする場合でも、512 MB もあれば十分だと思われます。
Arch Linux しか使わないというのであれば、100〜200 MB くらいに減らしても問題ありません。
パーティションの作成
まずは、o コマンドで、新規パーティションテーブルを作成します。

UEFI ブートパーティション
次に、UEFI ブートパーティションを作成します。
n コマンドで、パーティションを追加します。

サイズは好きな値にしてください。
code は ef00 で、UEFI ブートパーティションとして設定します。

Partition number : <Enter> (省略)
First sector : <Enter> (省略)
Last sector : +512M<Enter>
Hex code or GUID : ef00 <enter>

Arch Linux 用パーティション
次に、Arch Linux (OS) 用のパーティションを作成します。
同じく n コマンドで、パーティションを追加します。

Partition number : <Enter> (省略)
First sector : <Enter> (省略)
Last sector : +50G<Enter>
Hex code or GUID : <Enter> (省略)

一応 50 GB にしていますが、好きな値にしてください。
容量の目安としては、前回インストールしてから半年くらい経過したうちの環境では、Arch Linux パーティションの使用量は大体 7 GB くらいになっています。
(/home などはすべて同じパーティションにあり、データファイルはすべて別のパーティションに置いています)
(インストールしているパッケージはそれほど多くありません)

ソフトウェアなど、インストールするパッケージの大きさによって使用量は変動するので、インストールする数が多い場合は、大きめに見積もっておいた方が良いでしょう。
データを別のパーティションに置くのが前提なら、通常の使用では、10〜50 GB くらいあれば大丈夫だと思います。

他のパーティション
他に、データ用などのパーティションを作る場合は、Arch Linux 用のパーティションと同じように作成していってください。
パーティションのタイプはデフォルトの 8300 で構いません。

容量をすべて使い切りたい場合、最後のパーティションでは、Last Sector の入力を省略して、残りすべての容量を指定するようにします。

書き込み
一度 p コマンドで現在のパーティションの状態を確認し、問題なければ、w コマンドでパーティションテーブルをディスクに書き込みます。

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N):

「最終チェックが完了しました。GPT データの作成について。これは既存のパーティションを上書きします!! 続けますか?」
と聞かれるので、y + Enter で了承します。

書き込み後、自動的に gdisk は終了します。
BIOS + MBR でパーティショニング
fdisk で BIOS + MBR によるパーティショニングをする場合の手順を説明します。

MBR の場合、ブート用のパーティションはなくても問題ありません (作っても良い)。
ブートしたい OS のパーティションのブータブルフラグを ON にすると、そのパーティションがブート対象となります。

今回は、ブート用のパーティションを作らない方法で説明していきます。

パーティションを4つ以下しか作らない場合は、すべてプライマリパーティションとして作成してください。
5つ以上のパーティションを作りたい場合は、「プライマリ×3、拡張×1、論理×N」 というような構成で作成してください。
拡張パーティションを作成しないと、論理パーティションは作成できません。
パーティションの作成
まずは、o コマンドで、新規パーティションテーブルを作成します。

Arch Linux 用パーティション
Select: <Enter> (デフォルトでプライマリ)
Partition number: <Enter>
First sector: <Enter>
Last sector: +20G<Enter> (好きなサイズ)

作成後、a コマンドを実行して、このパーティションのブータブルフラグを ON にします。
これで、このパーティションにあるブート情報を元に起動されます。

現在はパーティションが一つしかないので、自動でパーティション1が選択されましたが、複数のパーティションがある場合は、フラグを操作するパーティションを選択する必要があります。
なお、a コマンドは、フラグの ON/OFF を切り替えるという動作になるので、OFF の状態なら ON、ON の状態なら OFF に変更されます。

a コマンド後のメッセージで、ON/OFF どちらに設定されたかがわかります。
enabled なら ON、disabled なら OFF に設定されています。

他パーティション
データ用なども同じように作成します。
タイプはデフォルトの 'Linux' (83) で構いません。
スワップの場合のみ、t コマンドで 82 に変更します。

書き込み
最後に、w コマンドで書き込みます。
パーティションの確認
lsblk コマンドで、パーティションが正しく作成されているか確認してみます。

# lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0    80G  0 disk
├sda1   8:1    0   512M  0 part
├sda2   8:2    0    50G  0 part
└sda3   8:3    0  29.5G  0 part

上記は、UEFI + GPT 用に作成した、sda の HDD (80 GB) の状態を表しています。

sda1 は UEFI ブートパーティション (512 MB)、
sda2 は Arch Linux 用パーティション (50 GB)、
sda3 はデータ用パーティション (29.5 GB) として作成しました。

TYPE が part になっているのは、パーティションという意味です。
フォーマット
パーティショニングが終わったら、各パーティションをフォーマットして、使えるようにする必要があります。

Linux で使えるファイルシステムはいくつかありますが、現状で安定しているのは ext4 です。
他に、XFS (一部のディストリビューションでデフォルト)、Btrfs (将来的にデフォルトになるかも) などがあります。

読み書きの速度や機能などの面では ext4 より他のフォーマットの方が優位な場合もありますが、デメリットもあるので、無難に選ぶなら ext4 となります。
コマンド
フォーマットを行うためのコマンドは、mkfs.* を使います。

mkfs.ext4 などのように、「.」 以降がファイルシステムの名前になっていて、それぞれ別のコマンドを使うことになるので、わかりやすいです。
以下のコマンドで、インストールシステム上で使える mkfs コマンドの一覧が表示できます。

# ls /usr/bin/mkfs.*

/usr/bin/mkfs.bfs    /usr/bin/mkfs.ext3 /usr/bin/mkfs.minix    /usr/bin/mkfs.vfat
/usr/bin/mkfs.btrfs  /usr/bin/mkfs.ext4 /usr/bin/mkfs.msdos    /usr/bin/mkfs.xfs
/usr/bin/mkfs.cramfs /usr/bin/mkfs.f2fs /usr/bin/mkfs.nilfs2
/usr/bin/mkfs.exfat  /usr/bin/mkfs.fat  /usr/bin/mkfs.ntfs
/usr/bin/mkfs.ext2   /usr/bin/mkfs.jfs  /usr/bin/mkfs.reiserfs

結構種類があります。一部、Windows 用のファイルシステムもあります。
コマンドの使い方
「mkfs.ext4 /dev/sda1」 というように、フォーマットするパーティションのデバイス名を指定します。

※ この時、sda などのようにディスク全体を指定せずに、sda1 のように末尾に番号を付けて、パーティションの方を指定します。
間違えないように注意してください。

指定できるオプションは、各コマンドによって異なります。
ext4 の場合は、-L <LABEL> オプションで、フォーマットと同時にラベル名を指定することもできます。
(UEFI) UEFI ブートパーティションのフォーマット
UEFI + GPT では、UEFI ブート用にパーティションを作りました。
UEFI ブートパーティションは、FAT32 (Windows 用。USB メモリなどでも使われる) でフォーマットする必要があるので、mkfs.vfat コマンドを使います。

  • Arch Linux しかインストールされていない状態で、Arch Linux や他の OS を再インストールする場合、ブートファイルはすべてクリアした上で新規にインストールを行った方が良いので、フォーマットを行うことをおすすめします。
  • 複数の OS がインストールされていて、Arch Linux のみ再インストールする場合、他の OS のブートファイルを残しておく必要があるので、フォーマットは行わないでください。
  • 実行前に確認メッセージなどは出ないので、コマンドは慎重に実行してください。
    フォーマットすると、パーティションの中身は消去されます。


# mkfs.vfat -F32 /dev/sda1

デバイス名は、自分で作ったパーティションの名前に置き換えてください。
-F32 オプションで、FAT32 でフォーマットします。

確認
成功した場合、実行後は何も表示さないので、処理されたのかどうかよくわかりません。
lsblk コマンドで --fs オプションを指定し、ファイルシステムを確認してみます。

# lsblk --fs

NAME   FSTYPE LABEL UUID
sda
├sda1 vfat         120B-1CA0
├sda2
└sda3

sda1 の FSTYPE が vfat になり、UUID の値が設定されています。
他のパーティションでは何も表示されていないので、正しくフォーマットできたことがわかります。

UUID について
UUID とは、各パーティションに付けられた名前です。
フォーマット時に自動で生成され、他のパーティションと名前が重複しないように作られます。
設定ファイルなどで、/dev/sda1 などのデバイス名の代わりに、UUID の名前でパーティションを指定することができます。
※ UUID はフォーマットをするたびに変更されます。
他のパーティションをフォーマット
OS 用のパーティションや、データ用のパーティションなど、メインで使うパーティションをフォーマットします。

  • OS 用のパーティションは、常にインストールする前にフォーマットして中身をクリアする必要があります。
  • データ用など、すでにフォーマットして使用しているパーティションをその状態のまま使う場合は、フォーマットを行う必要はありません。
  • スワップ用のパーティションは、フォーマットを行う必要はありません。
  • パーティションが複数ある場合、すべてのパーティションでファイルシステムを統一する必要はありません。
    OS 用とデータ用でファイルシステムを別にすることもできます。

ext4 でフォーマット
Linux で使うパーティションの場合、現在は ext4 を使うのが無難です。
ext4 でフォーマットする場合は、以下のようにします。

今回の場合、sda1 は UEFI ブート用、sda2 を OS 用、sda3 をデータ用とするので、sda2 と sda3 を ext4 でフォーマットします。

# mkfs.ext4 /dev/sda2

一度もフォーマットされていない場合はすぐに処理が開始されますが、すでにフォーマットされている場合は確認メッセージが出ます。
また、処理中は経過が表示されます。

ラベルの指定
フォーマットと同時にラベル名を指定したい場合は、-L <名前> オプションで指定します。

デバイス名だけではパーティションが何に使われているかわかりにくいので、用途を示すような名前を付けておくと、わかりやすいです。
OS 用なら OS の名前 (今回の場合は archlinux など)、データ用なら data などと付けると良いでしょう。

# mkfs.ext4 /dev/sda2 -L arch
# mkfs.ext4 /dev/sda3 -L data

確認
lsblk コマンドで確認してみます。

# lsblk --fs

NAME   FSTYPE LABEL UUID
sda
├sda1 vfat         120B-1CA0
├sda2 ext4   arch  35ec0740-2208-485a-9d06-e15289eb25ee
└sda3 ext4   data  7c669ef8-29b1-4186-9c6a-253199597322

FSTYPE が ext4 で、LABEL にラベル名が設定されているのがわかります。
次へ
これで、ディスクの準備は整いました。
次から、実際にインストールの処理に移ります。

>> インストール (3)