ขยาย Logical Volume (LVM) บน Linux

ขยายพื้นที่ Logical Volume บน Linux หลังเพิ่มขนาดดิสก์หรือเพิ่มดิสก์ใหม่ ด้วย growpart, pvresize, vgextend และ lvextend แบบไม่ต้องปิดเครื่อง

โดย ทีมงาน THAI DATA CLOUD อัปเดต อ่าน 12 นาที เข้าชม 11 ครั้ง

แชร์FacebookXLINELinkedIn
ขยาย Logical Volume (LVM) บน Linux
Logical Volume — ขยาย Logical Volume (LVM) บน Linux
ขยาย Logical Volume (LVM) บน Linux

คำตอบสั้น ๆ: ขยายพื้นที่ Logical Volume บน Linux หลังเพิ่มขนาดดิสก์หรือเพิ่มดิสก์ใหม่ ด้วย growpart, pvresize, vgextend และ lvextend แบบไม่ต้องปิดเครื่อง

คู่มือนี้อธิบาย Logical Volume ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย

LVM (Logical Volume Manager) เป็นชั้นจัดการดิสก์ที่ทำให้ขยายพื้นที่ได้โดยไม่ต้องย้ายข้อมูลหรือปิดเครื่อง Ubuntu Server และ AlmaLinux/Rocky Linux ที่ติดตั้งแบบมาตรฐานมักใช้ LVM สำหรับ / อยู่แล้ว เมื่อพื้นที่ใกล้เต็มและคุณได้เพิ่มขนาดดิสก์หรือเพิ่มดิสก์ใหม่ให้เซิร์ฟเวอร์แล้ว บทความนี้จะพาขยาย Logical Volume และ Filesystem ให้ใช้พื้นที่ใหม่นั้น

LVM มี 3 ชั้น คือ Physical Volume (PV) ซึ่งเป็นดิสก์หรือพาร์ติชัน, Volume Group (VG) ซึ่งเป็นกองพื้นที่รวมจาก PV หลายตัว และ Logical Volume (LV) ซึ่งเป็นส่วนที่แบ่งจาก VG ไปสร้าง Filesystem การขยายจึงต้องทำจากล่างขึ้นบน: ขยาย PV หรือเพิ่ม PV ใหม่เข้า VG แล้วจึงขยาย LV และ Filesystem

สิ่งที่ต้องเตรียม

  • เซิร์ฟเวอร์ Ubuntu 22.04/24.04 หรือ AlmaLinux/Rocky Linux 8-9 ที่ใช้ LVM และสิทธิ์ sudo
  • พื้นที่ดิสก์ที่เพิ่มแล้วจากฝั่งผู้ให้บริการ (ขยายดิสก์เดิม หรือเพิ่มดิสก์ใหม่) ดู Volume Disk บน Cloud ของ TDC
  • ข้อมูลสำรองหรือ Snapshot ล่าสุด แม้การขยายจะปลอดภัยโดยทั่วไป แต่การพิมพ์ชื่อดิสก์ผิดอาจทำลายข้อมูลได้ ดู การ Backup Server บน Cloud ของ TDC

หมายเหตุ: ถ้าเครื่องของคุณไม่ได้ใช้ LVM (ผลของ lsblk ไม่มีบรรทัดชนิด lvm) ให้ทำตามบทความ การขยายพื้นที่ Partition หลังเพิ่มพื้นที่ Disk Space (Linux) แทน

ขั้นตอนที่ 1: สำรวจโครงสร้างดิสก์ปัจจุบัน

lsblk
sudo pvs
sudo vgs
sudo lvs
df -hT

ตัวอย่างผลของ lsblk บน Ubuntu

NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
vda                       252:0    0  100G  0 disk
├─vda1                    252:1    0    1M  0 part
├─vda2                    252:2    0    2G  0 part /boot
└─vda3                    252:3    0   48G  0 part
  └─ubuntu--vg-ubuntu--lv 253:0    0   48G  0 lvm  /

จากตัวอย่างนี้ ดิสก์ vda ถูกขยายเป็น 100G แล้ว แต่พาร์ติชัน vda3 ที่เป็น PV ยังมีขนาด 48G ชื่อดิสก์ในเครื่องของคุณอาจเป็น sda หรือ vda ให้ใช้ชื่อตามผลจริงเสมอ ส่วนชื่อ VG และ LV ดูได้จาก vgs และ lvs เช่น Ubuntu ใช้ ubuntu-vg/ubuntu-lv ส่วน AlmaLinux/Rocky มักเป็น almalinux/root หรือ rl/root

