Ubuntu で LVM を使う

Ubuntu環境でLVM (Logical Volume Manager) を利用する基本的な手順を解説します。LVMは、複数の物理ディスクやパーティションをまとめて一つのストレージプール(ボリュームグループ)を構成し、そこから必要なサイズの論理ボリュームを切り出して利用する技術です。ディスク容量の拡張や縮小、スナップショットの作成を、物理ディスクの区切りとは独立して行えます。

物理ボリュームの作成やフォーマットは、対象ディスク上のデータを消去します。作業前に lsblk コマンドで対象のパーティション(例: /dev/sdc1)を確認し、必要なデータはバックアップしてください。

lsblk

前もって決めておく事項

LVM環境を構築する前に、以下の項目を決めておきます。

Ubuntu への LVM パッケージのインストール

LVMの操作には lvm2 パッケージが必要です。Ubuntu では標準でインストールされていることが多いですが、次のコマンドで確認とインストールを行います。ターミナルを開き、以下のコマンドを実行します。

sudo apt update
sudo apt install -y lvm2

インストール済みかどうかは、次のコマンドで確認できます。

dpkg -l lvm2

1. 物理ボリューム (PV) の作成

最初に、LVMで使用するパーティション(この例では /dev/sdc1, /dev/sdd1)を、LVMが管理できる形式である物理ボリューム (Physical Volume, PV) として初期化します。この時点では、作成されたPVはどのボリュームグループにも属していません。

ターミナルを開き、以下の pvcreate コマンドを実行して、指定したパーティションをPVとして初期化します。

sudo pvcreate /dev/sdc1
sudo pvcreate /dev/sdd1

作成されたPVを確認するには、pvs または pvdisplay コマンドを実行します。

sudo pvs
# または sudo pvdisplay

2. ボリュームグループ (VG) の作成

次に、作成した物理ボリューム (PV) をまとめてボリュームグループ (Volume Group, VG) を作成します。VGは、論理ボリューム(LV)を切り出すためのストレージプールです。ここではボリュームグループ名を sdcd とします。

ターミナルを開き、以下の vgcreate コマンドを実行して、PV (/dev/sdc1, /dev/sdd1) を含むボリュームグループ sdcd を作成します。

sudo vgcreate sdcd /dev/sdc1 /dev/sdd1

作成後にPVを追加するときは vgextend コマンドを使用します。

sudo vgextend sdcd /dev/sde1

作成されたVGの状態を確認するには、vgs または vgdisplay コマンドを実行します。

sudo vgdisplay sdcd
# または sudo vgs

3. 論理ボリューム (LV) の作成

ボリュームグループ (VG) の中に、ファイルシステムを作成してマウントするための領域である論理ボリューム (Logical Volume, LV) を作成します。ここではLV名を lvsdcd とし、ストライピングを設定して、VGの空き容量をすべて使用します。

ターミナルを開き、以下の lvcreate コマンドを実行して、VG sdcd 内に論理ボリュームを作成します。

# --stripes 2: 2つのPVにデータを分散配置 (ストライピング) します。複数のディスクへ並行してアクセスできるため、読み書き性能の向上が期待できます。PVが2つ以上必要です。
# --stripesize 512k: ストライプサイズを512KBに設定します。2のべき乗の値を指定します。
# -l 100%FREE: VG sdcd の空き容量をすべてこのLVに割り当てます。「-L サイズ[m|g|t]」で具体的なサイズ指定も可能です。
# -n lvsdcd: 作成するLVの名前を lvsdcd にします。
# sdcd: LVを作成する対象のVGの名前です。
sudo lvcreate --stripes 2 --stripesize 512k -l 100%FREE -n lvsdcd sdcd

ストライピングでは、各PVから同じ数のエクステントを確保します。-l 100%VG を指定すると割り当て可能なエクステント数を超えて「Insufficient suitable allocatable extents」エラーになる場合があるため、ここでは -l 100%FREE を使用します。

作成されたLVの状態を確認するには、lvs または lvdisplay コマンドを実行します。LVのデバイスパスは /dev/VG名/LV名(この例では /dev/sdcd/lvsdcd)または /dev/mapper/VG名-LV名 です。

sudo lvdisplay /dev/sdcd/lvsdcd
# または sudo lvs

4. 論理ボリューム (LV) のフォーマットとマウント

1. フォーマット:

作成した論理ボリューム (/dev/sdcd/lvsdcd) は、ファイルシステムを持たないブロックデバイスです。ここでは Ext4 ファイルシステムでフォーマットします。ターミナルを開き、以下のコマンドを実行します。

sudo mkfs.ext4 /dev/sdcd/lvsdcd

GNOME Disks(ディスク)や GParted でフォーマットすることもできます。その場合はデバイスとして /dev/sdcd/lvsdcd または /dev/mapper/sdcd-lvsdcd を選択します。

2. マウント:

フォーマット後、マウントポイントとなるディレクトリを作成し、そこにLVをマウントします。ターミナルを開き、以下のコマンドを実行します。

# マウントポイント用ディレクトリを作成 (例: /mnt/lvm_data)
sudo mkdir -p /mnt/lvm_data

# 作成したディレクトリにLVをマウント
sudo mount /dev/sdcd/lvsdcd /mnt/lvm_data

# マウントされたことを確認
df -h /mnt/lvm_data

OS起動時に自動マウントするには、blkid コマンドでUUIDを確認し、/etc/fstab に追記します。デバイス名は起動ごとに変わることがあるため、UUIDでの指定を使用します。

sudo blkid /dev/sdcd/lvsdcd
# /etc/fstab への追記例
UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" /mnt/lvm_data ext4 defaults 0 2

追記後、次のコマンドで記述内容を検証できます。エラーが出る状態のまま再起動すると、システムが起動しなくなる場合があります。

sudo mount -a