LVM に Arch Linux をインストールする

提供: ArchWiki
2022年9月2日 (金) 09:21時点におけるAshMyzk (トーク | 投稿記録)による版 (→‎論理ボリュームを作成する: 翻訳)
ナビゲーションに移動 検索に移動

関連記事

LVM ボリュームは、インストール手順パーティショニングフォーマットの間で作成する必要があります。パーティションを直接フォーマットしてルートファイルシステムにするのではなく、ファイルシステムを論理ボリューム (LV) 内で作成します。

概略:

  • 必要なパッケージをインストールする。(LVM#始める を参照)
  • 物理ボリューム (PV) を格納するパーティションを作成する。
  • PV を作成する。ディスクが一つしかない場合は一つの大きなパーティションに一つの PV を作成するのが良いでしょう。ディスクが複数ある場合はそれぞれにパーティションを作成してパーティション毎に PV を作ることができます。
  • ボリュームグループ (VG) を作成して全ての PV を追加する。
  • その VG の中に論理ボリューム (LV) を作成する。
  • インストールガイド#パーティションのフォーマット に進んで下さい。
  • インストールガイドの「初期 RAM ディスク環境を作成する」手順にたどり着いたら、/etc/mkinitcpio.conflvm2 フックを追加する (詳細は下記に)。
警告: LVM をサポートしていないブートローダを使う場合は、/boot を LVM 内に配置することはできません。/boot 用に別のパーティションを作成し、それを直接フォーマットしなければなりません。LVM をサポートしているブートローダとして知られているのは GRUB だけです。

インストール

インストールガイド#パーティション までインストールガイドに従います。この時点でインストールガイドから分岐し、LVM を念頭に置いたパーティショニングを行います。

パーティションを作成する

まず、LVM をセットアップする前に必要に応じてディスクをパーティショニングしてください。

パーティショニングを作成してください:

  • Master Boot Record パーティションテーブルを使用する場合は、パーティションタイプ ID8e に設定してください (fdisk ではパーティションタイプ Linux LVM)。
  • GUID パーティションテーブルを使う場合は、パーティションタイプ GUIDE6D6D379-F507-44C2-A23C-238F2A3DF928 に設定してください (fdisk ではパーティションタイプ Linux LVMgdisk では 8e00 )。

物理ボリュームを作成する

物理ボリュームとして使えるデバイスを確認するには:

# lvmdiskscan
警告: 物理ボリュームを作成するデバイスをよく確認してください。間違ったデバイスを使ってしまうとデータが消失してしまいます。

デバイス上に物理ボリュームを作成する:

# pvcreate DEVICE

このコマンドはデバイスにヘッダを作成し、LVM で使えるようにします。LVM#LVM の構成要素 に書かれてあるように、DEVICE には任意のブロックデバイス (例: ディスク /dev/sda やパーティション /dev/sda2、ループバックデバイスなど) を指定できます。例えば:

# pvcreate /dev/sda2

作成した物理ボリュームを以下のコマンドで確認できます:

# pvdisplay

また、物理ボリュームの情報は以下のコマンドで得られます:

# pvscan
ヒント: 既存のディスク署名で問題が発生した場合、wipefs を使って署名を削除できます。
ノート: パーティションを作成していない SSD を使う場合、pvcreate --dataalignment 1m /dev/sda を使用してください (消去ブロックのサイズが 1 MiB 未満の場合)、ここ を参照。

ボリュームグループを作成・拡張する

まず、新しいボリュームグループを物理ボリュームのうちの一つに作成する必要があります:

# vgcreate <volume_group> <physical_volume>

例えば:

# vgcreate VolGroup00 /dev/sda2

ボリュームグループ名に使える有効な文字のリストは lvm(8) を見てください。

ボリュームグループの拡張も同じように簡単です:

# vgextend <volume_group> <physical_volume>

例えば、作成したボリュームグループに sdb1sdc の両方を追加するには:

# vgextend VolGroup00 /dev/sdb1
# vgextend VolGroup00 /dev/sdc

拡張後のボリュームグループは以下のコマンドで確認できます:

# vgdisplay

This is also what you would do if you wanted to add a disk to a RAID or mirror group with failed disks.

ノート: 必要ならば複数のボリュームグループを作成することもできますが、それだと全てのストレージを一つのディスクにまとめることはできなくなります。

物理ボリュームとボリュームグループを複合的に作成する

LVM では一度にまとめてボリュームグループの作成と物理ボリュームの作成を行うことができます。例えば、上述のように、3つのデバイスで VolGroup00 グループを作成する場合、次を実行:

# vgcreate VolGroup00 /dev/sda2 /dev/sdb1 /dev/sdc

上記のコマンドはまず、3つのパーティションを物理ボリュームとして設定して、それから3つのボリュームでボリュームグループを作成します。デバイスに既にファイルシステムが存在する場合、警告が表示されます。

論理ボリュームを作成する

ヒント:
  • スナップショット、論理ボリュームキャッシング、シンプロビジョニングされた論理ボリューム、RAID を使いたい場合、LVM#論理ボリューム を見てください。
  • 論理ボリュームを ext4 でフォーマットする場合、e2scrub(8) を使えるようにするためにボリュームグループ内に 256 MiB 以上の空き領域を残してください。

ボリュームグループには論理ボリュームを作る必要があります。論理ボリュームを作成するには次のコマンドを使います。新しい論理ボリュームの名前、サイズ、そしてどのボリュームグループに作るかを指定してください:

# lvcreate -L <size> <volume_group> -n <logical_volume>

例えば:

# lvcreate -L 10G VolGroup00 -n lvolhome

これで論理ボリュームが作成され /dev/VolGroup00/lvolhome でアクセスできるようになります。ボリュームグループと同じく、論理ボリュームには好きな名前を命名できます (いくつかの例外があります: lvm(8) § VALID_NAMES)。

また、一つもしくは複数の物理ボリュームを指定して LVM が使用する領域を制限することもできます。例えば、小容量の SSD に root ファイルシステムの論理ボリュームを作成して、HDD にホームとして使うボリュームを作成したい場合などが考えられます。コマンドラインに物理ボリュームデバイスを追加してください、例えば:

# lvcreate -L 10G VolGroup00 -n lvolhome /dev/sdc1

ボリュームグループに残っている空き容量全てを使う論理ボリュームを作成するには、次のコマンドを使って下さい:

# lvcreate -l 100%FREE  <volume_group> -n <logical_volume>

作成した論理ボリュームは次のコマンドで確認できます:

# lvdisplay
ノート: 上のコマンドを実行するために device-mapper カーネルモジュールをロード (modprobe dm_mod) しなくてはならない場合があります。
ヒント: 比較的小さな論理ボリュームを作ってから、後で必要になったときに拡大することも可能です。シンプリシティを尊ぶのなら、ボリュームグループに拡大のための空き容量をいくらか残しておきましょう。

論理ボリュームをフォーマット・マウントする

Your logical volumes should now be located in /dev/YourVolumeGroupName/. If you cannot find them, use the next commands to bring up the module for creating device nodes and to make volume groups available:

# modprobe dm_mod
# vgscan
# vgchange -ay

Now you can format your logical volumes and mount them as normal partitions (see mount a file system for additional details):

# mkfs.<fstype> /dev/<volume_group>/<logical_volume>
# mount /dev/<volume_group>/<logical_volume> /<mountpoint>

For example:

# mkfs.ext4 /dev/VolGroup00/lvolhome
# mount /dev/VolGroup00/lvolhome /home
警告: When choosing mountpoints, just select your newly created logical volumes (use: /dev/Volgroup00/lvolhome). Do not select the actual partitions on which logical volumes were created (do not use: /dev/sda2).

システムを設定する

mkinitcpio フックを追加する

ルートファイルシステムが LVM 上にある場合、適切な mkinitcpio フックを有効化する必要があります。さもないと、システムが起動しないかもしれません。以下を有効化してください:

  • デフォルトの busybox ベースの initramfs の場合、udevlvm2
  • systemd ベースの initramfs の場合、systemdlvm2

udev はデフォルトで有効化されています。設定ファイルを編集し、blockfilesystems の間に lvm2 を挿入してください、以下のように:

/etc/mkinitcpio.conf
HOOKS=(base udev ... block lvm2 filesystems)

systemd ベースの initramfs の場合:

/etc/mkinitcpio.conf
HOOKS=(base systemd ... block lvm2 filesystems)

その後、通常のインストール手順を続けて、初期 RAM ディスクの作成手順を行うことができます。

ヒント:
  • lvm2 フックは lvm2 でインストールされます、mkinitcpio ではありません。arch-chrootmkinitcpio を実行する場合、lvm2arch-chroot 環境の中でインストールする必要があります。そうしないと、mkinitcpiolvm2 フックを見つけられません。もし、arch-chroot 環境の外にしか lvm2 が存在しない場合、mkinitcpioError: Hook 'lvm2' cannot be found と出力します。
  • ルートファイルシステムが LVM RAID 上に存在する場合、#mkinitcpio を RAID 用に設定する を見てください。

mkinitcpio を RAID 用に設定する

ルートファイルシステムが LVM RAID 上に存在する場合、lvm2 フックに加えて dm-raid と適切な RAID モジュール (例: raid0raid1raid10raid456) を mkinitcpio.conf 内の MODULES 配列に追加する必要があります。また、RAID をインテグリティチェックサムのオプション付きで作成した場合 (lvcreate--raidintegrity オプション) 、dm_integrity モジュールが必要となります。

busybox ベースの initramfs の場合:

/etc/mkinitcpio.conf
MODULES=(dm-raid dm_integrity raid0 raid1 raid10 raid456)
HOOKS=(base udev ... block lvm2 filesystems)

systemd ベースの initramfs の場合:

/etc/mkinitcpio.conf
MODULES=(dm-raid dm_integrity raid0 raid1 raid10 raid456)
HOOKS=(base systemd ... block lvm2 filesystems)

LVM シンボリューム (LVM thin volume) を使用するシステムの場合、systemd フックを udev と block の間に置くと、シンボリュームが機能不全を起こします。パラメータ (base udev autodetect modconf block lvm2 filesystems keyboard fsck) だけで機能します: LVM 論理ボリューム内のルートファイルシステムと、他の場所にある他の LVM (ノーマルとシン)。

カーネルブートオプション

ルートファイルシステムが論理ボリューム内に存在する場合、root= カーネルパラメータにはマップされたデバイスを指定しなければなりません (例: /dev/vg-name/lv-name)。