LVM技術の詳細
lvm2のインストール後に以下のコマンドがサポートされます。
yum install -y lvm2
LVMコマンド一覧
| 番号 | 機能 | PV物理ボリュームコマンド | VGボリュームグループコマンド | LV論理ボリュームコマンド |
| 01 | スキャン機能 | pvscan | vgscan | lvscan |
| 02 | 作成機能 | pvcreate | vgcreate | lvcreate |
| 03 | 表示機能 | pvdisplay | vgdisplay | lvdisplay |
| 04 | 削除機能 | pvremove | vgremove | lvremove |
| 05 | 拡張機能 | vgextend | lvextend | |
| 06 | 縮小機能 | vgreduce | lvreduce |
ディスク論理ボリューム管理の実践操作
01. 論理ボリューム操作環境の準備
空のハードディスクsdbを追加し、500Mのパーティションsdb1とsdb2を2つ作成します。
まず、新しく追加したsdbディスクのパーティション操作を行います。
fdisk /dev/sdb
最初に500Mのパーティションを作成するには「n」を入力します。
次に500Mのパーティションを作成するには再度「n」を入力します。
パーティションを確認するには「p」を入力します。
変更を保存するには「w」を入力します。
fdisk -l /dev/sdbでディスクパーティションを確認し、ll /dev/sdb*でパーティションファイルが存在するか確認します。
パーティション操作は完了です。
02. 論理ボリューム機能の基本設定:物理ボリューム(PV)
PVを作成します - sdb1+sdb2
pvcreate /dev/sdb1 /dev/sdb2
pvdisplay
注意点1: この時点で"Total PE"は0です。PVがVGグループに追加されて初めてPEに分割されます。
注意点2: pvsコマンドでPVのグループを簡単に確認できます。
VGグループ"vg_data"を作成します。
vgcreate vg_data /dev/sdb1 /dev/sdb2
vgdisplayで詳細を確認すると、"Total PE"が248個、各PEが4Mサイズであることがわかります。
なぜ248個なのかは、pvdisplayで確認できます。
注意点1: まだLVを作成していないため、VG内の"Alloc PE / Size"はまだ"0/0"です。
注意点2: まだLVを作成していないため、VG内の"Free PE / Size"はまだ"248"で未使用です。
pvdisplayで確認すると、sdb1とsdb2はそれぞれ124個ずつなので、このVGは合計248個のPEを持つことがわかります。
VG作成後、LVを作成します。
lvcreate -L 200M -n storage_lv vg_data
storage_lvに対してファイルシステムを作成(フォーマット)します。
mkfs -t ext4 /dev/vg_data/storage_lv
注意:
- ext4はLVMの縮小と拡張の両方が可能です。
- xfsはLVMの拡張のみ可能で、縮小する場合はフォーマットが必要です。
/mntディレクトリにマウントします。
df -hでマウント状況を確認します。
03. 論理ボリューム拡張の実践
lvextend -L +100M または lvextend -l +100%FREE
-Lと-lの大文字・小文字に注意してください。
[root@server ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg_data 2 1 0 wz -- n- 992.00m 792.00m
#VGに拡張可能な空き容量があるか確認
[root@server ~]# lvextend -L +100M /dev/vg_data/storage_lv
Size of logical volume vg_data/storage_lv changed from 200.00 MiB (50 extents) to 300.00 MiB (75 extents).
Logical volume vg_data/storage_lv successfully resized.
[root@server ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
storage_lv vg_data -wi-ao ---- 300.00m
[root@server ~]# lvscan
ACTIVE '/dev/vg_data/storage_lv' [300.00 MiB ] inherit
拡張容量が正しく反映されない場合は、lvscanコマンドで再スキャンして認識させます。
[root@server ~]# resize2fs /dev/vg_data/storage_lv
ext4ファイルシステムタイプの場合、resize2fsでファイルシステムが拡張容量を認識します。xfsの場合はxfs_growfsコマンドを使用します。
[root@server ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_data-storage_lv 297M 11M 287M 4% /mnt
#容量が100M拡張されていることが確認できます
04. 論理ボリューム縮小の実践
[root@server ~]# umount /mnt
#縮小操作はストレージデバイスをアンマウントする必要があります
[root@server ~]# e2fsck -f /dev/vg_data/storage_lv
#ファイルシステムを縮小する前に、スキャン検査を行い、データ損傷を防ぎます
[root@server ~]# resize2fs /dev/vg_data/storage_lv 200M
#縮小後の200Mファイルシステム空間にスキャンします
[root@server ~]# lvreduce -L 200M /dev/vg_data/storage_lv
WARNING: Reducing active logical volume to 200.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg_data/storage_lv? [ y/n ] : y
Size of logical volume vg_data/storage_lv changed from 300.00 MiB (75 extents) to 200.00 MiB (50 extents).
Logical volume vg_data/storage_lv successfully resized.
#storage_lv論理ボリュームを元の200Mに縮小します
[root@server ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
storage_lv vg_data -wi-a ----- 200.00m
[root@server ~]# mount /dev/vg_data/storage_lv /mnt
[root@server ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_data-storage_lv 190M 1.6M 175M 1% /mnt
注意: 企業環境ではディスク縮小操作は極力避けてください。縮小操作はファイルシステムに不可逆的な影響を与える可能性があります。
05. ボリュームグループ拡張の実践
仮想ホスト環境で新しいハードディスクを追加し、そのディスクをPVとして設定します。
[root@server ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
[root@server ~]# vgextend vg_data /dev/sdc
Volume group "vg_data" successfully extended with /dev/sdc
#VG物理ボリュームグループの拡張が完了しました
[root@server ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg_data 2 1 0 wz -- n- 20.96g 20.57 g
06. ボリュームグループ縮小の実践
[root@server ~]# vgreduce vg_data /dev/sdc
Removed "/dev/sdc" from volume group "vg_data"
[root@server ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg_data 2 1 0 wz -- n- 992.00m 792.00m
[root@server ~]# pvremove /dev/sdc
Labels on physical volume "/dev/sdc" successfully wiped.
# /dev/sdc PV物理ボリュームの削除が完了しました
LVM論理ボリュームの知識まとめ
LVM論理ボリューム管理の利点
- ディスク容量を柔軟に管理できます。
- 将来のデータ移行作業を回避できます。
LVM論理ボリューム管理の欠点
- ディスクの性能に影響を与える可能性があります。
- ディスクファイルシステムに損傷を与える可能性があります(データ損傷に相当)。
- 可能であればストレージデバイスの使用を推奨します(ソフトウェアストレージアプリケーション)。
関連コマンドの使用例
まず「lsblk」で現在のディスク状況を確認します。
root@server:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 49.5G 0 part
├─vg_data-root 253:0 0 48.5G 0 lvm /
└─vg_data-swap_1 253:1 0 976M 0 lvm [SWAP]
「lsblk -f」でディスクフォーマットを確認できます。
root@server:~# lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
├─sda1 vfat 8BE7-DF3D 511M 0% /boot/efi
├─sda2
└─sda5 LVM2_member eDSv3f-euPB-ePjk-3Nuz-pXuP-a4Tg-xvYwYY
├─vg_data-root ext4 c2545732-2cc3-47b2-a098-5c770211e1a0 5.9G 83% /
└─vg_data-swap_1 swap 0a3c99af-e9ef-432e-9e16-458b267d1027 [SWAP]
ディスク拡張の手順
- df -h でディスク状況を確認
- lvdisplay(論理ボリューム)を確認
- vgdisplay(論理グループ)を確認
- pvdisplay(物理ボリューム)を確認
- fdisk /dev/ディスク名 でパーティション作成
- mkfs -t ext4 /dev/sdb1 でフォーマット
- vgextend vg_data /dev/sdb1 でVG拡張(vg_dataはVG名、sdb1はディスク名)
- pvscan で確認
- lvextend -l 100%FREE /dev/vg_data/root でLV拡張(/dev/vg_data/rootはLVのパス)
- resize2fs /dev/vg_data/root でファイルシステム更新
CentOS7の場合、最後のステップでエラーが発生することがあります。正しいコマンドは:
xfs_growfs -d /dev/vg_data/root