ติดตั้งและใช้งาน LVM บน VPS Linux

ติดตั้งและใช้งาน LVM บน VPS Linux

อัปเดต: 12 ตุลาคม 2026 · Storage & Disk Management

LVM (Logical Volume Manager) คือระบบจัดการ disk บน Linux ที่ยืดหยุ่นกว่า partition ทั่วไปมาก คุณสามารถ ขยาย shrink volume ได้โดยไม่ต้อง reformat สร้าง snapshot สำหรับ backup และรวมหลาย disk ให้เป็น pool เดียว — ทำได้ทั้งหมดในขณะที่ระบบกำลังทำงาน (online)

บน VPS สมัยใหม่ (Ubuntu 22.04/24.04, Debian 12, AlmaLinux 9, Rocky Linux 9) มักติดตั้ง LVM มาพร้อมกัน แต่หลายคนยังไม่รู้วิธีใช้ประโยชน์เต็มที่ บทความนี้จะพาทำตั้งแต่ต้นจนขยาย partition ออนไลน์ได้

LVM คืออะไร — ความแตกต่างจาก Partition ทั่วไป

ก่อนเริ่มควรเข้าใจโครงสร้าง 3 ชั้นของ LVM:

ชั้นชื่อคำอธิบาย
ล่างสุดPhysical Volume (PV)disk หรือ partition จริง เช่น /dev/sdb, /dev/vdb
กลางVolume Group (VG)pool ที่รวม PV หลายอันเข้ากัน
บนสุดLogical Volume (LV)partition เสมือนที่ mount ใช้งาน

ข้อดีของ LVM เหนือ partition ธรรมดา: ขยาย/ลด volume ได้แบบ online, เพิ่ม disk เข้า VG แล้วขยาย LV ได้ทันที, สร้าง snapshot ก่อน upgrade/migration, ทำ thin provisioning ประหยัด space

ขั้นตอนที่ 1 — ติดตั้ง LVM2

Ubuntu/Debian:

sudo apt update && sudo apt install -y lvm2
sudo systemctl enable --now lvm2-lvmetad 2>/dev/null || true

AlmaLinux/Rocky Linux/CentOS:

sudo dnf install -y lvm2
sudo systemctl enable --now lvm2-monitor
Tip: Ubuntu 22.04 ขึ้นไปติดตั้ง lvm2 มาพร้อมกันแล้วถ้าเลือก LVM ตอน install ตรวจสอบด้วย which pvcreate

ขั้นตอนที่ 2 — เตรียม Physical Volume (PV)

ก่อนสร้าง PV ให้รู้จัก disk ที่มีอยู่ก่อน:

# ดู disk ทั้งหมด
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE

# ดู partition table ของ disk ใหม่
sudo fdisk -l /dev/vdb

สมมติว่า disk ใหม่คือ /dev/vdb ยังไม่มี partition:

# สร้าง Physical Volume จาก disk ทั้งลูก (แนะนำ)
sudo pvcreate /dev/vdb

# หรือสร้างจาก partition (ถ้าต้องการแบ่ง disk)
sudo fdisk /dev/vdb   # สร้าง partition แบบ Linux LVM (type 8e)
sudo pvcreate /dev/vdb1

# ตรวจสอบ PV
sudo pvdisplay
sudo pvs

ขั้นตอนที่ 3 — สร้าง Volume Group (VG)

# สร้าง VG ชื่อ "data-vg" จาก PV ที่เตรียมไว้
sudo vgcreate data-vg /dev/vdb

# เพิ่ม disk หลายอัน
sudo vgcreate data-vg /dev/vdb /dev/vdc

# ตรวจสอบ VG
sudo vgdisplay
sudo vgs
Tip: ตั้งชื่อ VG ให้สื่อความหมาย เช่น db-vg สำหรับ database, web-vg สำหรับ web server เพื่อให้ง่ายต่อการจัดการในอนาคต

ขั้นตอนที่ 4 — สร้าง Logical Volume (LV)

# สร้าง LV ขนาด 20GB ชื่อ "data-lv" จาก VG "data-vg"
sudo lvcreate -L 20G -n data-lv data-vg

# สร้าง LV ใช้พื้นที่ 100% ที่เหลือใน VG
sudo lvcreate -l 100%FREE -n data-lv data-vg

