IT General
น้องๆ หลายคนอาจจะเคยเจอปัญหาฮาร์ดดิสก์เต็ม ทั้งๆ ที่ยังมีพื้นที่เหลือในพาร์ทิชั่นอื่นใช่ไหม? สมัยพี่ทำร้านเน็ต SiamCafe นะ เจอปัญหาแบบนี้บ่อยมาก! LVM หรือ Logical Volume Management เนี่ยแหละคือพระเอกของเรา มันคือระบบจัดการ volume ที่ยืดหยุ่นกว่าการแบ่งพาร์ทิชั่นแบบเดิมๆ มาก
LVM จะช่วยให้เราขยายขนาดพาร์ทิชั่นได้ง่ายๆ โดยไม่ต้อง format ใหม่ หรือย้ายข้อมูลให้วุ่นวาย แถมยังรวมดิสก์หลายลูกเป็น volume เดียวได้ด้วย ทำให้การจัดการพื้นที่เก็บข้อมูลง่ายขึ้นเยอะเลย
คิดง่ายๆ เหมือนเรามีเลโก้หลายกล่อง แต่ละกล่องคือฮาร์ดดิสก์ปกติ LVM จะเหมือนแผ่นฐานเลโก้ขนาดใหญ่ ที่เราเอาเลโก้หลายกล่องมาต่อรวมกันได้ตามใจชอบ อยากเพิ่มขนาดก็แค่เอาเลโก้กล่องใหม่มาต่อเพิ่ม
Physical Volumes ก็คือฮาร์ดดิสก์ หรือพาร์ทิชั่นที่เราจะเอามาใช้กับ LVM นั่นแหละ ก่อนอื่นเราต้อง "Mark" ให้ดิสก์หรือพาร์ทิชั่นนั้นๆ เป็น PV ก่อน LVM ถึงจะมองเห็นและเอาไปใช้งานได้
Volume Groups คือกลุ่มของ PVs ที่เราเอามา "รวมกัน" เป็นเหมือน "pool" ของพื้นที่เก็บข้อมูลขนาดใหญ่ เราสามารถสร้าง Logical Volumes (LVs) จาก VG ได้
Logical Volumes คือพาร์ทิชั่นที่เราสร้างขึ้นมาจาก VG อีกทีหนึ่ง LV จะมีขนาดตามที่เรากำหนด และสามารถขยายหรือลดขนาดได้ตามต้องการ นี่แหละคือความยืดหยุ่นที่ LVM เหนือกว่าการแบ่งพาร์ทิชั่นแบบเดิมๆ
ถ้ายังงงๆ ลองเข้าไปอ่านบทความอื่นๆ ที่ SiamCafe Blog ได้นะ มีเรื่อง IT ที่น่าสนใจอีกเยอะเลย
การใช้งาน LVM อาจจะดูซับซ้อนในช่วงแรก แต่ถ้าเข้าใจหลักการแล้วจะพบว่ามันไม่ได้ยากอย่างที่คิด สมัยพี่ทำร้านเน็ตนะ ช่วงแรกก็งมๆ เอาเหมือนกัน แต่พอคล่องแล้วชีวิตง่ายขึ้นเยอะ
สมมติว่าเรามีดิสก์ชื่อ /dev/sdb เราจะสร้าง PV โดยใช้คำสั่งนี้:
pvcreate /dev/sdb
คำสั่งนี้จะ "Mark" ให้ /dev/sdb กลายเป็น PV ที่ LVM รู้จัก
หลังจากมี PV แล้ว เราจะสร้าง VG โดยใช้คำสั่ง:
vgcreate myvg /dev/sdb
คำสั่งนี้จะสร้าง VG ชื่อ myvg โดยใช้ /dev/sdb เป็นสมาชิก
สุดท้าย เราจะสร้าง LV จาก VG ที่สร้างไว้:
lvcreate -n mylv -L 10G myvg
คำสั่งนี้จะสร้าง LV ชื่อ mylv ขนาด 10GB จาก VG ชื่อ myvg เราก็จะได้ /dev/myvg/mylv ซึ่งเป็นเหมือนพาร์ทิชั่นที่เราสามารถ format และ mount ได้ตามปกติ
ถ้าวันดีคืนดี พื้นที่ LV ไม่พอ เราสามารถขยายขนาดได้ง่ายๆ ดังนี้ (สมมติว่าเราต้องการเพิ่มอีก 5GB):
lvextend -L +5G /dev/myvg/mylv
resize2fs /dev/myvg/mylv
คำสั่ง lvextend จะขยายขนาด LV และ resize2fs จะขยาย filesystem ให้เต็มพื้นที่ใหม่
เห็นไหมว่า LVM มันยืดหยุ่นขนาดไหน ลองเอาไปปรับใช้กันดูนะ ถ้าติดขัดตรงไหน ลองหาข้อมูลเพิ่มเติมที่ SiamCafe Blog หรือถามใน forum ได้เลย
แน่นอนว่า LVM ไม่ใช่ทางเลือกเดียวในการจัดการพื้นที่เก็บข้อมูล เรามาดูกันว่ามันแตกต่างจากวิธีอื่นๆ ยังไง
| คุณสมบัติ | LVM | Partitions แบบเดิม |
|---|---|---|
| ความยืดหยุ่นในการปรับขนาด | สูง (ขยาย/ลดได้ง่าย) | ต่ำ (ต้อง format ใหม่) |
| การรวมดิสก์หลายลูก | ทำได้ | ทำไม่ได้ (ต้องใช้ RAID) |
| Snapshot | รองรับ | ไม่รองรับ |
| ความซับซ้อน | สูงกว่า | ต่ำกว่า |
| เหมาะกับ | Server, Desktop ที่ต้องการความยืดหยุ่นสูง | Desktop ทั่วไป |
จากตารางจะเห็นว่า LVM เหมาะกับงานที่ต้องการความยืดหยุ่นสูง เช่น Server ที่ต้องมีการปรับขนาดพื้นที่เก็บข้อมูลบ่อยๆ แต่ถ้าเป็น Desktop ทั่วไป การแบ่ง partitions แบบเดิมก็อาจจะเพียงพอ
สมัยผมทำร้านเน็ต SiamCafe เนี่ย เรื่อง LVM นี่สำคัญมาก เพราะต้องจัดการดิสก์หลายลูกให้ลูกค้าลงเกม ลงโปรแกรมกันได้เต็มที่ แถมยังต้องสำรองข้อมูลลูกค้าด้วย สมัยนั้นฮาร์ดดิสก์ลูกนึงแพงหูฉี่ การจัดการพื้นที่ให้คุ้มค่าเลยสำคัญสุดๆ
ที่สำคัญคือ อย่าประมาทเรื่อง Backup! LVM มันช่วยให้เราขยาย Volume ได้ง่ายก็จริง แต่ถ้าฮาร์ดแวร์พัง ข้อมูลก็หายวับได้เหมือนกัน ต้องมีแผนสำรองข้อมูลที่ดีเสมอ
1. ตั้งชื่อ Logical Volume ให้สื่อความหมาย: อย่าตั้งชื่อ LV ว่า lv01, lv02 เพราะพอมีเยอะๆ จะงงตายห่า สมัยผมจะตั้งชื่อตามการใช้งานเลย เช่น lv_webserver, lv_database, lv_user_data
2. Monitor พื้นที่ดิสก์สม่ำเสมอ: อย่ารอให้พื้นที่เต็มแล้วค่อยมาแก้ปัญหา ใช้คำสั่ง df -h หรือ vgs, lvs เช็คพื้นที่เป็นประจำ ถ้าใกล้เต็มก็ขยายซะ อย่าให้ระบบรวน
# ตัวอย่างการขยาย Logical Volume
lvextend -L +50G /dev/vg0/lv_webserver
resize2fs /dev/vg0/lv_webserver
3. Snapshot ก่อนทำอะไรเสี่ยงๆ: ก่อนจะอัพเดทระบบ หรือลงโปรแกรมอะไรที่เสี่ยงๆ ให้สร้าง Snapshot เก็บไว้ก่อน ถ้าเจ๊งขึ้นมาก็ Rollback กลับได้ สมัยก่อนผมใช้ Snapshot ช่วยชีวิตมาหลายครั้งแล้ว
# สร้าง Snapshot
lvcreate -L 10G -s -n lv_webserver_snap /dev/vg0/lv_webserver
# Rollback กลับ
lvconvert --merge /dev/vg0/lv_webserver_snap
4. Striping Volume เพื่อเพิ่มความเร็ว (ถ้าจำเป็น): ถ้าต้องการประสิทธิภาพในการอ่านเขียนข้อมูลมากๆ เช่น Database Server หรือ Video Editing ให้ใช้ Striping Volume มันจะกระจายข้อมูลไปหลายๆ ดิสก์ ทำให้เร็วขึ้น แต่ข้อเสียคือ ถ้าดิสก์ตัวใดตัวหนึ่งพัง ข้อมูลทั้งหมดจะเสียหาย ต้องระวังให้ดี
# สร้าง Striping Logical Volume
lvcreate -L 100G -i 2 -I 64k -n lv_database vg0
Striping Volume ไม่ใช่ยาวิเศษที่จะทำให้ทุกอย่างเร็วขึ้น ต้องดู Use Case ด้วยว่าจำเป็นจริงๆ ไหม ถ้าไม่จำเป็น อย่าไปยุ่งกับมัน
ถ้าใช้ LVM กับ Virtualization อย่าง Proxmox หรือ VMware การใช้ Thin Provisioning จะช่วยให้ประหยัดพื้นที่ดิสก์ได้เยอะมาก มันจะ Allocate พื้นที่ตามที่ใช้งานจริง ไม่ได้จองพื้นที่ไว้ล่วงหน้า
แต่ก็ต้อง Monitor พื้นที่ให้ดี อย่าให้ Storage Pool เต็ม เพราะ VM จะดับเอาได้ง่ายๆ
Partition ธรรมดามันตายตัว ขยายยาก ย้ายยาก LVM มันยืดหยุ่นกว่าเยอะ ขยาย Volume ได้ง่าย ย้าย Volume ไปดิสก์อื่นก็ได้ สร้าง Snapshot ได้อีก สมัยนี้ Server ส่วนใหญ่ก็ใช้ LVM กันหมดแล้ว
ถ้า PV พัง ข้อมูลใน Logical Volume (LV) ที่อยู่บน PV นั้นก็จะเสียหายไปด้วย ทางแก้คือต้องมี Backup หรือ RAID แต่ถ้าไม่มีจริงๆ ก็ต้องพึ่งพา Data Recovery ซึ่งค่าใช้จ่ายสูงมาก
การ Restore Snapshot ทำได้โดยใช้คำสั่ง lvconvert --merge แต่มันจะ Rollback ข้อมูลกลับไปยังจุดที่สร้าง Snapshot เท่านั้น ข้อมูลที่เปลี่ยนแปลงหลังจากนั้นจะหายไปหมด
LVM เหมาะกับ Server ทุกประเภทที่ต้องการความยืดหยุ่นในการจัดการพื้นที่ดิสก์ โดยเฉพาะ Server ที่มีการเปลี่ยนแปลงข้อมูลบ่อยๆ เช่น Web Server, Database Server, File Server
โดยทั่วไป LVM ไม่ได้เร็วกว่า Partition ธรรมดา แต่ถ้าใช้ Striping Volume มันจะช่วยเพิ่มความเร็วในการอ่านเขียนข้อมูลได้ แต่ก็ต้องแลกมาด้วยความเสี่ยงที่มากขึ้น
LVM เป็นเครื่องมือที่ทรงพลังในการจัดการพื้นที่ดิสก์ แต่ก็ต้องศึกษาให้เข้าใจก่อนใช้งานจริง อย่าทำอะไรโดยไม่รู้เรื่อง เพราะอาจจะทำให้ข้อมูลหายหมดได้ SiamCafe Blog มีบทความเกี่ยวกับ Linux อีกเยอะ ลองเข้าไปอ่านดูนะ
จำไว้ว่า Backup คือสิ่งสำคัญที่สุด ไม่ว่าคุณจะใช้ LVM หรือไม่ก็ตาม iCafeForex