論理ボリューム管理 (LVM) について

LVM (Logical Volume Management) はディスクを管理するものであり、複数のドライブやパーティションを結合して、より大きなボリュームグループ を作り出します。 これによりスナップショット からバックアップを取ったり、動的にボリュームサイズを変更したりできるようになります。 また RAID 1 アレーのようなミラーリング機能も実現できます。

LVM に関しての完璧な論議は、この概要説明の範囲を超えてしまいます。 ここでは基本的な概念について示すことにします。

以下に示すコマンドを実行していくためには LVM2-2.03.23 をインストールしておく必要があります。 コマンドはすべて root ユーザーにより実行します。

LVM を用いたディスク管理には、以下の考え方に基づいて実現されます。

物理ボリューム

/dev/sda3 や /dev/sdb などのような、物理的なディスク、またはパーティションのことです。

ボリュームグループ

複数の物理ボリュームに対して名前づけされたグループであり、管理者がこれを制御します。 ボリュームグループを構成する物理ボリュームの数に制限はありません。 ボリュームグループに対しては、物理ボリュームを動的に追加したり削除したりすることができます。

論理ボリューム

ボリュームグループは、いくつかの論理ボリュームに分けることができます。 個々の論理ボリュームは、あたかも通常の Linux パーティションであるかのように、個別にフォーマットすることができます。 論理ボリュームは、必要に応じて管理ツールを使い、そのサイズを動的に変更することもできます。

具体的な例として、今 2 TB のディスクがあるとします。 そして大規模なデータベースを /srv/mysql にマウントして構築するために、大容量のディスクが必要であるとします。 以下はそのためのパーティション設定の例です。

Partition  Use    Size      Partition Type
/dev/sda1  /boot  100MB     83 (Linux)
/dev/sda2  /       10GB     83 (Linux)
/dev/sda3  swap     2GB     82 (Swap)
/dev/sda4  LVM    remainder 8e (LVM)
/dev/sdb1  swap     2GB     82 (Swap)
/dev/sdb2  LVM    remainder 8e (LVM)

はじめに物理ボリュームを初期化します。

pvcreate /dev/sda4 /dev/sdb2
[注記]

注記

A full disk can be used as part of a physical volume, but beware that the pvcreate command will destroy any partition information on that disk.

次に lfs-lvm と名づけたボリュームグループを生成します。

vgcreate lfs-lvm /dev/sda4  /dev/sdb2

ボリュームグループの状態を確認するには vgscan コマンドを用います。 そして論理ボリュームを生成します。 Since there is about 3900 GB available, leave about 900 GB free for expansion. Note that the logical volume named mysql is larger than any physical disk.

lvcreate --name mysql --size 2500G lfs-lvm
lvcreate --name home  --size  500G lfs-lvm

Finally the logical volumes can be formatted and mounted. In this example, the jfs file system (jfsutils-1.1.15) is used for demonstration purposes.

mkfs -t ext4 /dev/lfs-lvm/home
mkfs -t jfs  /dev/lfs-lvm/mysql
mount /dev/lfs-lvm/home /home
mkdir -p /srv/mysql
mount /dev/lfs-lvm/mysql /srv/mysql

It may be needed to activate those logical volumes, for them to appear in /dev. They can all be activated at the same time by issuing, as the root user:

vgchange -a y

A LVM logical volume can host a root filesystem, but requires the use of an initramfs (initial RAM file system). The initramfs proposed in 「initramfs について」 allows to pass the lvm volume in the root= switch of the kernel command line.

If not using an initramfs, there is a race condition in systemd preventing mounting logical volumes through /etc/fstab. You must create a mount unit (see systemd.mount(5)) as in the following example, which mounts the /home directory automatically at boot:

cat > /etc/systemd/system/home.mount << EOF
[Unit]
Description=Mount the lvm volume /dev/lfs-lvm/home to /home

[Mount]
What=/dev/lfs-lvm/home
Where=/home
Type=ext4
Options=default

[Install]
WantedBy=multi-user.target
EOF
[注記]

注記

The name of the unit must be the name of the mount point with the `/' character replaced by `-', omitting the leading one.

Next the unit must be enabled with:

systemctl enable home.mount

For more information about LVM, see the LVM HOWTO and the lvm man pages. A good in-depth guide is available from RedHat®, although it makes sometimes reference to proprietary tools.