# สร้าง LV ใช้ 80% ของ VG (เหลือไว้ snapshot)
sudo lvcreate -l 80%VG -n data-lv data-vg

# ตรวจสอบ LV
sudo lvdisplay
sudo lvs

ขั้นตอนที่ 5 — Format และ Mount

# Format เป็น ext4
sudo mkfs.ext4 /dev/data-vg/data-lv

# หรือ XFS (แนะนำสำหรับ database เพราะ performance ดีกว่า)
sudo mkfs.xfs /dev/data-vg/data-lv

# สร้าง mount point
sudo mkdir -p /data

# Mount
sudo mount /dev/data-vg/data-lv /data

# เพิ่มใน /etc/fstab เพื่อ auto mount หลัง reboot
echo '/dev/data-vg/data-lv /data ext4 defaults 0 2' | sudo tee -a /etc/fstab

# ทดสอบ fstab
sudo mount -a && df -h /data

ขยาย Logical Volume แบบ Online (ไม่ต้อง Downtime)

นี่คือฟีเจอร์เด่นของ LVM — ขยาย storage ในขณะที่ service กำลังทำงานอยู่:

# เพิ่ม disk ใหม่ /dev/vdc เข้า VG ที่มีอยู่
sudo pvcreate /dev/vdc
sudo vgextend data-vg /dev/vdc

# ขยาย LV เพิ่มอีก 10GB
sudo lvextend -L +10G /dev/data-vg/data-lv

# ขยาย LV ให้ใช้พื้นที่ทั้งหมดที่เหลือใน VG
sudo lvextend -l +100%FREE /dev/data-vg/data-lv

# ขยาย filesystem ให้รับรู้ space ใหม่ (ext4)
sudo resize2fs /dev/data-vg/data-lv

# สำหรับ XFS (ต้อง mount อยู่)
sudo xfs_growfs /data

# ตรวจสอบผล
df -h /data
Tip: lvextend -r จะขยาย LV และ resize filesystem ในคำสั่งเดียว ใช้ได้ทั้ง ext4 และ XFS: sudo lvextend -r -L +10G /dev/data-vg/data-lv

สร้าง LVM Snapshot สำหรับ Backup

Snapshot คือ copy-on-write ของ LV ณ เวลาหนึ่ง เหมาะสำหรับทำ backup database หรือก่อน upgrade:

# สร้าง snapshot ชื่อ "data-snap" ขนาด 5GB (COW buffer)
sudo lvcreate -L 5G -s -n data-snap /dev/data-vg/data-lv

# ตรวจสอบ snapshot
sudo lvs -o +snap_percent

# Mount snapshot (read-only)
sudo mkdir -p /mnt/snapshot
sudo mount -o ro /dev/data-vg/data-snap /mnt/snapshot

# ทำ backup จาก snapshot
sudo tar czf /backup/data-$(date +%Y%m%d).tar.gz /mnt/snapshot

# Unmount และลบ snapshot หลังใช้งาน
sudo umount /mnt/snapshot
sudo lvremove /dev/data-vg/data-snap

Thin Provisioning — ประหยัด Disk Space

Thin Provisioning อนุญาตให้สร้าง LV ที่มีขนาดเกิน physical storage (overcommit) โดย allocate จริงเมื่อมีการเขียน:

# สร้าง Thin Pool ขนาด 50GB
sudo lvcreate -L 50G --thinpool thin-pool data-vg

# สร้าง Thin LV ขนาด 100GB (overcommit)
sudo lvcreate -V 100G --thin -n thin-lv data-vg/thin-pool

# Format และ mount เหมือน LV ทั่วไป
sudo mkfs.ext4 /dev/data-vg/thin-lv
sudo mount /dev/data-vg/thin-lv /data

ตรวจสอบว่า LVM ทำงานถูกต้อง

# ดู overview ทั้งหมด
sudo pvs && sudo vgs && sudo lvs

# ดูรายละเอียด VG
sudo vgdisplay data-vg

# ดูว่า LV mount อยู่ไหม
df -hT | grep lv

# ตรวจ status ของ LVM services
sudo systemctl status lvm2-monitor

# scan หา PV/VG ทั้งหมดในระบบ
sudo pvscan
sudo vgscan
sudo lvscan

