LVM に Arch Linux をインストールする
LVM ボリュームは、インストール手順のパーティショニングとフォーマットの間で作成する必要があります。パーティションを直接フォーマットしてルートファイルシステムにするのではなく、ファイルシステムを論理ボリューム (LV) 内で作成します。
概略:
- 必要なパッケージをインストールする。(LVM#始める を参照)
- 物理ボリューム (PV) を格納するパーティションを作成する。
- PV を作成する。ディスクが一つしかない場合は一つの大きなパーティションに一つの PV を作成するのが良いでしょう。ディスクが複数ある場合はそれぞれにパーティションを作成してパーティション毎に PV を作ることができます。
- ボリュームグループ (VG) を作成して全ての PV を追加する。
- その VG の中に論理ボリューム (LV) を作成する。
- インストールガイド#パーティションのフォーマット に進んで下さい。
- インストールガイドの「初期 RAM ディスク環境を作成する」手順にたどり着いたら、
/etc/mkinitcpio.conf
にlvm2
フックを追加する (詳細は下記に)。
目次
インストール
インストールガイド#パーティション までインストールガイドに従います。この時点でインストールガイドから分岐し、LVM を念頭に置いたパーティショニングを行います。
パーティションを作成する
まず、LVM をセットアップする前に必要に応じてディスクをパーティショニングしてください。
パーティショニングを作成してください:
- Master Boot Record パーティションテーブルを使用する場合は、パーティションタイプ ID を
8e
に設定してください (fdisk ではパーティションタイプLinux LVM
)。 - GUID パーティションテーブルを使う場合は、パーティションタイプ GUID を
E6D6D379-F507-44C2-A23C-238F2A3DF928
に設定してください (fdisk ではパーティションタイプLinux LVM
、gdisk では8e00
)。
物理ボリュームを作成する
物理ボリュームとして使えるデバイスを確認するには:
# lvmdiskscan
デバイス上に物理ボリュームを作成する:
# pvcreate DEVICE
このコマンドはデバイスにヘッダを作成し、LVM で使えるようにします。LVM#LVM の構成要素 に書かれてあるように、DEVICE には任意のブロックデバイス (例: ディスク /dev/sda
やパーティション /dev/sda2
、ループバックデバイスなど) を指定できます。例えば:
# pvcreate /dev/sda2
作成した物理ボリュームを以下のコマンドで確認できます:
# pvdisplay
また、物理ボリュームの情報は以下のコマンドで得られます:
# pvscan
ボリュームグループを作成・拡張する
まず、新しいボリュームグループを物理ボリュームのうちの一つに作成する必要があります:
# vgcreate <volume_group> <physical_volume>
例えば:
# vgcreate VolGroup00 /dev/sda2
ボリュームグループ名に使える有効な文字のリストは lvm(8) を見てください。
ボリュームグループの拡張も同じように簡単です:
# vgextend <volume_group> <physical_volume>
例えば、作成したボリュームグループに sdb1
と sdc
の両方を追加するには:
# 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つのボリュームでボリュームグループを作成します。デバイスに既にファイルシステムが存在する場合、警告が表示されます。
論理ボリュームを作成する
Now we need to create logical volumes on this volume group. You create a logical volume with the next command by specifying the new volume's name and size, and the volume group it will reside on:
# lvcreate -L <size> <volume_group> -n <logical_volume>
For example:
# lvcreate -L 10G VolGroup00 -n lvolhome
This will create a logical volume that you can access later with /dev/VolGroup00/lvolhome
. Just like volume groups, you can use any name you want for your logical volume when creating it besides a few exceptions listed in lvm(8) § VALID_NAMES.
You can also specify one or more physical volumes to restrict where LVM allocates the data. For example, you may wish to create a logical volume for the root filesystem on your small SSD, and your home volume on a slower mechanical drive. Simply add the physical volume devices to the command line, for example:
# lvcreate -L 10G VolGroup00 -n lvolhome /dev/sdc1
To use all the free space left in a volume group, use the next command:
# lvcreate -l 100%FREE <volume_group> -n <logical_volume>
You can track created logical volumes with:
# lvdisplay
論理ボリュームをフォーマット・マウントする
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
システムを設定する
mkinitcpio フックを追加する
In case your root filesystem is on LVM, you will need to enable the appropriate mkinitcpio hooks, otherwise your system might not boot. Enable:
udev
andlvm2
for the default busybox-based initramfssystemd
andlvm2
for systemd-based initramfs
udev
is there by default. Edit the file and insert lvm2
between block
and filesystems
like so:
/etc/mkinitcpio.conf
HOOKS=(base udev ... block lvm2 filesystems)
For systemd based initramfs:
/etc/mkinitcpio.conf
HOOKS=(base systemd ... block lvm2 filesystems)
Afterwards, you can continue in normal installation instructions with the create an initial ramdisk step.
mkinitcpio を RAID 用に設定する
If your root filesystem is on LVM RAID additionally to the lvm2
hook, you need to add dm-raid
and the appropriate RAID modules (e.g. raid0
, raid1
, raid10
and/or raid456
) to the MODULES array in mkinitcpio.conf
. Also dm_integrity
module is needed if you created RAID with integrity checksums (--raidintegrity
option in lvcreate
).
For busybox based initramfs:
/etc/mkinitcpio.conf
MODULES=(dm-raid dm_integrity raid0 raid1 raid10 raid456) HOOKS=(base udev ... block lvm2 filesystems)
For systemd based initramfs:
/etc/mkinitcpio.conf
MODULES=(dm-raid dm_integrity raid0 raid1 raid10 raid456) HOOKS=(base systemd ... block lvm2 filesystems)
For systems using LVM thin volumes the location of systemd between udev and block causes the malfunction of the thin volume. just with the parameters (base udev autodetect modconf block lvm2 filesystems keyboard fsck) works: root FS inside a lvm logical volume, and other LVM's (normal and thin) at other locations.
カーネルブートオプション
ルートファイルシステムが論理ボリューム内に存在する場合、root=
カーネルパラメータにはマップされたデバイスを指定しなければなりません (例: /dev/vg-name/lv-name
)。