LVM(Logical Volume Manager(論理ボリュームマネージャー))とは、Linuxで柔軟にディスク領域を管理する仕組みです。
パーティションの作成
ディスク全体をLVMとして利用する場合、パーティションを作成せずとも利用可能ですが、anacondaの標準構成との整合性を考えて、その方がわかりやすいと思います。
1ステップ増えますが、パーティションを切ってからLVMを作成するようにしています。
パーティション作成前の状態
$ lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 16G 0 disk ・・・ 新規ディスク
新規ディスク(/dev/sdb)にパーティション作成
最近のハードウェアであれば、fdiskコマンドよりもgdiskコマンドを使うのが良いでしょう。
$ sudo gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.7
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries in memory.
Command (? for help): o ・・・ 新しい空のパーティション作成する
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y
Command (? for help): n ・・・ 新しいパーティションを作成する
Partition number (1-128, default 1): ・・・ エンターキーを押下
First sector (34-33554398, default = 2048) or {+-}size{KMGTP}: ・・・ エンターキーを押下
Last sector (2048-33554398, default = 33554398) or {+-}size{KMGTP}: ・・・ エンターキーを押下
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8e00 ・・・ パーティションタイプを指定する
Changed type of partition to 'Linux LVM'
Command (? for help): p ・・・ パーティションテーブルを表示する
Disk /dev/sdb: 33554432 sectors, 16.0 GiB
Model: Virtual disk
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 6163F143-1758-47B7-BD70-C49ACC7BE8F1
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 33554398
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 33554398 16.0 GiB 8E00 Linux LVM
Command (? for help): w ・・・ パーティションテーブルをディスクに書き込みをして終了する
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y ・・・ 続行するかどうか(「y」を応答で書き込まれる)
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
パーティション作成後の状態
$ lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 16G 0 disk
`-sdb1 8:17 0 16G 0 part ・・・ 新規作成したパーティション
物理ボリューム(PV)
LVMの物理ボリューム操作です。
物理ボリューム作成
「/dev/sdb1」のパーティションに、LVMの物理ボリュームを作成する方法です。
$ sudo pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
物理ボリューム参照
作成した物理ボリュームは「pvs」コマンドや「pvdisplay」コマンドで参照できます。
$ sudo pvs /dev/sdb1
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- <16.00g <16.00g
$ sudo pvdisplay /dev/sdb1
"/dev/sdb1" is a new physical volume of "<16.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1 ・・・ 物理ボリューム(PV)名
VG Name
PV Size <16.00 GiB ・・・ 物理ボリューム(PV)サイズ
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID POL1ZI-bv95-GmC2-E7Ge-IUIg-Z0mQ-TENHCy
物理ボリューム削除
物理ボリュームを削除する方法です。
$ sudo pvremove /dev/sdb1
Labels on physical volume "/dev/sdb1" successfully wiped.
ボリュームグループ(VG)
LVMのボリュームグループ操作です。
ボリュームグループの作成
「/dev/sdb1」の物理ボリュームに、ボリュームグループを作成する方法です。
$ sudo pvs /dev/sdb1 ・・・ 物理ボリューム(PV)の確認
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- <16.00g <16.00g
$ sudo vgcreate data1vg /dev/sdb1 ・・・ ボリュームグループの作成
Volume group "data1vg" successfully created
ボリュームグループの参照
作成したボリュームグループは「vgs」コマンドや「vgdisplay」コマンドで参照できます。
$ sudo vgs data1vg
VG #PV #LV #SN Attr VSize VFree
data1vg 1 0 0 wz--n- <16.00g <16.00g
$ sudo vgdisplay data1vg
--- Volume group ---
VG Name data1vg ・・・ ボリュームグループ(VG)名
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0 ・・・ 物理ボリューム(PV)の最大の数 [ 0 は 無制限 (システム上の上限値まで)]
Cur PV 1 ・・・ ボリュームグループ(VG)に含まれている物理ボリューム(PV)の数
Act PV 1 ・・・ アクティブな物理ボリューム(PV)の数
VG Size <16.00 GiB ・・・ ボリュームグループ(VG)サイズ
PE Size 4.00 MiB ・・・ 物理区画(PE)サイズ
Total PE 4095 ・・・ 総物理区画数[ 4095 × 4 Mib ≒ 16 GiB ]
Alloc PE / Size 0 / 0
Free PE / Size 4095 / <16.00 GiB
VG UUID FtlNtK-yUEi-2eqf-AEuz-M5uL-3ylA-6iIObo
ボリュームグループの削除
ボリュームグループを削除する方法です。
$ sudo vgremove data1vg
Volume group "data1vg" successfully removed
論理ボリューム(LV)
LVMの論理ボリューム操作です。
論理ボリュームの作成
「data1vg」のボリュームグループに、論理ボリュームを作成する方法です。
$ sudo lvcreate -n work1lv -L 4096m data1vg
Logical volume "worklv" created.
論理ボリュームの参照
作成した論理ボリュームは「lvs」コマンドや「lvdisplay」コマンドで参照できます。
$ sudo lvs /dev/data1vg/work1lv
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
work1lv data1vg -wi-a----- 4.00g
$ sudo lvdisplay /dev/data1vg/work1lv
--- Logical volume ---
LV Path /dev/data1vg/work1lv
LV Name work1lv
VG Name data1vg
LV UUID DnsUch-VECW-xl3E-almM-D5iC-s3u1-JTE29A
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2025-10-10 00:40:10 +0900
LV Status available
# open 0
LV Size 4.00 GiB
Current LE 1024
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:7
論理ボリュームの削除
論理ボリュームを削除する方法です。
$ sudo lvremove /dev/data1vg/work1lv
Do you really want to remove active logical volume data1vg/work1lv? [y/n]: y
Logical volume "work1lv" successfully removed.
ファイルシステム
ファイルシステムの作成
mkfsコマンドでファイルシステムを作成します。
$ sudo mkfs -t xfs /dev/data1vg/work1lv ・・・ ファイルシステムは「xfs」で作成
meta-data=/dev/data1vg/work1lv isize=512 agcount=4, agsize=262144 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1 nrext64=0
data = bsize=4096 blocks=1048576, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=16384, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Discarding blocks...Done.
$ sudo mount /dev/data1vg/work1lv /work1 ・・・ マウントの確認
$ df -hT /work1
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/data1vg-work1lv xfs 4.0G 61M 3.9G 2% /work1
ファイルシステムの自動マウント
マシン起動時にファイルシステムの自動マウントを設定します。
$ sudo blkid | grep work1lv
/dev/mapper/data1vg-work1lv: UUID="bb28e2b8-8368-4e05-bc56-1663bcd42eaf" TYPE="xfs"
$ sudo cp -p /etc/fstab /etc/fstab.bak
$ diff /etc/fstab.bak /etc/fstab
20a21
> UUID=bb28e2b8-8368-4e05-bc56-1663bcd42eaf /work xfs defaults 0 0
LVMでミラーリング(RAID1)構成
ディスクをミラーリング(RAID1)構成するのに、専用のRAIDボードを購入しても良いですが、LVMの機能でミラーリングすうことも可能です。
既存の論理ボリュームをミラーリングする場合、1物理区画(1PE)の空が必要です。
種類 | 特徴 | メリット | デメリット |
---|---|---|---|
ハードウェア RAID | ・RAID専用のハードウェアが処理を行う ・OSからは通常の1つのディスクとして見える ・処理がCPUに負担をかけない ・BIOSレベルで構成され、OSより前の段階で動作 | ・CPU負荷が少ない ・パフォーマンスが高い (特にRAID 5, RAID 6など) ・信頼性が高い (高品質なRAIDカード使用時) | ・RAIDカードが故障すると復旧が困難 (同型カードが必要な場合も) ・コストが高い (RAIDカードの導入が必要) ・設定や監視がブラックボックスになりやすい |
ソフトウェアRAID | ・RAID処理をOSがソフトウェア的に実行 ・専用ハードウェアは不要 ・LVM+RAIDやmdadm などで管理・OSがRAIDを直接制御し、柔軟性が高い | ・コストがかからない (ハードウェア不要) ・柔軟で管理しやすい ・RAID構成を別のLinuxに移動しても認識されやすい | ・CPU負荷が増える (最近のCPUなら問題ないケース多い) ・BIOSレベルでRAID構成が見えない ・ブートディスクに関して注意が必要 (特にRAID 1以外) |
既存の論理ボリュームとファイルシステム
$ sudo vgdisplay data1vg
--- Volume group ---
VG Name data1vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <16.00 GiB
PE Size 4.00 MiB
Total PE 4095
Alloc PE / Size 4094 / 15.99 GiB
Free PE / Size 1 / 4.00 MiB ・・・ 1物理区画の空が必要
VG UUID gRJNty-sT8b-i7Kp-M9Y3-BhBv-8hIW-50l7kL
$ lsblk /dev/sdb /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 16G 0 disk
`-sdb1 8:17 0 16G 0 part
`-data1vg-work1lv 253:7 0 16G 0 lvm /work1 ・・・ /dev/sdb1側にマウントされている
sdc 8:32 0 16G 0 disk
`-sdc1 8:33 0 16G 0 part
$ ls -lh /work1
total 10485760
-rw-r--r--. 1 root root 10737418240 Oct 13 05:20 10GiB.dat ・・・ 10ギガバイトのファイルがある
「/dev/sdc1」を「data1vg」に含めます
$ sudo pvs /dev/sdb1 /dev/sdc1
PV VG Fmt Attr PSize PFree
/dev/sdb1 data1vg lvm2 a-- <16.00g 4.00m ・・・ ボリュームグループの「data1vg」に属している
/dev/sdc1 lvm2 --- <16.00g <16.00g ・・・ ボリュームグループのどこにも属していない
$ sudo vgs data1vg
VG #PV #LV #SN Attr VSize VFree
data1vg 1 1 0 wz--n- <16.00g 4.00m
$ sudo vgextend data1vg /dev/sdc1
Volume group "data1vg" successfully extended
$ sudo pvs /dev/sdb1 /dev/sdc1
PV VG Fmt Attr PSize PFree
/dev/sdb1 data1vg lvm2 a-- <16.00g 4.00m ・・・ ボリュームグループの「data1vg」に属している
/dev/sdc1 data1vg lvm2 a-- <16.00g <16.00g ・・・ ボリュームグループの「data1vg」に属している
$ sudo vgs data1vg
VG #PV #LV #SN Attr VSize VFree
data1vg 2 1 0 wz--n- 31.99g 16.00g
RAID1構成に変換します。
$ sudo lvconvert -m1 /dev/data1vg/work1lv /dev/sdc1
Are you sure you want to convert linear LV data1vg/work1lv to raid1 with 2 images enhancing resilience? [y/n]: y
Logical volume data1vg/work1lv successfully converted.
RAID1更生のディスクが同期されます。Cpy%Syncの値が100.00で完全同期です。
$ sudo lvs /dev/data1vg/work1lv
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
work1lv data1vg rwi-aor--- 15.99g 5.58 ・・・ 同期が100.00になるまで待つ
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
work1lv data1vg rwi-aor--- 15.99g 100.00
LVM上でのRAID1構成であることを確認します。
$ lsblk /dev/sdb /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 16G 0 disk
`-sdb1 8:17 0 16G 0 part
|-data1vg-work1lv_rmeta_0 253:8 0 4M 0 lvm ・・・ RAID1のメタデータ領域(監視・整合性チェックに使われる)
| `-data1vg-work1lv 253:7 0 16G 0 lvm /work1
`-data1vg-work1lv_rimage_0 253:9 0 16G 0 lvm ・・・ RAID1のミラーイメージ領域(実際のデータが格納される)
`-data1vg-work1lv 253:7 0 16G 0 lvm /work1
sdc 8:32 0 16G 0 disk
`-sdc1 8:33 0 16G 0 part
|-data1vg-work1lv_rmeta_1 253:10 0 4M 0 lvm
| `-data1vg-work1lv 253:7 0 16G 0 lvm /work1
`-data1vg-work1lv_rimage_1 253:11 0 16G 0 lvm
`-data1vg-work1lv 253:7 0 16G 0 lvm /work1
RAID1更生を解除します。
$ sudo lvconvert -m0 /dev/data1vg/work1lv
Are you sure you want to convert raid1 LV data1vg/work1lv to type linear losing all resilience? [y/n]: y
Logical volume data1vg/work1lv successfully converted.
LVM上でのRAID1構成でないことを確認します。
$ lsblk /dev/sdb /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 16G 0 disk
`-sdb1 8:17 0 16G 0 part
`-data1vg-work1lv 253:7 0 4G 0 lvm /work1
sdc 8:32 0 16G 0 disk
`-sdc1 8:33 0 16G 0 part