1 論理ボリュームマネージャ(LVM)
1.1 LVMの紹介
LVM: Logical Volume Manager(論理ボリュームマネージャ)は、ボリュームを簡単に操作できる抽象層で、ファイルシステムのサイズ変更や複数の物理デバイス間でのファイルシステムの再編成を可能にします。
LVMは柔軟にLVMの容量を変更できます:
- PEを交換してデータを転送し、元のLV内のPEを他のデバイスに移動してLVの容量を減らしたり、他のデバイスのPEをLVに追加して容量を増やしたりできます
実装プロセス:
- デバイスを物理ボリュームとして指定します
- 1つまたは複数の物理ボリュームを使用してボリュームグループを作成します。物理ボリュームは固定サイズの物理エクステント(Physical Extent, PE)で定義されます
- 物理ボリューム上に論理ボリュームを作成します。これは物理エクステント(PE)で構成されています
- 論理ボリューム上にファイルシステムを作成し、マウントできます
最初の論理ボリュームに対応するデバイス名:/dev/dm-#
注:dm: device mapper、1つまたは複数の下層ブロックデバイスを1つの論理デバイスとして組織化するモジュールです。
ソフトリンク:
/dev/mapper/VG_NAME-LV_NAME
/dev/VG_NAME/LV_NAME
例:
[root@rocky86 ~]# ll /dev/mapper/rl*
lrwxrwxrwx 1 root root 7 Aug 1 09:38 /dev/mapper/rl-home -> ../dm-2
lrwxrwxrwx 1 root root 7 Aug 1 09:38 /dev/mapper/rl-root -> ../dm-0
lrwxrwxrwx 1 root root 7 Aug 1 09:38 /dev/mapper/rl-swap -> ../dm-1
以下は、新しく追加された内容の日本語訳です。Markdown形式で提供します。
1.2 論理ボリュームの実装
関連ツールは lvm2 パッケージから提供されます。
[root@centos8 ~]# yum -y install lvm2
1.2.1 PV(Physical Volume)管理ツール
ブロックデバイスを物理ボリュームとして作成します。本質的には、ブロックデバイスにラベルを付けることです。ブロックデバイスの数と物理ボリュームの数は対応しており、ブロックデバイスの数だけ物理ボリュームを作成できます。ブロックデバイスの容量に制限はなく、パーティションをまたぐことができます。
PV情報の表示:
pvs # 簡易PV情報表示
pvdisplay # 詳細情報表示
PVの作成:
pvcreate /dev/DEVICE
PVの削除:
pvremove /dev/DEVICE
例:
# PVの作成
[root@rocky86 ~]# pvcreate /dev/sdb2 /dev/sdc
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdc" successfully created.
# 確認
[root@rocky86 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rl lvm2 a-- <199.00g 0
/dev/sdb2 lvm2 --- 5.00g 5.00g
/dev/sdc lvm2 --- 10.00g 10.00g
# 特定のPVを確認
[root@rocky86 ~]# pvdisplay /dev/sdc
"/dev/sdc" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 4rZKNs-ca0S-Jp4G-zFzY-P8Up-KUG7-yFcZcg
# 削除
[root@rocky86 ~]# pvremove /dev/sdc
Labels on physical volume "/dev/sdc" successfully wiped.
1.2.2 VG(Volume Group)管理ツール
ボリュームグループの表示:
vgs
vgdisplay
ボリュームグループの作成:
vgcreate [-s Size] vgname pv1 [pv2...]
# -s でPEサイズを指定。数字+単位(k|K|m|M|g|G|t|T|p|P|e|E)
ボリュームグループの管理:
vgextend vgname pv1 [pv2...] # ボリュームグループにPVを追加
vgreduce vgname pv1 [pv2...] # ボリュームグループからPVを削除
ボリュームグループの削除:
vgremove vgname # 削除前に対応するPVのバインドを解除する必要がある(pvmove)
例:
# VGの作成
[root@rocky86 ~]# vgcreate -s 16M testvg /dev/sdb2 /dev/sdc
Volume group "testvg" successfully created
# VGの確認
[root@rocky86 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rl 1 3 0 wz--n- <199.00g 0
testvg 2 0 0 wz--n- <14.97g <14.97g
[root@rocky86 ~]# vgdisplay testvg
--- Volume group ---
VG Name testvg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size <14.97 GiB
PE Size 16.00 MiB
Total PE 958
Alloc PE / Size 0 / 0
Free PE / Size 958 / <14.97 GiB
VG UUID Croa8U-P3lT-PpBY-kUaU-FvES-dWoT-eEGLOA
# VGの拡張例
[root@rocky86 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rl lvm2 a-- <199.00g 0
/dev/sdb2 testvg lvm2 a-- 4.98g 272.00m
/dev/sdb3 lvm2 --- 2.00g 2.00g
/dev/sdc testvg lvm2 a-- 9.98g 4.98g
[root@rocky86 ~]# vgextend testvg /dev/sdb3
Volume group "testvg" successfully extended
[root@rocky86 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rl lvm2 a-- <199.00g 0
/dev/sdb2 testvg lvm2 a-- 4.98g 272.00m
/dev/sdb3 testvg lvm2 a-- 1.98g 1.98g
/dev/sdc testvg lvm2 a-- 9.98g 4.98g
1.2.3 LV(Logical Volume)管理ツール
論理ボリュームの表示:
lvs
lvdisplay
論理ボリュームの作成:
lvcreate {-L N[mMgGtT]|-l N} -n NAME VolumeGroup
-L|--size N[mMgGtT] # サイズ指定
-l|--extents N # PE数指定、パーセンテージも可
-n Name # 論理ボリューム名
論理ボリュームの拡張:
lvextend {-L N[mMgGtT]|-l N} LV_NAME
-L|--size [+]Size[mMgGtT] # N単位のサイズ、+10Mのように指定可
-l|--extents [+]Number[PERCENT] # PE数、+10で10PE追加、+100%freeで残り全て使用
-r|--resizefs # ファイルシステムサイズを自動調整
論理ボリュームの縮小:
lvreduce {-L N[mMgGtT]|-l N} LV_NAME
-L|--size [-]Size[mMgGtT] # N単位のサイズ、-10Mのように指定可
-l|--extents [-]Number[PERCENT] # PE数、-10で10PE減少
論理ボリュームの削除:
lvremove /dev/VG_NAME/LV_NAME
ファイルシステムサイズの再設定:
fsadm [options] resize device [new_size[BKMGTEP]]
resize2fs [-f] [-F] [-M] [-P] [-p] lvname # ext系ファイルシステムのみ
xfs_growfs /mountpoint # xfsファイルシステムのみ
例:LVの作成
# testvgから100PEサイズのlv1を作成
[root@rocky86 ~]# lvcreate -l 100 -n lv1 testvg
Logical volume "lv1" created.
# 5GBサイズのlv2を作成
[root@rocky86 ~]# lvcreate -L 5G -n lv2 testvg
Logical volume "lv2" created.
# 残りの使用可能PE数の20%サイズのlv3を作成
[root@rocky86 ~]# lvcreate -l 20%free -n lv3 testvg
Logical volume "lv3" created.
# 指定VGの10%サイズのlv4を作成
[root@rocky86 ~]# lvcreate -l 10%VG -n lv4 testvg
Logical volume "lv4" created.
# 確認
[root@rocky86 ~]# lvs /dev/testvg/*
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 testvg -wi-a----- 1.56g
lv2 testvg -wi-a----- 5.00g
lv3 testvg -wi-a----- 1.67g
lv4 testvg -wi-a----- 1.48g
# 詳細確認
[root@rocky86 ~]# lvdisplay /dev/testvg/lv1
--- Logical volume ---
LV Path /dev/testvg/lv1
LV Name lv1
VG Name testvg
LV UUID 57QkET-OpG0-kZlD-iRC9-YWmL-iaum-BtftfM
LV Write Access read/write
LV Creation host, time rocky86, 2022-08-01 14:27:52 +0800
LV Status available
# open 0
LV Size 1.56 GiB
Current LE 100
Segments 1
Allocation inherit
Read ahead sectors auto - currently set to 8192
Block device 253:3
例:論理ボリュームの拡張
[root@rocky86 ~]# vgdisplay testvg
--- Volume group ---
VG Name testvg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 4
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size <14.97 GiB
PE Size 16.00 MiB
Total PE 958
Alloc PE / Size 622 / <9.72 GiB
Free PE / Size 336 / 5.25 GiB
VG UUID Croa8U-P3lT-PpBY-kUaU-FvES-dWoT-eEGLOA
注意:論理ボリュームの使用は、ハードディスクのパーティションの使用と同じです。まずファイルシステムを作成し、その後マウントする必要があります。
1.2.4 論理ボリュームの拡張と縮小
1.2.4.1 オンラインでの論理ボリューム拡張
論理ボリュームを拡張する前に、ボリュームグループに空き容量があることを確認してください。
2つのステップで実行します:まず論理ボリュームを拡張し、次にファイルシステムを拡張します。
# ステップ1:論理ボリュームの容量拡張
lvextend -L [+]N[mMgGtT] /dev/VG_NAME/LV_NAME
# ステップ2:ファイルシステムの拡張
# ext用
resize2fs /dev/VG_NAME/LV_NAME
# xfs用
xfs_growfs MOUNTPOINT
# 容量とファイルシステムの拡張を1ステップで実行
lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
1.2.4.2 論理ボリュームの縮小
注意:縮小にはデータ損失のリスクがあります。バックアップを取ってから縮小することをお勧めします。オンラインでの縮小はサポートされておらず、まずアンマウントする必要があります。xfsファイルシステムは縮小をサポートしていません。
縮小の手順:
# アンマウント
umount /dev/VG_NAME/LV_NAME
# ファイルシステムのチェック(e2fsckはfsckと書くこともできます)
e2fsck -f /dev/VG_NAME/LV_NAME
# ファイルシステムを指定サイズに縮小
resize2fs /dev/VG_NAME/LV_NAME N[mMgGtT]
# 論理ボリュームの縮小
lvreduce -L [-] N[mMgGtT] /dev/VG_NAME/LV_NAME
# 再マウント
mount /dev/VG_NAME/LV_NAME mountpoint
例:XFSファイルシステムの論理ボリュームの縮小
XFSファイルシステムは縮小をサポートしていないため、以下の方法で縮小できます:
# XFSファイルシステムデータのバックアップ
yum -y install xfsdump
# /dataマウントポイントに対応する論理ボリュームをバックアップ
# 注意:マウントポイントの後に/を付けないでください
xfsdump -f data.img /data
# ファイルシステムのアンマウント
umount /data
# 論理ボリュームの縮小
lvreduce -L 10G /dev/vg0/lv0
# ファイルシステムの再作成
mkfs.xfs -f /dev/vg0/lv0
# 再マウント
mount /dev/vg0/lv0 /data
# データの復元
xfsrestore -f data.img /data
1.2.5 ホスト間でのボリュームグループ移行
ソースコンピュータ上:
- 古いシステムで、ボリュームグループ上のすべての論理ボリュームをアンマウント
- ボリュームグループを無効化:
vgchange -a n vg0
- ボリュームグループをエクスポート:
vgexport vg0
- 古いハードディスクを取り外し、ターゲットコンピュータに接続
ターゲットコンピュータ上:
- ボリュームグループをインポート:
vgimport vg0
- 有効化:
vgchange -ay vg0
- ボリュームグループ上のすべての論理ボリュームをマウント
1.2.6 指定のPVストレージデバイスの取り外し
# PVの表示
pvdisplay
# PV上のデータを移動
pvmove /dev/sdc
# vg0から指定のPVを削除
vgreduce vg0 /dev/sdc
# PVの削除
pvremove /dev/sdc