จัดการ Disk Partition และ LVM บน VPS Linux
เมื่อ VPS เริ่ม disk เต็มหรือต้องการเพิ่ม storage ความรู้เรื่อง disk partition และ LVM (Logical Volume Manager) ช่วยให้ขยายพื้นที่ได้โดยไม่ต้อง reformat หรือ downtime บทความนี้ครอบคลุมทั้งการดู partition, เพิ่ม disk ใหม่ และ resize LVM volume
ดูสถานะ Disk ปัจจุบัน
# ดู disk และ partition ทั้งหมด
lsblk
# ดูพื้นที่ใช้งาน
df -h
# ดูรายละเอียด partition
sudo fdisk -l
# ดู filesystem type
lsblk -f
เพิ่ม Disk ใหม่ด้วย fdisk
เมื่อ VPS provider เพิ่ม volume ใหม่ให้ (เช่น /dev/vdb) ต้องสร้าง partition และ format ก่อนใช้:
# เปิด fdisk บน disk ใหม่
sudo fdisk /dev/vdb
# ใน fdisk พิมพ์ตามลำดับ:
n # สร้าง partition ใหม่
p # primary partition
1 # partition number 1
# Enter = ใช้ default (first sector)
# Enter = ใช้ default (last sector = ทั้ง disk)
w # เขียนและออก
# Format เป็น ext4
sudo mkfs.ext4 /dev/vdb1
# Mount ชั่วคราว
sudo mkdir /mnt/data
sudo mount /dev/vdb1 /mnt/data
# Mount ถาวร (เพิ่มใน /etc/fstab)
echo "UUID=$(blkid -s UUID -o value /dev/vdb1) /mnt/data ext4 defaults 0 2" | sudo tee -a /etc/fstab
ขยาย Root Partition ด้วย LVM
ถ้า VPS ใช้ LVM (ตรวจด้วย lsblk -f เห็น lvm type) สามารถขยายได้ง่ายกว่ามาก:
# ดู logical volume
sudo lvdisplay
sudo vgdisplay
# ดู physical volume
sudo pvdisplay
# ขยาย logical volume ให้ใช้พื้นที่ที่เหลือทั้งหมด
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
# Resize filesystem ให้รับรู้ space ใหม่
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
เพิ่ม Physical Volume ใน LVM Group
# หลังเพิ่ม disk ใหม่ /dev/vdb เข้า LVM
sudo pvcreate /dev/vdb1
sudo vgextend ubuntu-vg /dev/vdb1
# ดูว่า VG มีพื้นที่เพิ่มแล้ว
sudo vgdisplay | grep "Free PE"
# ขยาย LV ใช้พื้นที่ใหม่
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
ตรวจสอบว่า Disk ทำงานถูกต้อง
# ตรวจ filesystem ที่ mount
df -h
# ตรวจ LVM อย่างละเอียด
sudo lvs
sudo vgs
sudo pvs
# ตรวจ disk health (SMART)
sudo apt install smartmontools -y
sudo smartctl -a /dev/sda
# ตรวจ filesystem errors
sudo dmesg | grep -i "error\|I/O error" | tail -20
df -h | awk '$5 > "80%" {print "DISK ALERT:", $0}'
แก้ปัญหาที่พบบ่อย
Error: "No space left on device" ทั้งที่ df -h ยังมีที่เหลือ
อาจเป็นปัญหา inode หมด (เกิดบ่อยกับ server ที่มี file เล็กๆ จำนวนมาก เช่น mail server หรือ session files):
# ตรวจ inode usage
df -i
# หา directory ที่มีไฟล์มากที่สุด
find / -xdev -printf '%h\n' | sort | uniq -c | sort -rn | head -10
# ลบไฟล์ที่ไม่ต้องการ (เช่น session เก่า)
find /var/lib/php/sessions -mtime +7 -delete
mount: wrong fs type หรือ bad superblock
Format ไม่สำเร็จหรือ disk มีปัญหา ต้อง format ใหม่:
# ตรวจ filesystem type ที่มีอยู่
sudo blkid /dev/vdb1
# ถ้าต้องการ format ใหม่ (ข้อมูลจะหายทั้งหมด)
sudo mkfs.ext4 -F /dev/vdb1
# ตรวจ filesystem error
sudo e2fsck -f /dev/vdb1
resize2fs: device or resource busy
ไม่สามารถ resize root filesystem ในขณะที่ mount อยู่ ต้องใช้ Live mode หรือ resize2fs ที่รองรับ online resize:
# สำหรับ ext4 สามารถ online resize ได้
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
# ถ้า error ให้ unmount ก่อน (สำหรับ non-root partition)
sudo umount /mnt/data
sudo e2fsck -f /dev/vdb1
sudo resize2fs /dev/vdb1
Disk เต็มกะทันหัน หา culprit ไม่เจอ
ไฟล์ที่ถูกลบแต่ยังมี process เปิดอยู่จะยังกินพื้นที่อยู่ ต้อง restart process นั้น:
# หา deleted files ที่ process ยังเปิดอยู่
sudo lsof | grep deleted | awk '{print $7, $1, $2}'
# restart process ที่ถือ file นั้น (เช่น nginx ถือ log เก่า)
sudo systemctl restart nginx
คำถามที่พบบ่อย
LVM กับ partition ปกติต่างกันอย่างไร?
Partition ปกติ (MBR/GPT) คือการแบ่ง disk จริงๆ ขยายได้ยากและต้อง reformat LVM เป็น layer นามธรรมที่อยู่บน partition อีกชั้น ทำให้ขยาย ย้าย และ snapshot volume ได้โดยไม่ต้อง reformat VPS ส่วนใหญ่ที่ order มักมี LVM อยู่แล้ว
ต้อง reboot หลัง resize partition ไหม?
LVM + ext4/xfs รองรับ online resize ไม่ต้อง reboot แต่ถ้าขยาย partition ที่ไม่ใช่ LVM ด้วย fdisk/parted บางกรณีต้อง reboot เพื่อให้ kernel รับรู้ partition table ใหม่ สั่ง sudo partprobe ก่อนเพื่อลอง reload โดยไม่ reboot
Swap partition ควรใหญ่แค่ไหน?
สำหรับ VPS สมัยใหม่: RAM ≤ 2GB → swap = RAM×2, RAM 2-8GB → swap = RAM, RAM > 8GB → swap = 4GB ก็พอ หรือใช้ swapfile แทน partition จะยืดหยุ่นกว่า (ดูบทความ ตั้ง Swap Memory บน VPS)