# ตรวจ device mapper
ls -la /dev/mapper/
Tip: ถ้า LV ไม่ปรากฏหลัง reboot ให้รัน sudo vgchange -ay เพื่อ activate ทุก VG หรือตรวจสอบ /etc/lvm/lvm.conf

แก้ปัญหาที่พบบ่อย

Error: "Can't open /dev/sdb exclusively. Mounted filesystem?"

เกิดจากพยายาม pvcreate บน disk ที่ mount อยู่หรือมี filesystem อยู่แล้ว

# ตรวจสอบว่า disk ถูก mount อยู่ไหม
lsblk /dev/sdb
findmnt /dev/sdb

# Unmount ก่อน
sudo umount /dev/sdb

# ถ้ามี filesystem เก่าและต้องการล้างทิ้ง
sudo wipefs -a /dev/sdb
sudo pvcreate /dev/sdb

Error: "Insufficient free space: X extents needed, but only Y available"

VG ไม่มี free space พอสำหรับ lvextend ต้องเพิ่ม disk ใหม่ก่อน

# ดู free space ใน VG
sudo vgs -o +vg_free

# เพิ่ม disk ใหม่
sudo pvcreate /dev/vdc
sudo vgextend data-vg /dev/vdc

# ลองขยาย LV อีกครั้ง
sudo lvextend -l +100%FREE /dev/data-vg/data-lv

Error: "resize2fs: Bad magic number in super-block"

filesystem เป็น XFS ไม่ใช่ ext4 ต้องใช้คำสั่งต่างกัน

# ตรวจ filesystem type ก่อน
sudo blkid /dev/data-vg/data-lv

# ถ้าเป็น XFS ต้อง mount ก่อน แล้วใช้ xfs_growfs
sudo mount /dev/data-vg/data-lv /data
sudo xfs_growfs /data

Error: "Snapshot percentage full — snapshot invalid"

Snapshot COW buffer เต็ม (มีการเขียน data เกิน snapshot size) snapshot จะ invalid อัตโนมัติ

# ตรวจ snapshot usage
sudo lvs -o +snap_percent

# ถ้าเกิน 70-80% ควรลบ snapshot แล้วสร้างใหม่ด้วย size ใหญ่กว่า
sudo umount /mnt/snapshot
sudo lvremove /dev/data-vg/data-snap
sudo lvcreate -L 10G -s -n data-snap /dev/data-vg/data-lv

Error: "device-mapper: remove ioctl failed: Device or resource busy"

LV ยังถูก mount อยู่ ต้อง unmount ก่อนลบ

# หา process ที่ใช้ mount point
sudo lsof /data
sudo fuser -m /data

# Force unmount
sudo umount -f /data

# ลบ LV
sudo lvremove /dev/data-vg/data-lv

คำถามที่พบบ่อย

LVM เหมาะกับ VPS ไหม หรือควรใช้แค่ partition ธรรมดา?

LVM เหมาะมากกับ VPS ที่ต้องการความยืดหยุ่น โดยเฉพาะถ้าคาดว่าจะต้องเพิ่ม disk หรือขยาย storage ในอนาคต ถ้าคุณรู้ว่า disk size จะคงที่และไม่ต้องการ snapshot partition ธรรมดาก็เพียงพอ แต่สำหรับ production server ที่ต้องการ uptime สูง LVM เป็นตัวเลือกที่ดีกว่าอย่างชัดเจน

ขยาย LV แล้วต้อง restart service ไหม?

ไม่ต้อง ถ้าใช้ resize2fs (ext4) หรือ xfs_growfs (XFS) ขณะ filesystem ยัง mount อยู่ application ที่รันอยู่จะเห็น space เพิ่มขึ้นทันทีโดยไม่ต้อง restart ใดๆ นี่คือข้อดีหลักของ LVM บน production

LVM snapshot ใช้แทน backup จริงๆ ได้ไหม?

Snapshot เป็นแค่ copy-on-write บน disk เดียวกัน ถ้า disk เสียจะหาย snapshot ไปด้วย ควรใช้ snapshot เป็น จุดพักชั่วคราว เพื่อ dump ข้อมูลออก backup จริงต้องส่งไป remote storage เช่น rclone, restic, BorgBackup อีกชั้นหนึ่ง