👋

【Linux】LVM を使うべきか

に公開
1

はじめに

個人PC の VmwareFusion に Linux をインストールしていたら、セットアップの途中で LVM を使うか問われた。
業務環境では LVM を使ってなかったので、これまであまり LVM について理解を深める機会がなかったが、これを機に LVM について改めて整理してみることにした。

LVM とは

LVM は、複数の物理ディスクやパーティションを仮想的に束ねて、ボリュームグループ(仮想ディスク)という単位で管理し、その中から必要なサイズの論理ボリューム(仮想パーティション)を柔軟に作成・変更できる仕組みである。
つまり、論理ボリュームを自由に操作できるため、パーティションサイズの変更や容量追加を、後から柔軟に行えるのが特徴である。

従来のパーティション管理との違い

従来の方法では、物理ディスク上に直接パーティションを作成する。この場合、サイズを変更しようとすると以下のような手間が発生することがある。

  • パーティション内のデータを一時的に退避
  • パーティションの削除と再作成
  • 再度データを書き戻す

LVM を使うとこれらの操作が不要になり、容量の拡張・縮小をシステム稼働中に行えるケースも多い。

RAID とは

LVM と混同されやすい技術として RAID がある。
RAID は複数ディスクを組み合わせ、設定したRAIDレベルに応じた冗長化やパフォーマンス向上を目的とした仕組みである。

つまり、

  • LVMはディスク容量管理の柔軟性を高めるもの
  • RAIDは冗長化や高速化を目的としたもの

という点で役割が異なる

LVMのメリット

・パーティションの拡張、縮小が容易
・ディスクを跨いだ容量管理が可能
・データを保持したままパーティションを別ディスクに移動可能
・スナップショットでバックアップを容易に取得できる

LVMのデメリット

・構築や運用の手間が増える
・オーバーヘッドによる、わずかなパフォーマンス低下
・構成が複雑になるので、障害時の復旧が難しくなる

LVM を使う必要があるのか

事前にディスク容量を十分に見積もって構成できるのであれば、必ずしも導入する必要はないと感じた。
またLVMを使うことで管理がやや煩雑になるため、特別なメリットがない場合は無理に利用しなくてもよさそう。

今回の私のケースでは、あくまでテスト用の仮想マシンを構築するだけだったので、LVMは採用しないことにした。

とはいえ、環境によってはLVMの柔軟性が大きなメリットとなるケースもあるはず。なので、実際の運用で困ることがないよう、基本的な LVM 操作と概念については把握しておくようにする。

LVM 操作

現在のディスク状態

ubuntu@ubuntu:~$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0          11:0    1  2.8G  0 rom  
nvme0n1     259:0    0   20G  0 disk 
├─nvme0n1p1 259:1    0  953M  0 part /boot/efi
└─nvme0n1p2 259:2    0   10G  0 part /

lvm の操作に使うパーティションを新規作成

残り 9GB ほどの空き容量があるので、3GB で3つパーティションを作成する

ubuntu@ubuntu:~$ sudo fdisk /dev/nvme0n1

Command (m for help): n
Partition number (3-128, default 3): 
First sector (22925312-41943006, default 22925312): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (22925312-41943006, default 41940991): +3G

Created a new partition 3 of type 'Linux filesystem' and of size 3 GiB.

Command (m for help): n
Partition number (4-128, default 4): 
First sector (29216768-41943006, default 29216768): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (29216768-41943006, default 41940991): +3G

Created a new partition 4 of type 'Linux filesystem' and of size 3 GiB.

Command (m for help): n
Partition number (5-128, default 5): 
First sector (35508224-41943006, default 35508224): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (35508224-41943006, default 41940991): +3G

Created a new partition 5 of type 'Linux filesystem' and of size 3 GiB.

Command (m for help): w
The partition table has been altered.
Syncing disks.

パーティションが作成された。

ubuntu@ubuntu:~$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0          11:0    1  2.8G  0 rom  
nvme0n1     259:0    0   20G  0 disk 
├─nvme0n1p1 259:1    0  953M  0 part /boot/efi
├─nvme0n1p2 259:2    0   10G  0 part /
├─nvme0n1p3 259:3    0    3G  0 part 
├─nvme0n1p4 259:4    0    3G  0 part 
└─nvme0n1p5 259:5    0    3G  0 part 

物理ボリューム作成

追加したパーティションで物理ボリュームを作成する。

ubuntu@ubuntu:~$ sudo pvcreate /dev/nvme0n1p3 /dev/nvme0n1p4 /dev/nvme0n1p5
  Physical volume "/dev/nvme0n1p3" successfully created.
  Physical volume "/dev/nvme0n1p4" successfully created.
  Physical volume "/dev/nvme0n1p5" successfully created.