ให้ดูคอลัมน์ VFree ของ vgs ด้วย ถ้ามีพื้นที่ว่างเหลืออยู่แล้ว สามารถข้ามไปขั้นตอนที่ 4 ได้เลย กรณีนี้พบบ่อยบน Ubuntu เพราะตัวติดตั้งมักสร้าง LV ไม่เต็ม VG

ขั้นตอนที่ 2 (กรณี A): ขยาย PV หลังขยายดิสก์เดิม

ถ้า lsblk ยังแสดงขนาดดิสก์เดิม ให้สั่งให้ Kernel อ่านขนาดดิสก์ใหม่ (เปลี่ยน vda ตามเครื่องของคุณ)

echo 1 | sudo tee /sys/class/block/vda/device/rescan

ถ้าไม่มีไฟล์ rescan สำหรับดิสก์ชนิดนั้น ให้รีบูตเครื่องหนึ่งครั้ง จากนั้นติดตั้งเครื่องมือ growpart

# Ubuntu
sudo apt install cloud-guest-utils
# AlmaLinux / Rocky
sudo dnf install cloud-utils-growpart

ขยายพาร์ติชันที่ 3 ของดิสก์ vda ให้เต็มพื้นที่ แล้วขยาย PV ตาม (สังเกตว่า growpart ใส่ชื่อดิสก์กับเลขพาร์ติชันแยกกันด้วยช่องว่าง)

sudo growpart /dev/vda 3
sudo pvresize /dev/vda3

ผลที่คาดหวังคือ CHANGED: partition=3 ... และ 1 physical volume(s) resized จากนั้น sudo vgs ต้องแสดง VFree เพิ่มขึ้น growpart ทำงานได้ขณะระบบกำลังใช้งาน และจะขยายได้เฉพาะพาร์ติชันสุดท้ายที่มีพื้นที่ว่างต่อท้ายเท่านั้น

ขั้นตอนที่ 3 (กรณี B): เพิ่มดิสก์ใหม่เข้า Volume Group

ถ้าคุณเพิ่มดิสก์ลูกใหม่ เช่น vdb ให้ยืนยันก่อนว่าดิสก์นั้นว่างจริงและไม่มีการ Mount

lsblk -f /dev/vdb

ถ้าคอลัมน์ FSTYPE ว่างและไม่มีพาร์ติชัน จึงสร้าง PV และเพิ่มเข้า VG

sudo pvcreate /dev/vdb
sudo vgextend ubuntu-vg /dev/vdb

หมายเหตุ: pvcreate เขียนทับส่วนหัวของดิสก์ ถ้าเลือกดิสก์ผิดลูก ข้อมูลในดิสก์นั้นจะเข้าถึงไม่ได้ ตรวจชื่อดิสก์และขนาดให้ตรงกับที่เพิ่มไปก่อนกด Enter ทุกครั้ง อีกข้อที่ควรรู้คือ LV ที่กระจายอยู่บนหลายดิสก์จะเสียหายทั้งก้อนถ้าดิสก์ลูกใดลูกหนึ่งหาย ถ้าต้องการแยกข้อมูลไว้ในดิสก์ของตัวเอง การ Mount ดิสก์ใหม่เป็นโฟลเดอร์แยกอาจเหมาะกว่า ดู Mount ดิสก์แบบถาวรด้วย /etc/fstab และ UUID

ขั้นตอนที่ 4: ขยาย Logical Volume และ Filesystem

เมื่อ VG มีพื้นที่ว่างแล้ว ขยาย LV ด้วยคำสั่งเดียวที่ขยาย Filesystem ไปพร้อมกัน

sudo lvextend -r -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

-l +100%FREE ใช้พื้นที่ว่างทั้งหมดของ VG ถ้าต้องการเพิ่มเป็นจำนวนแน่นอนให้ใช้ -L +20G แทน ส่วน -r สั่งให้ขยาย Filesystem ต่อทันที โดยเลือกเครื่องมือให้เองตามชนิด ผลที่คาดหวังคือ Logical volume ubuntu-vg/ubuntu-lv successfully resized ตามด้วยข้อความจาก resize2fs หรือ xfs_growfs

ถ้าขยาย LV ไปแล้วแต่ลืมใส่ -r ให้ขยาย Filesystem แยกตามชนิดที่เห็นในคอลัมน์ Type ของ df -hT

