
LVM คืออะไร?
LVM (Logical Volume Manager) คือระบบจัดการ Disk บน Linux ที่ช่วยให้ขยาย ย่อ และจัดการ Partition ได้ยืดหยุ่นกว่าการใช้ Partition แบบดั้งเดิม LVM เป็นมาตรฐานใน Enterprise Linux Server แทบทุกที่
LVM Architecture
# =============================================
# LVM 3 Layers:
# =============================================
#
# Physical Volume (PV):
# → Disk จริง เช่น /dev/sda, /dev/sdb
# → หรือ Partition เช่น /dev/sda1
# → เป็น Layer ล่างสุด
#
# Volume Group (VG):
# → รวม PV หลายตัวเข้าด้วยกัน
# → เหมือน "Pool" ของ Disk Space
# → ตัวอย่าง: vg_data (รวม sda + sdb)
#
# Logical Volume (LV):
# → แบ่งออกจาก VG
# → เหมือน Partition ที่ยืดหยุ่น
# → สามารถขยาย/ย่อได้ตลอด
# → ตัวอย่าง: lv_home, lv_var
#
# Disk → PV → VG → LV → Filesystem
# /dev/sda → pv1 ┐
# ├→ vg_data → lv_home → /home (ext4)
# /dev/sdb → pv2 ┘ → lv_var → /var (ext4)
สร้าง LVM จากศูนย์
# =============================================
# Step 1: สร้าง Physical Volume (PV)
# =============================================
# ตรวจสอบ Disk:
lsblk
fdisk -l
# สร้าง PV:
pvcreate /dev/sdb
pvcreate /dev/sdc
# ตรวจสอบ PV:
pvs
pvdisplay
# =============================================
# Step 2: สร้าง Volume Group (VG)
# =============================================
# สร้าง VG ชื่อ vg_data จาก 2 PV:
vgcreate vg_data /dev/sdb /dev/sdc
# ตรวจสอบ VG:
vgs
vgdisplay vg_data
# =============================================
# Step 3: สร้าง Logical Volume (LV)
# =============================================
# สร้าง LV ขนาด 50GB:
lvcreate -n lv_home -L 50G vg_data
# สร้าง LV ใช้พื้นที่ 80% ของ VG:
lvcreate -n lv_data -l 80%VG vg_data
# สร้าง LV ใช้พื้นที่ที่เหลือทั้งหมด:
lvcreate -n lv_backup -l 100%FREE vg_data
# ตรวจสอบ LV:
lvs
lvdisplay
# =============================================
# Step 4: สร้าง Filesystem และ Mount
# =============================================
mkfs.ext4 /dev/vg_data/lv_home
mkdir -p /home
mount /dev/vg_data/lv_home /home
# เพิ่มใน /etc/fstab (Mount ถาวร):
echo '/dev/vg_data/lv_home /home ext4 defaults 0 2' >> /etc/fstab
ขยาย LV (Extend) — ที่ใช้บ่อยที่สุด
# =============================================
# Scenario: /home เต็ม ต้องขยาย
# =============================================
#
# ตรวจสอบพื้นที่เหลือใน VG:
vgs
# VG #PV #LV Free
# vg_data 2 3 20G ← เหลือ 20GB
# ขยาย LV เพิ่ม 10GB:
lvextend -L +10G /dev/vg_data/lv_home
# ขยาย LV ใช้พื้นที่เหลือทั้งหมด:
lvextend -l +100%FREE /dev/vg_data/lv_home
# ขยาย Filesystem ให้ตรงกับ LV:
# สำหรับ ext4:
resize2fs /dev/vg_data/lv_home
# สำหรับ XFS:
xfs_growfs /home
# ทำ 2 ขั้นตอนในคำสั่งเดียว:
lvextend -r -L +10G /dev/vg_data/lv_home
# -r = resize filesystem อัตโนมัติ
# ตรวจสอบ:
df -h /home
เพิ่ม Disk ใหม่เข้า VG
# =============================================
# Scenario: Disk เต็ม เพิ่ม Disk ใหม่
# =============================================
#
# 1. เพิ่ม Disk ใหม่ (เช่น /dev/sdd):
pvcreate /dev/sdd
# 2. เพิ่ม PV เข้า VG:
vgextend vg_data /dev/sdd
# 3. ตรวจสอบ VG (พื้นที่เพิ่มขึ้น):
vgs
# 4. ขยาย LV ที่ต้องการ:
lvextend -r -L +100G /dev/vg_data/lv_data
# จบ! ไม่ต้อง Unmount, ไม่ต้อง Downtime
LVM Snapshot — Backup ก่อนเปลี่ยนแปลง
# =============================================
# LVM Snapshot:
# =============================================
# Snapshot = "ภาพถ่าย" ของ LV ณ เวลาที่กำหนด
# ถ้าเปลี่ยนแล้วพัง → Restore กลับได้!
#
# สร้าง Snapshot:
lvcreate -s -n lv_home_snap -L 5G /dev/vg_data/lv_home
# -s = snapshot
# -L 5G = พื้นที่สำหรับเก็บ Changes (ไม่ใช่ขนาด LV)
# ตรวจสอบ Snapshot:
lvs
# Restore จาก Snapshot (ถ้าพัง):
umount /home
lvconvert --merge /dev/vg_data/lv_home_snap
mount /home
# ลบ Snapshot (ถ้าไม่ต้องการ):
lvremove /dev/vg_data/lv_home_snap
LVM Thin Provisioning
# =============================================
# Thin Provisioning:
# =============================================
# จัดสรรพื้นที่แบบ "จ่ายเมื่อใช้"
# → สร้าง LV 100GB แต่ใช้จริงแค่ 20GB
# → ประหยัด Disk Space
#
# สร้าง Thin Pool:
lvcreate --type thin-pool -n tp_data -L 200G vg_data
# สร้าง Thin LV (Over-Provisioning ได้!):
lvcreate --type thin -n lv_vm1 -V 100G --thinpool tp_data vg_data
lvcreate --type thin -n lv_vm2 -V 100G --thinpool tp_data vg_data
lvcreate --type thin -n lv_vm3 -V 100G --thinpool tp_data vg_data
# → รวม 300GB แต่ Pool มีแค่ 200GB
# → ใช้จริงเท่าที่เขียน
# ตรวจสอบ Usage:
lvs -a
คำสั่ง LVM ที่ใช้บ่อย
| คำสั่ง | หน้าที่ |
|---|---|
pvs / pvdisplay |
ดู Physical Volumes |
vgs / vgdisplay |
ดู Volume Groups |
lvs / lvdisplay |
ดู Logical Volumes |
pvcreate |
สร้าง PV |
vgcreate / vgextend |
สร้าง/ขยาย VG |
lvcreate |
สร้าง LV |
lvextend -r |
ขยาย LV + Filesystem |
lvreduce |
ลดขนาด LV (ระวัง!) |
lvremove |
ลบ LV |
lvcreate -s |
สร้าง Snapshot |
สรุป: LVM สำหรับ Linux Admin
LVM เป็นเครื่องมือจัดการ Disk ที่ยืดหยุ่นที่สุดบน Linux ช่วยให้ขยาย Filesystem ได้โดยไม่ต้อง Downtime เพิ่ม Disk ใหม่ได้ง่าย และสร้าง Snapshot สำหรับ Backup ก่อนเปลี่ยนแปลง ทุก Enterprise Linux Server ควรใช้ LVM เป็นมาตรฐาน