ubuntu@ubuntu:~$ lsblk -f
NAME        FSTYPE      FSVER            LABEL                           UUID                                   FSAVAIL FSUSE% MOUNTPOINTS
sr0         iso9660     Joliet Extension Ubuntu-Server 24.04.3 LTS arm64 2025-08-06-15-52-50-00                                
nvme0n1                                                                                                                        
├─nvme0n1p1 vfat        FAT32                                            133B-BBDE                               944.8M     1% /boot/efi
├─nvme0n1p2 ext4        1.0                                              118b5460-3ff0-4aaf-bdb4-200dcd2f7112      6.6G    27% /
├─nvme0n1p3 LVM2_member LVM2 001                                         mCjDoJ-8IDE-MIbR-5ZVo-lDVF-Ugfo-nXZQBJ                
├─nvme0n1p4 LVM2_member LVM2 001                                         TfhaRx-3KUp-B5Fr-ikJN-Y1PU-xRQT-N5H4Gi                
└─nvme0n1p5 LVM2_member LVM2 001                                         70gece-73ns-nw4K-2LUO-vRyt-tvhR-s8dMnn  

ボリュームグループ作成

作成した物理ボリュームで設定されるボリュームグループ(test_volgrp)を作成する。これで、仮想ディスクのように扱うことが可能になる。

ubuntu@ubuntu:~$ sudo vgcreate test_volgrp /dev/nvme0n1p3 /dev/nvme0n1p4 /dev/nvme0n1p5
  Volume group "test_volgrp" successfully created

ubuntu@ubuntu:~$ sudo vgs
  VG          #PV #LV #SN Attr   VSize  VFree 
  test_volgrp   3   0   0 wz--n- <8.99g <8.99g

論理ボリューム作成

作成したボリュームグループから論理ボリューム(test_logical_vol)を作成する。nvme0n1p3nvme0n1p4に跨って論理ボリュームが作成されたことが確認できる。

ubuntu@ubuntu:~$ sudo lvcreate -L 4G -n test_logical_vol test_volgrp
  Logical volume "test_logical_vol" created.

ubuntu@ubuntu:~$ lsblk -f
NAME                             FSTYPE      FSVER            LABEL                           UUID                                   FSAVAIL FSUSE% MOUNTPOINTS
sr0                              iso9660     Joliet Extension Ubuntu-Server 24.04.3 LTS arm64 2025-08-06-15-52-50-00                                
nvme0n1                                                                                                                                             
├─nvme0n1p1                      vfat        FAT32                                            133B-BBDE                               944.8M     1% /boot/efi
├─nvme0n1p2                      ext4        1.0                                              118b5460-3ff0-4aaf-bdb4-200dcd2f7112      6.6G    27% /
├─nvme0n1p3                      LVM2_member LVM2 001                                         mCjDoJ-8IDE-MIbR-5ZVo-lDVF-Ugfo-nXZQBJ                
 └─test_volgrp-test_logical_vol                                                                                                                    
├─nvme0n1p4                      LVM2_member LVM2 001                                         TfhaRx-3KUp-B5Fr-ikJN-Y1PU-xRQT-N5H4Gi                
 └─test_volgrp-test_logical_vol                                                                                                                    
└─nvme0n1p5  

ファイルシステム作成

作成した論理ボリュームに ext4 ファイルシステムを作成する。

ubuntu@ubuntu:~$ sudo mkfs.ext4 /dev/test_volgrp/test_logical_vol 
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 1048576 4k blocks and 262144 inodes
Filesystem UUID: ab23c917-3fb9-4283-be78-844d360f0e5c
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

マウント

マウントすれば、通常のディスクのように扱える。

ubuntu@ubuntu:~$ sudo mount /dev/test_volgrp/test_logical_vol /mnt

ubuntu@ubuntu:~$ mount | grep /mnt
/dev/mapper/test_volgrp-test_logical_vol on /mnt type ext4 (rw,relatime)

ubuntu@ubuntu:~$ cd /mnt/
ubuntu@ubuntu:/mnt$ df .
Filesystem                               1K-blocks  Used Available Use% Mounted on
/dev/mapper/test_volgrp-test_logical_vol   4046560    24   3820440   1% /mnt

Discussion

taktak

物理サーバの場合、HDDやSSDの容量というのは後になって変えられません。
LVMを使うことで物理的なストレージ構成に依存しないパーティション構成を作れるようにするというのはメリットになります。
仮想サーバやAWSなどの場合、プラットフォーム側で自由に仮想ディスクのサイズを変えられるため、LVMを使用するメリットはほぼありません。
そのためAWSなどで提供されるOSイメージはLVMは使用されていません。

6