Filesystemคำสั่งสิ่งที่ระบุ
ext4 (ค่าเริ่มต้นของ Ubuntu)sudo resize2fs /dev/ubuntu-vg/ubuntu-lvอุปกรณ์ของ LV
XFS (ค่าเริ่มต้นของ AlmaLinux/Rocky)sudo xfs_growfs /Mount Point

ทั้งสองแบบขยายได้ขณะ Mount และใช้งานอยู่ ไม่ต้องหยุด Service

ตัวอย่างบน AlmaLinux / Rocky

เครื่อง AlmaLinux 9 ที่ดิสก์ sda ถูกขยาย และ PV อยู่ที่ sda3 ใน VG ชื่อ almalinux

sudo growpart /dev/sda 3
sudo pvresize /dev/sda3
sudo lvextend -r -l +100%FREE /dev/almalinux/root
df -hT /

ตรวจสอบผลลัพธ์

sudo pvs
sudo vgs
sudo lvs
df -hT /

คอลัมน์ VFree ควรเหลือ 0 (ถ้าใช้ 100%FREE) ขนาด LV ใน lvs และคอลัมน์ Size ใน df -hT ต้องเพิ่มขึ้นตามพื้นที่ที่เพิ่ม ถ้า lvs เพิ่มแต่ df ไม่เพิ่ม แปลว่ายังไม่ได้ขยาย Filesystem

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

growpart: NOCHANGE: partition 3 is size ... it cannot be grown

Kernel ยังไม่เห็นขนาดดิสก์ใหม่ หรือพาร์ติชันนั้นไม่ใช่พาร์ติชันสุดท้าย ตรวจ lsblk อีกครั้ง ทำ rescan หรือรีบูต ถ้ามีพาร์ติชันอื่นต่อท้าย (เช่น Swap) จะขยายด้วย growpart ไม่ได้ ให้ใช้วิธีเพิ่มดิสก์ใหม่ตามกรณี B

Insufficient free space

VG ไม่มีพื้นที่ว่างตามที่ขอ ตรวจ VFree ด้วย vgs และตรวจว่าทำ pvresize หรือ vgextend แล้ว หรือใช้ -l +100%FREE แทนการระบุขนาดตายตัว

Can't open /dev/vdb exclusively. Mounted filesystem?

ดิสก์กำลังถูกใช้งานหรือถูก Mount อยู่ แปลว่าอาจไม่ใช่ดิสก์ว่างที่เพิ่งเพิ่ม ให้หยุดและตรวจสอบด้วย lsblk -f ก่อนดำเนินการต่อ

ต้องการลดขนาด LV

XFS ลดขนาดไม่ได้เลย ส่วน ext4 ลดได้แต่ต้อง Unmount และมีความเสี่ยงสูง ในทางปฏิบัติควรสร้าง LV ใหม่ขนาดที่ต้องการแล้วย้ายข้อมูล หรือปรึกษาทีมงานก่อน ทางที่ดีคือขยายทีละน้อยตามความจำเป็น แทนการขยายเผื่อไว้มาก ๆ

หากทำตามขั้นตอนแล้วยังติดปัญหา สามารถติดต่อทีมงาน THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/ โดยแจ้งชื่อเซิร์ฟเวอร์ ระบบปฏิบัติการ คำสั่งที่ใช้ และข้อความ Error ที่พบ เพื่อให้ตรวจสอบได้รวดเร็วขึ้น

สรุปขั้นตอน Logical Volume

ทบทวน Logical Volume ทั้งหมดตามลำดับ ก่อนนำไปใช้กับระบบจริง

  1. สำรวจโครงสร้างดิสก์ปัจจุบัน
  2. ขั้นตอนที่ 2 (กรณี A): ขยาย PV หลังขยายดิสก์เดิม
  3. ขั้นตอนที่ 3 (กรณี B): เพิ่มดิสก์ใหม่เข้า Volume Group
  4. ขยาย Logical Volume และ Filesystem

เมื่อทำครบทุกข้อแล้ว Logical Volume จะพร้อมใช้งาน หากผลลัพธ์ไม่เป็นไปตามที่คาด ให้ย้อนกลับไปดูหัวข้อปัญหาที่พบบ่อยด้านบน ซึ่งรวบรวมกรณีที่พบจริงจากการใช้งาน Logical Volume ไว้แล้ว

อ่านเพิ่มเติมเกี่ยวกับ Logical Volume

แชร์FacebookXLINELinkedIn

มีคำถามเรื่องบริการ? ติดต่อทีมงาน